diff --git a/jaas-client/dist/bundle.js b/jaas-client/dist/bundle.js
new file mode 100644
index 0000000..fbef4df
--- /dev/null
+++ b/jaas-client/dist/bundle.js
@@ -0,0 +1,4216 @@
+/******/ (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] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = 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;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = "./jaas-client/src/index.js");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
+  \*********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayLikeToArray; });\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayWithHoles; });\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayWithoutHoles; });\n/* harmony import */ var _arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return Object(_arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":
+/*!**************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
+  \**************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _assertThisInitialized; });\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _classCallCheck; });\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _createClass; });\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _defineProperty; });\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _extends; });\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***!
+  \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _inheritsLoose; });\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArray.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _iterableToArray; });\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArray.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js":
+/*!*************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
+  \*************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _iterableToArrayLimit; });\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _nonIterableRest; });\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _nonIterableSpread; });\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js":
+/*!****************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js ***!
+  \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _objectWithoutProperties; });\n/* harmony import */ var _objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = Object(_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js":
+/*!*********************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***!
+  \*********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _objectWithoutPropertiesLoose; });\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
+  \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _slicedToArray; });\n/* harmony import */ var _arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\");\n/* harmony import */ var _iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\");\n/* harmony import */ var _unsupportedIterableToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableRest__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\");\n\n\n\n\nfunction _slicedToArray(arr, i) {\n  return Object(_arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || Object(_iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr, i) || Object(_unsupportedIterableToArray__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr, i) || Object(_nonIterableRest__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _toConsumableArray; });\n/* harmony import */ var _arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithoutHoles */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\");\n/* harmony import */ var _iterableToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/iterableToArray.js\");\n/* harmony import */ var _unsupportedIterableToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableSpread__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableSpread */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\");\n\n\n\n\nfunction _toConsumableArray(arr) {\n  return Object(_arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || Object(_iterableToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr) || Object(_unsupportedIterableToArray__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr) || Object(_nonIterableSpread__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js ***!
+  \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _typeof; });\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js":
+/*!*******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
+  \*******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _unsupportedIterableToArray; });\n/* harmony import */ var _arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return Object(_arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Object(_arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/extends.js":
+/*!********************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/extends.js ***!
+  \********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("function _extends() {\n  module.exports = _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/extends.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
+  \**********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("function _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nmodule.exports = _interopRequireDefault;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Avatar/Avatar.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Avatar/Avatar.js ***!
+  \*************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _internal_svg_icons_Person__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../internal/svg-icons/Person */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/Person.js\");\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      flexShrink: 0,\n      width: 40,\n      height: 40,\n      fontFamily: theme.typography.fontFamily,\n      fontSize: theme.typography.pxToRem(20),\n      lineHeight: 1,\n      borderRadius: '50%',\n      overflow: 'hidden',\n      userSelect: 'none'\n    },\n\n    /* Styles applied to the root element if not `src` or `srcSet`. */\n    colorDefault: {\n      color: theme.palette.background.default,\n      backgroundColor: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[600]\n    },\n\n    /* Styles applied to the root element if `variant=\"circle\"`. */\n    circle: {},\n\n    /* Styles applied to the root element if `variant=\"rounded\"`. */\n    rounded: {\n      borderRadius: theme.shape.borderRadius\n    },\n\n    /* Styles applied to the root element if `variant=\"square\"`. */\n    square: {\n      borderRadius: 0\n    },\n\n    /* Styles applied to the img element if either `src` or `srcSet` is defined. */\n    img: {\n      width: '100%',\n      height: '100%',\n      textAlign: 'center',\n      // Handle non-square image. The property isn't supported by IE 11.\n      objectFit: 'cover',\n      // Hide alt text.\n      color: 'transparent',\n      // Hide the image broken icon, only works on Chrome.\n      textIndent: 10000\n    },\n\n    /* Styles applied to the fallback icon */\n    fallback: {\n      width: '75%',\n      height: '75%'\n    }\n  };\n};\n\nfunction useLoaded(_ref) {\n  var src = _ref.src,\n      srcSet = _ref.srcSet;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      loaded = _React$useState[0],\n      setLoaded = _React$useState[1];\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (!src && !srcSet) {\n      return undefined;\n    }\n\n    setLoaded(false);\n    var active = true;\n    var image = new Image();\n    image.src = src;\n    image.srcSet = srcSet;\n\n    image.onload = function () {\n      if (!active) {\n        return;\n      }\n\n      setLoaded('loaded');\n    };\n\n    image.onerror = function () {\n      if (!active) {\n        return;\n      }\n\n      setLoaded('error');\n    };\n\n    return function () {\n      active = false;\n    };\n  }, [src, srcSet]);\n  return loaded;\n}\n\nvar Avatar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Avatar(props, ref) {\n  var alt = props.alt,\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      imgProps = props.imgProps,\n      sizes = props.sizes,\n      src = props.src,\n      srcSet = props.srcSet,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'circle' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"alt\", \"children\", \"classes\", \"className\", \"component\", \"imgProps\", \"sizes\", \"src\", \"srcSet\", \"variant\"]);\n\n  var children = null; // Use a hook instead of onError on the img element to support server-side rendering.\n\n  var loaded = useLoaded({\n    src: src,\n    srcSet: srcSet\n  });\n  var hasImg = src || srcSet;\n  var hasImgNotFailing = hasImg && loaded !== 'error';\n\n  if (hasImgNotFailing) {\n    children = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"img\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      alt: alt,\n      src: src,\n      srcSet: srcSet,\n      sizes: sizes,\n      className: classes.img\n    }, imgProps));\n  } else if (childrenProp != null) {\n    children = childrenProp;\n  } else if (hasImg && alt) {\n    children = alt[0];\n  } else {\n    children = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_svg_icons_Person__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n      className: classes.fallback\n    });\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes.system, classes[variant], className, !hasImgNotFailing && classes.colorDefault),\n    ref: ref\n  }, other), children);\n});\n true ? Avatar.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Used in combination with `src` or `srcSet` to\n   * provide an alt attribute for the rendered `img` element.\n   */\n  alt: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Used to render icon or text elements inside the Avatar if `src` is not set.\n   * This can be an element, or just a string.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * Attributes applied to the `img` element if the component is used to display an image.\n   * It can be used to listen for the loading error event.\n   */\n  imgProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The `sizes` attribute for the `img` element.\n   */\n  sizes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The `src` attribute for the `img` element.\n   */\n  src: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The `srcSet` attribute for the `img` element.\n   * Use this attribute for responsive image display.\n   */\n  srcSet: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The shape of the avatar.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['circle', 'rounded', 'square'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiAvatar'\n})(Avatar));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Avatar/Avatar.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Avatar/index.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Avatar/index.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Avatar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Avatar */ \"./jaas-client/node_modules/@material-ui/core/esm/Avatar/Avatar.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Avatar__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Avatar/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Backdrop/Backdrop.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Backdrop/Backdrop.js ***!
+  \*****************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Fade__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Fade */ \"./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js\");\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    // Improve scrollable dialog support.\n    zIndex: -1,\n    position: 'fixed',\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    right: 0,\n    bottom: 0,\n    top: 0,\n    left: 0,\n    backgroundColor: 'rgba(0, 0, 0, 0.5)',\n    WebkitTapHighlightColor: 'transparent'\n  },\n\n  /* Styles applied to the root element if `invisible={true}`. */\n  invisible: {\n    backgroundColor: 'transparent'\n  }\n};\nvar Backdrop = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Backdrop(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$invisible = props.invisible,\n      invisible = _props$invisible === void 0 ? false : _props$invisible,\n      open = props.open,\n      transitionDuration = props.transitionDuration,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? _Fade__WEBPACK_IMPORTED_MODULE_6__[\"default\"] : _props$TransitionComp,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"invisible\", \"open\", \"transitionDuration\", \"TransitionComponent\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    in: open,\n    timeout: transitionDuration\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, invisible && classes.invisible),\n    \"aria-hidden\": true,\n    ref: ref\n  }, children));\n});\n true ? Backdrop.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the backdrop is invisible.\n   * It can be used when rendering a popover or a custom select component.\n   */\n  invisible: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the backdrop is open.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number\n  })])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiBackdrop'\n})(Backdrop));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Backdrop/Backdrop.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Backdrop/index.js":
+/*!**************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Backdrop/index.js ***!
+  \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Backdrop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Backdrop */ \"./jaas-client/node_modules/@material-ui/core/esm/Backdrop/Backdrop.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Backdrop__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Backdrop/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Box/Box.js":
+/*!*******************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Box/Box.js ***!
+  \*******************************************************************/
+/*! exports provided: styleFunction, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styleFunction\", function() { return styleFunction; });\n/* harmony import */ var _material_ui_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/system */ \"./jaas-client/node_modules/@material-ui/system/esm/index.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/styled */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/styled.js\");\n\n\nvar styleFunction = Object(_material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"css\"])(Object(_material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"compose\"])(_material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"borders\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"display\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"flexbox\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"grid\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"positions\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"palette\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"shadows\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"sizing\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"spacing\"], _material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"typography\"]));\n/**\n * @ignore - do not document.\n */\n\nvar Box = Object(_styles_styled__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('div')(styleFunction, {\n  name: 'MuiBox'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Box);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Box/Box.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Box/index.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Box/index.js ***!
+  \*********************************************************************/
+/*! exports provided: default, styleFunction */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Box__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Box */ \"./jaas-client/node_modules/@material-ui/core/esm/Box/Box.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Box__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"styleFunction\", function() { return _Box__WEBPACK_IMPORTED_MODULE_0__[\"styleFunction\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Box/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Button/Button.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Button/Button.js ***!
+  \*************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/colorManipulator */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js\");\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ButtonBase */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, theme.typography.button, {\n      boxSizing: 'border-box',\n      minWidth: 64,\n      padding: '6px 16px',\n      borderRadius: theme.shape.borderRadius,\n      color: theme.palette.text.primary,\n      transition: theme.transitions.create(['background-color', 'box-shadow', 'border'], {\n        duration: theme.transitions.duration.short\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.text.primary, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        },\n        '&$disabled': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }),\n\n    /* Styles applied to the span element that wraps the children. */\n    label: {\n      width: '100%',\n      // Ensure the correct width for iOS Safari\n      display: 'inherit',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"`. */\n    text: {\n      padding: '6px 8px'\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"` and `color=\"primary\"`. */\n    textPrimary: {\n      color: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"` and `color=\"secondary\"`. */\n    textSecondary: {\n      color: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      padding: '5px 15px',\n      border: \"1px solid \".concat(theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'),\n      '&$disabled': {\n        border: \"1px solid \".concat(theme.palette.action.disabledBackground)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"primary\"`. */\n    outlinedPrimary: {\n      color: theme.palette.primary.main,\n      border: \"1px solid \".concat(Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.primary.main, 0.5)),\n      '&:hover': {\n        border: \"1px solid \".concat(theme.palette.primary.main),\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"secondary\"`. */\n    outlinedSecondary: {\n      color: theme.palette.secondary.main,\n      border: \"1px solid \".concat(Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.secondary.main, 0.5)),\n      '&:hover': {\n        border: \"1px solid \".concat(theme.palette.secondary.main),\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_6__[\"fade\"])(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        border: \"1px solid \".concat(theme.palette.action.disabled)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"`. */\n    contained: {\n      color: theme.palette.getContrastText(theme.palette.grey[300]),\n      backgroundColor: theme.palette.grey[300],\n      boxShadow: theme.shadows[2],\n      '&:hover': {\n        backgroundColor: theme.palette.grey.A100,\n        boxShadow: theme.shadows[4],\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          boxShadow: theme.shadows[2],\n          backgroundColor: theme.palette.grey[300]\n        },\n        '&$disabled': {\n          backgroundColor: theme.palette.action.disabledBackground\n        }\n      },\n      '&$focusVisible': {\n        boxShadow: theme.shadows[6]\n      },\n      '&:active': {\n        boxShadow: theme.shadows[8]\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled,\n        boxShadow: theme.shadows[0],\n        backgroundColor: theme.palette.action.disabledBackground\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"` and `color=\"primary\"`. */\n    containedPrimary: {\n      color: theme.palette.primary.contrastText,\n      backgroundColor: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.primary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.primary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"` and `color=\"secondary\"`. */\n    containedSecondary: {\n      color: theme.palette.secondary.contrastText,\n      backgroundColor: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.secondary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.secondary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `disableElevation={true}`. */\n    disableElevation: {\n      boxShadow: 'none',\n      '&:hover': {\n        boxShadow: 'none'\n      },\n      '&$focusVisible': {\n        boxShadow: 'none'\n      },\n      '&:active': {\n        boxShadow: 'none'\n      },\n      '&$disabled': {\n        boxShadow: 'none'\n      }\n    },\n\n    /* Pseudo-class applied to the ButtonBase root element if the button is keyboard focused. */\n    focusVisible: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit',\n      borderColor: 'currentColor'\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"text\"`. */\n    textSizeSmall: {\n      padding: '4px 5px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"text\"`. */\n    textSizeLarge: {\n      padding: '8px 11px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"outlined\"`. */\n    outlinedSizeSmall: {\n      padding: '3px 9px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"outlined\"`. */\n    outlinedSizeLarge: {\n      padding: '7px 21px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"contained\"`. */\n    containedSizeSmall: {\n      padding: '4px 10px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"contained\"`. */\n    containedSizeLarge: {\n      padding: '8px 22px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {},\n\n    /* Styles applied to the root element if `size=\"large\"`. */\n    sizeLarge: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {\n      width: '100%'\n    },\n\n    /* Styles applied to the startIcon element if supplied. */\n    startIcon: {\n      display: 'inherit',\n      marginRight: 8,\n      marginLeft: -4,\n      '&$iconSizeSmall': {\n        marginLeft: -2\n      }\n    },\n\n    /* Styles applied to the endIcon element if supplied. */\n    endIcon: {\n      display: 'inherit',\n      marginRight: -4,\n      marginLeft: 8,\n      '&$iconSizeSmall': {\n        marginRight: -2\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"small\"`. */\n    iconSizeSmall: {\n      '& > *:first-child': {\n        fontSize: 18\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"medium\"`. */\n    iconSizeMedium: {\n      '& > *:first-child': {\n        fontSize: 20\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"large\"`. */\n    iconSizeLarge: {\n      '& > *:first-child': {\n        fontSize: 22\n      }\n    }\n  };\n};\nvar Button = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Button(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'button' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableElevati = props.disableElevation,\n      disableElevation = _props$disableElevati === void 0 ? false : _props$disableElevati,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      endIconProp = props.endIcon,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      startIconProp = props.startIcon,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'button' : _props$type,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'text' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"disableElevation\", \"disableFocusRipple\", \"endIcon\", \"focusVisibleClassName\", \"fullWidth\", \"size\", \"startIcon\", \"type\", \"variant\"]);\n\n  var startIcon = startIconProp && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.startIcon, classes[\"iconSize\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(size))])\n  }, startIconProp);\n  var endIcon = endIconProp && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.endIcon, classes[\"iconSize\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(size))])\n  }, endIconProp);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_ButtonBase__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes[variant], className, color === 'inherit' ? classes.colorInherit : color !== 'default' && classes[\"\".concat(variant).concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(color))], size !== 'medium' && [classes[\"\".concat(variant, \"Size\").concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(size))], classes[\"size\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(size))]], disableElevation && classes.disableElevation, disabled && classes.disabled, fullWidth && classes.fullWidth),\n    component: component,\n    disabled: disabled,\n    focusRipple: !disableFocusRipple,\n    focusVisibleClassName: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.focusVisible, focusVisibleClassName),\n    ref: ref,\n    type: type\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    className: classes.label\n  }, startIcon, children, endIcon));\n});\n true ? Button.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the button.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the button will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, no elevation is used.\n   */\n  disableElevation: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   */\n  disableFocusRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `focusVisibleClassName`.\n   */\n  disableRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Element placed after the children.\n   */\n  endIcon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the button will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The URL to link to when the button is clicked.\n   * If defined, an `a` element will be used as the root node.\n   */\n  href: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The size of the button.\n   * `small` is equivalent to the dense button styling.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['large', 'medium', 'small']),\n\n  /**\n   * Element placed before the children.\n   */\n  startIcon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * @ignore\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['button', 'reset', 'submit']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['contained', 'outlined', 'text'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiButton'\n})(Button));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Button/Button.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Button/index.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Button/index.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Button */ \"./jaas-client/node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Button__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Button/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js ***!
+  \*********************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/useEventCallback */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/useIsFocusVisible */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js\");\n/* harmony import */ var _TouchRipple__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./TouchRipple */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'inline-flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    position: 'relative',\n    WebkitTapHighlightColor: 'transparent',\n    backgroundColor: 'transparent',\n    // Reset default value\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0,\n    border: 0,\n    margin: 0,\n    // Remove the margin in Safari\n    borderRadius: 0,\n    padding: 0,\n    // Remove the padding in Firefox\n    cursor: 'pointer',\n    userSelect: 'none',\n    verticalAlign: 'middle',\n    '-moz-appearance': 'none',\n    // Reset\n    '-webkit-appearance': 'none',\n    // Reset\n    textDecoration: 'none',\n    // So we take precedent over the style of a native <a /> element.\n    color: 'inherit',\n    '&::-moz-focus-inner': {\n      borderStyle: 'none' // Remove Firefox dotted outline.\n\n    },\n    '&$disabled': {\n      pointerEvents: 'none',\n      // Disable link interactions\n      cursor: 'default'\n    },\n    '@media print': {\n      colorAdjust: 'exact'\n    }\n  },\n\n  /* Pseudo-class applied to the root element if `disabled={true}`. */\n  disabled: {},\n\n  /* Pseudo-class applied to the root element if keyboard focused. */\n  focusVisible: {}\n};\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\n\nvar ButtonBase = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function ButtonBase(props, ref) {\n  var action = props.action,\n      buttonRefProp = props.buttonRef,\n      _props$centerRipple = props.centerRipple,\n      centerRipple = _props$centerRipple === void 0 ? false : _props$centerRipple,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'button' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableRipple = props.disableRipple,\n      disableRipple = _props$disableRipple === void 0 ? false : _props$disableRipple,\n      _props$disableTouchRi = props.disableTouchRipple,\n      disableTouchRipple = _props$disableTouchRi === void 0 ? false : _props$disableTouchRi,\n      _props$focusRipple = props.focusRipple,\n      focusRipple = _props$focusRipple === void 0 ? false : _props$focusRipple,\n      focusVisibleClassName = props.focusVisibleClassName,\n      onBlur = props.onBlur,\n      onClick = props.onClick,\n      onFocus = props.onFocus,\n      onFocusVisible = props.onFocusVisible,\n      onKeyDown = props.onKeyDown,\n      onKeyUp = props.onKeyUp,\n      onMouseDown = props.onMouseDown,\n      onMouseLeave = props.onMouseLeave,\n      onMouseUp = props.onMouseUp,\n      onTouchEnd = props.onTouchEnd,\n      onTouchMove = props.onTouchMove,\n      onTouchStart = props.onTouchStart,\n      onDragLeave = props.onDragLeave,\n      _props$tabIndex = props.tabIndex,\n      tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n      TouchRippleProps = props.TouchRippleProps,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'button' : _props$type,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"action\", \"buttonRef\", \"centerRipple\", \"children\", \"classes\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"onBlur\", \"onClick\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"onDragLeave\", \"tabIndex\", \"TouchRippleProps\", \"type\"]);\n\n  var buttonRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n\n  function getButtonNode() {\n    // #StrictMode ready\n    return react_dom__WEBPACK_IMPORTED_MODULE_4__[\"findDOMNode\"](buttonRef.current);\n  }\n\n  var rippleRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      focusVisible = _React$useState[0],\n      setFocusVisible = _React$useState[1];\n\n  if (disabled && focusVisible) {\n    setFocusVisible(false);\n  }\n\n  var _useIsFocusVisible = Object(_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useImperativeHandle\"](action, function () {\n    return {\n      focusVisible: function focusVisible() {\n        setFocusVisible(true);\n        buttonRef.current.focus();\n      }\n    };\n  }, []);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (focusVisible && focusRipple && !disableRipple) {\n      rippleRef.current.pulsate();\n    }\n  }, [disableRipple, focusRipple, focusVisible]);\n\n  function useRippleHandler(rippleAction, eventCallback) {\n    var skipRippleAction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : disableTouchRipple;\n    return Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(function (event) {\n      if (eventCallback) {\n        eventCallback(event);\n      }\n\n      var ignore = skipRippleAction;\n\n      if (!ignore && rippleRef.current) {\n        rippleRef.current[rippleAction](event);\n      }\n\n      return true;\n    });\n  }\n\n  var handleMouseDown = useRippleHandler('start', onMouseDown);\n  var handleDragLeave = useRippleHandler('stop', onDragLeave);\n  var handleMouseUp = useRippleHandler('stop', onMouseUp);\n  var handleMouseLeave = useRippleHandler('stop', function (event) {\n    if (focusVisible) {\n      event.preventDefault();\n    }\n\n    if (onMouseLeave) {\n      onMouseLeave(event);\n    }\n  });\n  var handleTouchStart = useRippleHandler('start', onTouchStart);\n  var handleTouchEnd = useRippleHandler('stop', onTouchEnd);\n  var handleTouchMove = useRippleHandler('stop', onTouchMove);\n  var handleBlur = useRippleHandler('stop', function (event) {\n    if (focusVisible) {\n      onBlurVisible(event);\n      setFocusVisible(false);\n    }\n\n    if (onBlur) {\n      onBlur(event);\n    }\n  }, false);\n  var handleFocus = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(function (event) {\n    // Fix for https://github.com/facebook/react/issues/7769\n    if (!buttonRef.current) {\n      buttonRef.current = event.currentTarget;\n    }\n\n    if (isFocusVisible(event)) {\n      setFocusVisible(true);\n\n      if (onFocusVisible) {\n        onFocusVisible(event);\n      }\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n  });\n\n  var isNonNativeButton = function isNonNativeButton() {\n    var button = getButtonNode();\n    return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n  };\n  /**\n   * IE 11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat\n   */\n\n\n  var keydownRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](false);\n  var handleKeyDown = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(function (event) {\n    // Check if key is already down to avoid repeats being counted as multiple activations\n    if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {\n      keydownRef.current = true;\n      event.persist();\n      rippleRef.current.stop(event, function () {\n        rippleRef.current.start(event);\n      });\n    }\n\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {\n      event.preventDefault();\n    }\n\n    if (onKeyDown) {\n      onKeyDown(event);\n    } // Keyboard accessibility for non interactive elements\n\n\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {\n      event.preventDefault();\n\n      if (onClick) {\n        onClick(event);\n      }\n    }\n  });\n  var handleKeyUp = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(function (event) {\n    // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed\n    // https://codesandbox.io/s/button-keyup-preventdefault-dn7f0\n    if (focusRipple && event.key === ' ' && rippleRef.current && focusVisible && !event.defaultPrevented) {\n      keydownRef.current = false;\n      event.persist();\n      rippleRef.current.stop(event, function () {\n        rippleRef.current.pulsate(event);\n      });\n    }\n\n    if (onKeyUp) {\n      onKeyUp(event);\n    } // Keyboard accessibility for non interactive elements\n\n\n    if (onClick && event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented) {\n      onClick(event);\n    }\n  });\n  var ComponentProp = component;\n\n  if (ComponentProp === 'button' && other.href) {\n    ComponentProp = 'a';\n  }\n\n  var buttonProps = {};\n\n  if (ComponentProp === 'button') {\n    buttonProps.type = type;\n    buttonProps.disabled = disabled;\n  } else {\n    if (ComponentProp !== 'a' || !other.href) {\n      buttonProps.role = 'button';\n    }\n\n    buttonProps['aria-disabled'] = disabled;\n  }\n\n  var handleUserRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(buttonRefProp, ref);\n  var handleOwnRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(focusVisibleRef, buttonRef);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(handleUserRef, handleOwnRef);\n\n  var _React$useState2 = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      mountedState = _React$useState2[0],\n      setMountedState = _React$useState2[1];\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    setMountedState(true);\n  }, []);\n  var enableTouchRipple = mountedState && !disableRipple && !disabled;\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n      if (enableTouchRipple && !rippleRef.current) {\n        console.error(['Material-UI: The `component` prop provided to ButtonBase is invalid.', 'Please make sure the children prop is rendered in this custom component.'].join('\\n'));\n      }\n    }, [enableTouchRipple]);\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](ComponentProp, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className, focusVisible && [classes.focusVisible, focusVisibleClassName], disabled && classes.disabled),\n    onBlur: handleBlur,\n    onClick: onClick,\n    onFocus: handleFocus,\n    onKeyDown: handleKeyDown,\n    onKeyUp: handleKeyUp,\n    onMouseDown: handleMouseDown,\n    onMouseLeave: handleMouseLeave,\n    onMouseUp: handleMouseUp,\n    onDragLeave: handleDragLeave,\n    onTouchEnd: handleTouchEnd,\n    onTouchMove: handleTouchMove,\n    onTouchStart: handleTouchStart,\n    ref: handleRef,\n    tabIndex: disabled ? -1 : tabIndex\n  }, buttonProps, other), children, enableTouchRipple ?\n  /*#__PURE__*/\n\n  /* TouchRipple is only needed client-side, x2 boost on the server. */\n  react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_TouchRipple__WEBPACK_IMPORTED_MODULE_11__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    ref: rippleRef,\n    center: centerRipple\n  }, TouchRippleProps)) : null);\n});\n true ? ButtonBase.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A ref for imperative actions.\n   * It currently only supports `focusVisible()` action.\n   */\n  action: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"refType\"],\n\n  /**\n   * @ignore\n   *\n   * Use that prop to pass a ref to the native button component.\n   * @deprecated Use `ref` instead.\n   */\n  buttonRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"refType\"],\n\n  /**\n   * If `true`, the ripples will be centered.\n   * They won't start at the cursor interaction position.\n   */\n  centerRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"elementTypeAcceptingRef\"],\n\n  /**\n   * If `true`, the base button will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `focusVisibleClassName`.\n   */\n  disableRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the touch ripple effect will be disabled.\n   */\n  disableTouchRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the base button will have a keyboard focus ripple.\n   */\n  focusRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * This prop can help a person know which element has the keyboard focus.\n   * The class name will be applied when the element gain the focus through a keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/master/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * @ignore\n   */\n  href: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onDragLeave: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component is focused with a keyboard.\n   * We trigger a `onFocus` callback too.\n   */\n  onFocusVisible: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onKeyUp: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onMouseUp: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onTouchEnd: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onTouchMove: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onTouchStart: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Props applied to the `TouchRipple` element.\n   */\n  TouchRippleProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['button', 'reset', 'submit']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(styles, {\n  name: 'MuiButtonBase'\n})(ButtonBase));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/Ripple.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/Ripple.js ***!
+  \*****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _utils_useEventCallback__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/useEventCallback */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js\");\n\n\n\n\nvar useEnhancedEffect = typeof window === 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"] : react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"];\n/**\n * @ignore - internal component.\n */\n\nfunction Ripple(props) {\n  var classes = props.classes,\n      _props$pulsate = props.pulsate,\n      pulsate = _props$pulsate === void 0 ? false : _props$pulsate,\n      rippleX = props.rippleX,\n      rippleY = props.rippleY,\n      rippleSize = props.rippleSize,\n      inProp = props.in,\n      _props$onExited = props.onExited,\n      onExited = _props$onExited === void 0 ? function () {} : _props$onExited,\n      timeout = props.timeout;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"](false),\n      leaving = _React$useState[0],\n      setLeaving = _React$useState[1];\n\n  var rippleClassName = Object(clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(classes.ripple, classes.rippleVisible, pulsate && classes.ripplePulsate);\n  var rippleStyles = {\n    width: rippleSize,\n    height: rippleSize,\n    top: -(rippleSize / 2) + rippleY,\n    left: -(rippleSize / 2) + rippleX\n  };\n  var childClassName = Object(clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(classes.child, leaving && classes.childLeaving, pulsate && classes.childPulsate);\n  var handleExited = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(onExited); // Ripple is used for user feedback (e.g. click or press) so we want to apply styles with the highest priority\n\n  useEnhancedEffect(function () {\n    if (!inProp) {\n      // react-transition-group#onExit\n      setLeaving(true); // react-transition-group#onExited\n\n      var timeoutId = setTimeout(handleExited, timeout);\n      return function () {\n        clearTimeout(timeoutId);\n      };\n    }\n\n    return undefined;\n  }, [handleExited, inProp, timeout]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n    className: rippleClassName,\n    style: rippleStyles\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n    className: childClassName\n  }));\n}\n\n true ? Ripple.propTypes = {\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  in: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n\n  /**\n   * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.\n   */\n  pulsate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n\n  /**\n   * Diameter of the ripple.\n   */\n  rippleSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n\n  /**\n   * Horizontal position of the ripple center.\n   */\n  rippleX: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n\n  /**\n   * Vertical position of the ripple center.\n   */\n  rippleY: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n\n  /**\n   * exit delay\n   */\n  timeout: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Ripple);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/Ripple.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js ***!
+  \**********************************************************************************/
+/*! exports provided: DELAY_RIPPLE, styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DELAY_RIPPLE\", function() { return DELAY_RIPPLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_transition_group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-transition-group */ \"./jaas-client/node_modules/react-transition-group/esm/index.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Ripple__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Ripple */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/Ripple.js\");\n\n\n\n\n\n\n\n\n\nvar DURATION = 550;\nvar DELAY_RIPPLE = 80;\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      overflow: 'hidden',\n      pointerEvents: 'none',\n      position: 'absolute',\n      zIndex: 0,\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0,\n      borderRadius: 'inherit'\n    },\n\n    /* Styles applied to the internal `Ripple` components `ripple` class. */\n    ripple: {\n      opacity: 0,\n      position: 'absolute'\n    },\n\n    /* Styles applied to the internal `Ripple` components `rippleVisible` class. */\n    rippleVisible: {\n      opacity: 0.3,\n      transform: 'scale(1)',\n      animation: \"$enter \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut)\n    },\n\n    /* Styles applied to the internal `Ripple` components `ripplePulsate` class. */\n    ripplePulsate: {\n      animationDuration: \"\".concat(theme.transitions.duration.shorter, \"ms\")\n    },\n\n    /* Styles applied to the internal `Ripple` components `child` class. */\n    child: {\n      opacity: 1,\n      display: 'block',\n      width: '100%',\n      height: '100%',\n      borderRadius: '50%',\n      backgroundColor: 'currentColor'\n    },\n\n    /* Styles applied to the internal `Ripple` components `childLeaving` class. */\n    childLeaving: {\n      opacity: 0,\n      animation: \"$exit \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut)\n    },\n\n    /* Styles applied to the internal `Ripple` components `childPulsate` class. */\n    childPulsate: {\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      animation: \"$pulsate 2500ms \".concat(theme.transitions.easing.easeInOut, \" 200ms infinite\")\n    },\n    '@keyframes enter': {\n      '0%': {\n        transform: 'scale(0)',\n        opacity: 0.1\n      },\n      '100%': {\n        transform: 'scale(1)',\n        opacity: 0.3\n      }\n    },\n    '@keyframes exit': {\n      '0%': {\n        opacity: 1\n      },\n      '100%': {\n        opacity: 0\n      }\n    },\n    '@keyframes pulsate': {\n      '0%': {\n        transform: 'scale(1)'\n      },\n      '50%': {\n        transform: 'scale(0.92)'\n      },\n      '100%': {\n        transform: 'scale(1)'\n      }\n    }\n  };\n};\n/**\n * @ignore - internal component.\n *\n * TODO v5: Make private\n */\n\nvar TouchRipple = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function TouchRipple(props, ref) {\n  var _props$center = props.center,\n      centerProp = _props$center === void 0 ? false : _props$center,\n      classes = props.classes,\n      className = props.className,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"center\", \"classes\", \"className\"]);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__[\"useState\"]([]),\n      ripples = _React$useState[0],\n      setRipples = _React$useState[1];\n\n  var nextKey = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](0);\n  var rippleCallback = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    if (rippleCallback.current) {\n      rippleCallback.current();\n      rippleCallback.current = null;\n    }\n  }, [ripples]); // Used to filter out mouse emulated events on mobile.\n\n  var ignoringMouseDown = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](false); // We use a timer in order to only show the ripples for touch \"click\" like events.\n  // We don't want to display the ripple for touch scroll events.\n\n  var startTimer = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null); // This is the hook called once the previous timeout is ready.\n\n  var startTimerCommit = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  var container = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    return function () {\n      clearTimeout(startTimer.current);\n    };\n  }, []);\n  var startCommit = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function (params) {\n    var pulsate = params.pulsate,\n        rippleX = params.rippleX,\n        rippleY = params.rippleY,\n        rippleSize = params.rippleSize,\n        cb = params.cb;\n    setRipples(function (oldRipples) {\n      return [].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(oldRipples), [/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_Ripple__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n        key: nextKey.current,\n        classes: classes,\n        timeout: DURATION,\n        pulsate: pulsate,\n        rippleX: rippleX,\n        rippleY: rippleY,\n        rippleSize: rippleSize\n      })]);\n    });\n    nextKey.current += 1;\n    rippleCallback.current = cb;\n  }, [classes]);\n  var start = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function () {\n    var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var cb = arguments.length > 2 ? arguments[2] : undefined;\n    var _options$pulsate = options.pulsate,\n        pulsate = _options$pulsate === void 0 ? false : _options$pulsate,\n        _options$center = options.center,\n        center = _options$center === void 0 ? centerProp || options.pulsate : _options$center,\n        _options$fakeElement = options.fakeElement,\n        fakeElement = _options$fakeElement === void 0 ? false : _options$fakeElement;\n\n    if (event.type === 'mousedown' && ignoringMouseDown.current) {\n      ignoringMouseDown.current = false;\n      return;\n    }\n\n    if (event.type === 'touchstart') {\n      ignoringMouseDown.current = true;\n    }\n\n    var element = fakeElement ? null : container.current;\n    var rect = element ? element.getBoundingClientRect() : {\n      width: 0,\n      height: 0,\n      left: 0,\n      top: 0\n    }; // Get the size of the ripple\n\n    var rippleX;\n    var rippleY;\n    var rippleSize;\n\n    if (center || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n      rippleX = Math.round(rect.width / 2);\n      rippleY = Math.round(rect.height / 2);\n    } else {\n      var _ref = event.touches ? event.touches[0] : event,\n          clientX = _ref.clientX,\n          clientY = _ref.clientY;\n\n      rippleX = Math.round(clientX - rect.left);\n      rippleY = Math.round(clientY - rect.top);\n    }\n\n    if (center) {\n      rippleSize = Math.sqrt((2 * Math.pow(rect.width, 2) + Math.pow(rect.height, 2)) / 3); // For some reason the animation is broken on Mobile Chrome if the size if even.\n\n      if (rippleSize % 2 === 0) {\n        rippleSize += 1;\n      }\n    } else {\n      var sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n      var sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n      rippleSize = Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeY, 2));\n    } // Touche devices\n\n\n    if (event.touches) {\n      // check that this isn't another touchstart due to multitouch\n      // otherwise we will only clear a single timer when unmounting while two\n      // are running\n      if (startTimerCommit.current === null) {\n        // Prepare the ripple effect.\n        startTimerCommit.current = function () {\n          startCommit({\n            pulsate: pulsate,\n            rippleX: rippleX,\n            rippleY: rippleY,\n            rippleSize: rippleSize,\n            cb: cb\n          });\n        }; // Delay the execution of the ripple effect.\n\n\n        startTimer.current = setTimeout(function () {\n          if (startTimerCommit.current) {\n            startTimerCommit.current();\n            startTimerCommit.current = null;\n          }\n        }, DELAY_RIPPLE); // We have to make a tradeoff with this value.\n      }\n    } else {\n      startCommit({\n        pulsate: pulsate,\n        rippleX: rippleX,\n        rippleY: rippleY,\n        rippleSize: rippleSize,\n        cb: cb\n      });\n    }\n  }, [centerProp, startCommit]);\n  var pulsate = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function () {\n    start({}, {\n      pulsate: true\n    });\n  }, [start]);\n  var stop = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function (event, cb) {\n    clearTimeout(startTimer.current); // The touch interaction occurs too quickly.\n    // We still want to show ripple effect.\n\n    if (event.type === 'touchend' && startTimerCommit.current) {\n      event.persist();\n      startTimerCommit.current();\n      startTimerCommit.current = null;\n      startTimer.current = setTimeout(function () {\n        stop(event, cb);\n      });\n      return;\n    }\n\n    startTimerCommit.current = null;\n    setRipples(function (oldRipples) {\n      if (oldRipples.length > 0) {\n        return oldRipples.slice(1);\n      }\n\n      return oldRipples;\n    });\n    rippleCallback.current = cb;\n  }, []);\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useImperativeHandle\"](ref, function () {\n    return {\n      pulsate: pulsate,\n      start: start,\n      stop: stop\n    };\n  }, [pulsate, start, stop]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"span\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(classes.root, className),\n    ref: container\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](react_transition_group__WEBPACK_IMPORTED_MODULE_5__[\"TransitionGroup\"], {\n    component: null,\n    exit: true\n  }, ripples));\n});\n true ? TouchRipple.propTypes = {\n  /**\n   * If `true`, the ripple starts at the center of the component\n   * rather than at the point of interaction.\n   */\n  center: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  flip: false,\n  name: 'MuiTouchRipple'\n})( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"memo\"](TouchRipple)));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ButtonBase */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _ButtonBase__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Checkbox/Checkbox.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Checkbox/Checkbox.js ***!
+  \*****************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _internal_SwitchBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../internal/SwitchBase */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/SwitchBase.js\");\n/* harmony import */ var _internal_svg_icons_CheckBoxOutlineBlank__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../internal/svg-icons/CheckBoxOutlineBlank */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js\");\n/* harmony import */ var _internal_svg_icons_CheckBox__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../internal/svg-icons/CheckBox */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js\");\n/* harmony import */ var _styles_colorManipulator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/colorManipulator */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js\");\n/* harmony import */ var _internal_svg_icons_IndeterminateCheckBox__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../internal/svg-icons/IndeterminateCheckBox */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      color: theme.palette.text.secondary\n    },\n\n    /* Pseudo-class applied to the root element if `checked={true}`. */\n    checked: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `indeterminate={true}`. */\n    indeterminate: {},\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      '&$checked': {\n        color: theme.palette.primary.main,\n        '&:hover': {\n          backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_9__[\"fade\"])(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      '&$checked': {\n        color: theme.palette.secondary.main,\n        '&:hover': {\n          backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_9__[\"fade\"])(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }\n  };\n};\nvar defaultCheckedIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_svg_icons_CheckBox__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null);\nvar defaultIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_svg_icons_CheckBoxOutlineBlank__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null);\nvar defaultIndeterminateIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_svg_icons_IndeterminateCheckBox__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null);\nvar Checkbox = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Checkbox(props, ref) {\n  var _props$checkedIcon = props.checkedIcon,\n      checkedIcon = _props$checkedIcon === void 0 ? defaultCheckedIcon : _props$checkedIcon,\n      classes = props.classes,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'secondary' : _props$color,\n      _props$icon = props.icon,\n      iconProp = _props$icon === void 0 ? defaultIcon : _props$icon,\n      _props$indeterminate = props.indeterminate,\n      indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n      _props$indeterminateI = props.indeterminateIcon,\n      indeterminateIconProp = _props$indeterminateI === void 0 ? defaultIndeterminateIcon : _props$indeterminateI,\n      inputProps = props.inputProps,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"checkedIcon\", \"classes\", \"color\", \"icon\", \"indeterminate\", \"indeterminateIcon\", \"inputProps\", \"size\"]);\n\n  var icon = indeterminate ? indeterminateIconProp : iconProp;\n  var indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_internal_SwitchBase__WEBPACK_IMPORTED_MODULE_6__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    type: \"checkbox\",\n    classes: {\n      root: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(color))], indeterminate && classes.indeterminate),\n      checked: classes.checked,\n      disabled: classes.disabled\n    },\n    color: color,\n    inputProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      'data-indeterminate': indeterminate\n    }, inputProps),\n    icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](icon, {\n      fontSize: icon.props.fontSize === undefined && size === \"small\" ? size : icon.props.fontSize\n    }),\n    checkedIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](indeterminateIcon, {\n      fontSize: indeterminateIcon.props.fontSize === undefined && size === \"small\" ? size : indeterminateIcon.props.fontSize\n    }),\n    ref: ref\n  }, other));\n});\n true ? Checkbox.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['default', 'primary', 'secondary']),\n\n  /**\n   * If `true`, the checkbox will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the component appears indeterminate.\n   * This does not set the native input element to indeterminate due\n   * to inconsistent behavior across browsers.\n   * However, we set a `data-indeterminate` attribute on the input.\n   */\n  indeterminate: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon to display when the component is indeterminate.\n   */\n  indeterminateIcon: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The size of the checkbox.\n   * `small` is equivalent to the dense checkbox styling.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['medium', 'small']),\n\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   * The browser uses \"on\" as the default value.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(styles, {\n  name: 'MuiCheckbox'\n})(Checkbox));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Checkbox/Checkbox.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Checkbox/index.js":
+/*!**************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Checkbox/index.js ***!
+  \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Checkbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Checkbox */ \"./jaas-client/node_modules/@material-ui/core/esm/Checkbox/Checkbox.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Checkbox__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Checkbox/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js":
+/*!*********************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js ***!
+  \*********************************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\nvar SIZE = 44;\n\nfunction getRelativeValue(value, min, max) {\n  return (Math.min(Math.max(min, value), max) - min) / (max - min);\n}\n\nfunction easeOut(t) {\n  t = getRelativeValue(t, 0, 1); // https://gist.github.com/gre/1650294\n\n  t = (t -= 1) * t * t + 1;\n  return t;\n}\n\nfunction easeIn(t) {\n  return t * t;\n}\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-block'\n    },\n\n    /* Styles applied to the root element if `variant=\"static\"`. */\n    static: {\n      transition: theme.transitions.create('transform')\n    },\n\n    /* Styles applied to the root element if `variant=\"indeterminate\"`. */\n    indeterminate: {\n      animation: '$circular-rotate 1.4s linear infinite'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the `svg` element. */\n    svg: {\n      display: 'block' // Keeps the progress centered\n\n    },\n\n    /* Styles applied to the `circle` svg path. */\n    circle: {\n      stroke: 'currentColor' // Use butt to follow the specification, by chance, it's already the default CSS value.\n      // strokeLinecap: 'butt',\n\n    },\n\n    /* Styles applied to the `circle` svg path if `variant=\"static\"`. */\n    circleStatic: {\n      transition: theme.transitions.create('stroke-dashoffset')\n    },\n\n    /* Styles applied to the `circle` svg path if `variant=\"indeterminate\"`. */\n    circleIndeterminate: {\n      animation: '$circular-dash 1.4s ease-in-out infinite',\n      // Some default value that looks fine waiting for the animation to kicks in.\n      strokeDasharray: '80px, 200px',\n      strokeDashoffset: '0px' // Add the unit to fix a Edge 16 and below bug.\n\n    },\n    '@keyframes circular-rotate': {\n      '0%': {\n        // Fix IE 11 wobbly\n        transformOrigin: '50% 50%'\n      },\n      '100%': {\n        transform: 'rotate(360deg)'\n      }\n    },\n    '@keyframes circular-dash': {\n      '0%': {\n        strokeDasharray: '1px, 200px',\n        strokeDashoffset: '0px'\n      },\n      '50%': {\n        strokeDasharray: '100px, 200px',\n        strokeDashoffset: '-15px'\n      },\n      '100%': {\n        strokeDasharray: '100px, 200px',\n        strokeDashoffset: '-125px'\n      }\n    },\n\n    /* Styles applied to the `circle` svg path if `disableShrink={true}`. */\n    circleDisableShrink: {\n      animation: 'none'\n    }\n  };\n};\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\n\nvar CircularProgress = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function CircularProgress(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$disableShrink = props.disableShrink,\n      disableShrink = _props$disableShrink === void 0 ? false : _props$disableShrink,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 40 : _props$size,\n      style = props.style,\n      _props$thickness = props.thickness,\n      thickness = _props$thickness === void 0 ? 3.6 : _props$thickness,\n      _props$value = props.value,\n      value = _props$value === void 0 ? 0 : _props$value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'indeterminate' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"color\", \"disableShrink\", \"size\", \"style\", \"thickness\", \"value\", \"variant\"]);\n\n  var circleStyle = {};\n  var rootStyle = {};\n  var rootProps = {};\n\n  if (variant === 'determinate' || variant === 'static') {\n    var circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n    circleStyle.strokeDasharray = circumference.toFixed(3);\n    rootProps['aria-valuenow'] = Math.round(value);\n\n    if (variant === 'static') {\n      circleStyle.strokeDashoffset = \"\".concat(((100 - value) / 100 * circumference).toFixed(3), \"px\");\n      rootStyle.transform = 'rotate(-90deg)';\n    } else {\n      circleStyle.strokeDashoffset = \"\".concat((easeIn((100 - value) / 100) * circumference).toFixed(3), \"px\");\n      rootStyle.transform = \"rotate(\".concat((easeOut(value / 70) * 270).toFixed(3), \"deg)\");\n    }\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, color !== 'inherit' && classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(color))], {\n      'indeterminate': classes.indeterminate,\n      'static': classes.static\n    }[variant]),\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      width: size,\n      height: size\n    }, rootStyle, style),\n    ref: ref,\n    role: \"progressbar\"\n  }, rootProps, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"svg\", {\n    className: classes.svg,\n    viewBox: \"\".concat(SIZE / 2, \" \").concat(SIZE / 2, \" \").concat(SIZE, \" \").concat(SIZE)\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"circle\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.circle, disableShrink && classes.circleDisableShrink, {\n      'indeterminate': classes.circleIndeterminate,\n      'static': classes.circleStatic\n    }[variant]),\n    style: circleStyle,\n    cx: SIZE,\n    cy: SIZE,\n    r: (SIZE - thickness) / 2,\n    fill: \"none\",\n    strokeWidth: thickness\n  })));\n});\n true ? CircularProgress.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['inherit', 'primary', 'secondary']),\n\n  /**\n   * If `true`, the shrink animation is disabled.\n   * This only works if variant is `indeterminate`.\n   */\n  disableShrink: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool, function (props) {\n    if (props.disableShrink && props.variant && props.variant !== 'indeterminate') {\n      return new Error('Material-UI: You have provided the `disableShrink` prop ' + 'with a variant other than `indeterminate`. This will have no effect.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * The size of the circle.\n   * If using a number, the pixel unit is assumed.\n   * If using a string, you need to provide the CSS unit, e.g '3rem'.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The thickness of the circle.\n   */\n  thickness: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * The value of the progress indicator for the determinate and static variants.\n   * Value between 0 and 100.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * The variant to use.\n   * Use indeterminate when there is no progress value.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['determinate', 'indeterminate', 'static'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiCircularProgress',\n  flip: false\n})(CircularProgress));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/index.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/index.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _CircularProgress__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CircularProgress */ \"./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _CircularProgress__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Container/Container.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Container/Container.js ***!
+  \*******************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n      width: '100%',\n      marginLeft: 'auto',\n      boxSizing: 'border-box',\n      marginRight: 'auto',\n      paddingLeft: theme.spacing(2),\n      paddingRight: theme.spacing(2),\n      display: 'block'\n    }, theme.breakpoints.up('sm'), {\n      paddingLeft: theme.spacing(3),\n      paddingRight: theme.spacing(3)\n    }),\n\n    /* Styles applied to the root element if `disableGutters={true}`. */\n    disableGutters: {\n      paddingLeft: 0,\n      paddingRight: 0\n    },\n\n    /* Styles applied to the root element if `fixed={true}`. */\n    fixed: Object.keys(theme.breakpoints.values).reduce(function (acc, breakpoint) {\n      var value = theme.breakpoints.values[breakpoint];\n\n      if (value !== 0) {\n        acc[theme.breakpoints.up(breakpoint)] = {\n          maxWidth: value\n        };\n      }\n\n      return acc;\n    }, {}),\n\n    /* Styles applied to the root element if `maxWidth=\"xs\"`. */\n    maxWidthXs: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('xs'), {\n      maxWidth: Math.max(theme.breakpoints.values.xs, 444)\n    }),\n\n    /* Styles applied to the root element if `maxWidth=\"sm\"`. */\n    maxWidthSm: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('sm'), {\n      maxWidth: theme.breakpoints.values.sm\n    }),\n\n    /* Styles applied to the root element if `maxWidth=\"md\"`. */\n    maxWidthMd: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('md'), {\n      maxWidth: theme.breakpoints.values.md\n    }),\n\n    /* Styles applied to the root element if `maxWidth=\"lg\"`. */\n    maxWidthLg: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('lg'), {\n      maxWidth: theme.breakpoints.values.lg\n    }),\n\n    /* Styles applied to the root element if `maxWidth=\"xl\"`. */\n    maxWidthXl: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.up('xl'), {\n      maxWidth: theme.breakpoints.values.xl\n    })\n  };\n};\nvar Container = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function Container(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$fixed = props.fixed,\n      fixed = _props$fixed === void 0 ? false : _props$fixed,\n      _props$maxWidth = props.maxWidth,\n      maxWidth = _props$maxWidth === void 0 ? 'lg' : _props$maxWidth,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"component\", \"disableGutters\", \"fixed\", \"maxWidth\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className, fixed && classes.fixed, disableGutters && classes.disableGutters, maxWidth !== false && classes[\"maxWidth\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(String(maxWidth)))]),\n    ref: ref\n  }, other));\n});\n true ? Container.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * @ignore\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Set the max-width to match the min-width of the current breakpoint.\n   * This is useful if you'd prefer to design for a fixed set of sizes\n   * instead of trying to accommodate a fully fluid viewport.\n   * It's fluid by default.\n   */\n  fixed: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Determine the max-width of the container.\n   * The container width grows with the size of the screen.\n   * Set to `false` to disable `maxWidth`.\n   */\n  maxWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['lg', 'md', 'sm', 'xl', 'xs', false])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiContainer'\n})(Container));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Container/Container.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Container/index.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Container/index.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Container__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Container */ \"./jaas-client/node_modules/@material-ui/core/esm/Container/Container.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Container__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Container/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js ***!
+  \***********************************************************************************/
+/*! exports provided: html, body, styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"body\", function() { return body; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\n\n\n\nvar html = {\n  WebkitFontSmoothing: 'antialiased',\n  // Antialiasing.\n  MozOsxFontSmoothing: 'grayscale',\n  // Antialiasing.\n  // Change from `box-sizing: content-box` so that `width`\n  // is not affected by `padding` or `border`.\n  boxSizing: 'border-box'\n};\nvar body = function body(theme) {\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    color: theme.palette.text.primary\n  }, theme.typography.body2, {\n    backgroundColor: theme.palette.background.default,\n    '@media print': {\n      // Save printer ink.\n      backgroundColor: theme.palette.common.white\n    }\n  });\n};\nvar styles = function styles(theme) {\n  return {\n    '@global': {\n      html: html,\n      '*, *::before, *::after': {\n        boxSizing: 'inherit'\n      },\n      'strong, b': {\n        fontWeight: theme.typography.fontWeightBold\n      },\n      body: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        margin: 0\n      }, body(theme), {\n        // Add support for document.body.requestFullScreen().\n        // Other elements, if background transparent, are not supported.\n        '&::backdrop': {\n          backgroundColor: theme.palette.background.default\n        }\n      })\n    }\n  };\n};\n/**\n * Kickstart an elegant, consistent, and simple baseline to build upon.\n */\n\nfunction CssBaseline(props) {\n  /* eslint-disable no-unused-vars */\n  var _props$children = props.children,\n      children = _props$children === void 0 ? null : _props$children,\n      classes = props.classes;\n  /* eslint-enable no-unused-vars */\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, children);\n}\n\n true ? CssBaseline.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * You can wrap a node.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n} : undefined;\n\nif (true) {\n  // eslint-disable-next-line\n  CssBaseline['propTypes' + ''] = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_4__[\"exactProp\"])(CssBaseline.propTypes);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(styles, {\n  name: 'MuiCssBaseline'\n})(CssBaseline));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/index.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/index.js ***!
+  \*****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _CssBaseline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CssBaseline */ \"./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _CssBaseline__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Dialog/Dialog.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Dialog/Dialog.js ***!
+  \*************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Modal */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js\");\n/* harmony import */ var _Backdrop__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Backdrop */ \"./jaas-client/node_modules/@material-ui/core/esm/Backdrop/index.js\");\n/* harmony import */ var _Fade__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Fade */ \"./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js\");\n/* harmony import */ var _styles_transitions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../styles/transitions */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js\");\n/* harmony import */ var _Paper__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Paper */ \"./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      '@media print': {\n        // Use !important to override the Modal inline-style.\n        position: 'absolute !important'\n      }\n    },\n\n    /* Styles applied to the container element if `scroll=\"paper\"`. */\n    scrollPaper: {\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center'\n    },\n\n    /* Styles applied to the container element if `scroll=\"body\"`. */\n    scrollBody: {\n      overflowY: 'auto',\n      overflowX: 'hidden',\n      textAlign: 'center',\n      '&:after': {\n        content: '\"\"',\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        height: '100%',\n        width: '0'\n      }\n    },\n\n    /* Styles applied to the container element. */\n    container: {\n      height: '100%',\n      '@media print': {\n        height: 'auto'\n      },\n      // We disable the focus ring for mouse, touch and keyboard users.\n      outline: 0\n    },\n\n    /* Styles applied to the `Paper` component. */\n    paper: {\n      margin: 32,\n      position: 'relative',\n      overflowY: 'auto',\n      // Fix IE 11 issue, to remove at some point.\n      '@media print': {\n        overflowY: 'visible',\n        boxShadow: 'none'\n      }\n    },\n\n    /* Styles applied to the `Paper` component if `scroll=\"paper\"`. */\n    paperScrollPaper: {\n      display: 'flex',\n      flexDirection: 'column',\n      maxHeight: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `scroll=\"body\"`. */\n    paperScrollBody: {\n      display: 'inline-block',\n      verticalAlign: 'middle',\n      textAlign: 'left' // 'initial' doesn't work on IE 11\n\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=false`. */\n    paperWidthFalse: {\n      maxWidth: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"xs\"`. */\n    paperWidthXs: {\n      maxWidth: Math.max(theme.breakpoints.values.xs, 444),\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"sm\"`. */\n    paperWidthSm: {\n      maxWidth: theme.breakpoints.values.sm,\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(theme.breakpoints.values.sm + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"md\"`. */\n    paperWidthMd: {\n      maxWidth: theme.breakpoints.values.md,\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(theme.breakpoints.values.md + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"lg\"`. */\n    paperWidthLg: {\n      maxWidth: theme.breakpoints.values.lg,\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(theme.breakpoints.values.lg + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"xl\"`. */\n    paperWidthXl: {\n      maxWidth: theme.breakpoints.values.xl,\n      '&$paperScrollBody': Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.breakpoints.down(theme.breakpoints.values.xl + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `fullWidth={true}`. */\n    paperFullWidth: {\n      width: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `fullScreen={true}`. */\n    paperFullScreen: {\n      margin: 0,\n      width: '100%',\n      maxWidth: '100%',\n      height: '100%',\n      maxHeight: 'none',\n      borderRadius: 0,\n      '&$paperScrollBody': {\n        margin: 0,\n        maxWidth: '100%'\n      }\n    }\n  };\n};\nvar defaultTransitionDuration = {\n  enter: _styles_transitions__WEBPACK_IMPORTED_MODULE_11__[\"duration\"].enteringScreen,\n  exit: _styles_transitions__WEBPACK_IMPORTED_MODULE_11__[\"duration\"].leavingScreen\n};\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\n\nvar Dialog = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function Dialog(props, ref) {\n  var BackdropProps = props.BackdropProps,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$disableBackdro = props.disableBackdropClick,\n      disableBackdropClick = _props$disableBackdro === void 0 ? false : _props$disableBackdro,\n      _props$disableEscapeK = props.disableEscapeKeyDown,\n      disableEscapeKeyDown = _props$disableEscapeK === void 0 ? false : _props$disableEscapeK,\n      _props$fullScreen = props.fullScreen,\n      fullScreen = _props$fullScreen === void 0 ? false : _props$fullScreen,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$maxWidth = props.maxWidth,\n      maxWidth = _props$maxWidth === void 0 ? 'sm' : _props$maxWidth,\n      onBackdropClick = props.onBackdropClick,\n      onClose = props.onClose,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onEscapeKeyDown = props.onEscapeKeyDown,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      open = props.open,\n      _props$PaperComponent = props.PaperComponent,\n      PaperComponent = _props$PaperComponent === void 0 ? _Paper__WEBPACK_IMPORTED_MODULE_12__[\"default\"] : _props$PaperComponent,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      _props$scroll = props.scroll,\n      scroll = _props$scroll === void 0 ? 'paper' : _props$scroll,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? _Fade__WEBPACK_IMPORTED_MODULE_10__[\"default\"] : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? defaultTransitionDuration : _props$transitionDura,\n      TransitionProps = props.TransitionProps,\n      ariaDescribedby = props['aria-describedby'],\n      ariaLabelledby = props['aria-labelledby'],\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"BackdropProps\", \"children\", \"classes\", \"className\", \"disableBackdropClick\", \"disableEscapeKeyDown\", \"fullScreen\", \"fullWidth\", \"maxWidth\", \"onBackdropClick\", \"onClose\", \"onEnter\", \"onEntered\", \"onEntering\", \"onEscapeKeyDown\", \"onExit\", \"onExited\", \"onExiting\", \"open\", \"PaperComponent\", \"PaperProps\", \"scroll\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\", \"aria-describedby\", \"aria-labelledby\"]);\n\n  var mouseDownTarget = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"]();\n\n  var handleMouseDown = function handleMouseDown(event) {\n    mouseDownTarget.current = event.target;\n  };\n\n  var handleBackdropClick = function handleBackdropClick(event) {\n    // Ignore the events not coming from the \"backdrop\"\n    // We don't want to close the dialog when clicking the dialog content.\n    if (event.target !== event.currentTarget) {\n      return;\n    } // Make sure the event starts and ends on the same DOM element.\n\n\n    if (event.target !== mouseDownTarget.current) {\n      return;\n    }\n\n    mouseDownTarget.current = null;\n\n    if (onBackdropClick) {\n      onBackdropClick(event);\n    }\n\n    if (!disableBackdropClick && onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_Modal__WEBPACK_IMPORTED_MODULE_8__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className),\n    BackdropComponent: _Backdrop__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n    BackdropProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      transitionDuration: transitionDuration\n    }, BackdropProps),\n    closeAfterTransition: true,\n    disableBackdropClick: disableBackdropClick,\n    disableEscapeKeyDown: disableEscapeKeyDown,\n    onEscapeKeyDown: onEscapeKeyDown,\n    onClose: onClose,\n    open: open,\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    appear: true,\n    in: open,\n    timeout: transitionDuration,\n    onEnter: onEnter,\n    onEntering: onEntering,\n    onEntered: onEntered,\n    onExit: onExit,\n    onExiting: onExiting,\n    onExited: onExited,\n    role: \"none presentation\"\n  }, TransitionProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"div\", {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.container, classes[\"scroll\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(scroll))]),\n    onMouseUp: handleBackdropClick,\n    onMouseDown: handleMouseDown\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](PaperComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    elevation: 24,\n    role: \"dialog\",\n    \"aria-describedby\": ariaDescribedby,\n    \"aria-labelledby\": ariaLabelledby\n  }, PaperProps, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.paper, classes[\"paperScroll\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(scroll))], classes[\"paperWidth\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(String(maxWidth)))], PaperProps.className, fullScreen && classes.paperFullScreen, fullWidth && classes.paperFullWidth)\n  }), children))));\n});\n true ? Dialog.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The id(s) of the element(s) that describe the dialog.\n   */\n  'aria-describedby': prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The id(s) of the element(s) that label the dialog.\n   */\n  'aria-labelledby': prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * @ignore\n   */\n  BackdropProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Dialog children, usually the included sub-components.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * If `true`, clicking the backdrop will not fire the `onClose` callback.\n   */\n  disableBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, hitting escape will not fire the `onClose` callback.\n   */\n  disableEscapeKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the dialog will be full-screen\n   */\n  fullScreen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the dialog stretches to `maxWidth`.\n   *\n   * Notice that the dialog width grow is limited by the default margin.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Determine the max-width of the dialog.\n   * The dialog width grows with the size of the screen.\n   * Set to `false` to disable `maxWidth`.\n   */\n  maxWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['lg', 'md', 'sm', 'xl', 'xs', false]),\n\n  /**\n   * Callback fired when the backdrop is clicked.\n   */\n  onBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired before the dialog enters.\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the dialog has entered.\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the dialog is entering.\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the escape key is pressed,\n   * `disableKeyboard` is false and the modal is in focus.\n   */\n  onEscapeKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired before the dialog exits.\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the dialog has exited.\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the dialog is exiting.\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * If `true`, the Dialog is open.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired,\n\n  /**\n   * The component used to render the body of the dialog.\n   */\n  PaperComponent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType,\n\n  /**\n   * Props applied to the [`Paper`](/api/paper/) element.\n   */\n  PaperProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Determine the container for scrolling the dialog.\n   */\n  scroll: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['body', 'paper']),\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  })]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiDialog'\n})(Dialog));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Dialog/Dialog.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Dialog/index.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Dialog/index.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Dialog */ \"./jaas-client/node_modules/@material-ui/core/esm/Dialog/Dialog.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Dialog__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Dialog/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js ***!
+  \***********************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Typography__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js\");\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    margin: 0,\n    padding: '16px 24px',\n    flex: '0 0 auto'\n  }\n};\nvar DialogTitle = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function DialogTitle(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$disableTypogra = props.disableTypography,\n      disableTypography = _props$disableTypogra === void 0 ? false : _props$disableTypogra,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"disableTypography\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className),\n    ref: ref\n  }, other), disableTypography ? children : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Typography__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n    component: \"h2\",\n    variant: \"h6\"\n  }, children));\n});\n true ? DialogTitle.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the children won't be wrapped by a typography component.\n   * For instance, this can be useful to render an h4 instead of the default h2.\n   */\n  disableTypography: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiDialogTitle'\n})(DialogTitle));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/index.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/index.js ***!
+  \*****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _DialogTitle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DialogTitle */ \"./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _DialogTitle__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Fade/Fade.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Fade/Fade.js ***!
+  \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_transition_group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-transition-group */ \"./jaas-client/node_modules/react-transition-group/esm/index.js\");\n/* harmony import */ var _styles_transitions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/transitions */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/useTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js\");\n/* harmony import */ var _transitions_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../transitions/utils */ \"./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  entering: {\n    opacity: 1\n  },\n  entered: {\n    opacity: 1\n  }\n};\nvar defaultTimeout = {\n  enter: _styles_transitions__WEBPACK_IMPORTED_MODULE_6__[\"duration\"].enteringScreen,\n  exit: _styles_transitions__WEBPACK_IMPORTED_MODULE_6__[\"duration\"].leavingScreen\n};\n/**\n * The Fade transition is used by the [Modal](/components/modal/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Fade = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function Fade(props, ref) {\n  var children = props.children,\n      _props$disableStrictM = props.disableStrictModeCompat,\n      disableStrictModeCompat = _props$disableStrictM === void 0 ? false : _props$disableStrictM,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      style = props.style,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? react_transition_group__WEBPACK_IMPORTED_MODULE_5__[\"Transition\"] : _props$TransitionComp,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"children\", \"disableStrictModeCompat\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"TransitionComponent\", \"timeout\"]);\n\n  var theme = Object(_styles_useTheme__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n  var enableStrictModeCompat = theme.unstable_strictMode && !disableStrictModeCompat;\n  var nodeRef = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  var foreignRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(children.ref, ref);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(enableStrictModeCompat ? nodeRef : undefined, foreignRef);\n\n  var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {\n    return function (nodeOrAppearing, maybeAppearing) {\n      if (callback) {\n        var _ref = enableStrictModeCompat ? [nodeRef.current, nodeOrAppearing] : [nodeOrAppearing, maybeAppearing],\n            _ref2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref, 2),\n            node = _ref2[0],\n            isAppearing = _ref2[1]; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n\n\n        if (isAppearing === undefined) {\n          callback(node);\n        } else {\n          callback(node, isAppearing);\n        }\n      }\n    };\n  };\n\n  var handleEntering = normalizedTransitionCallback(onEntering);\n  var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {\n    Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_8__[\"reflow\"])(node); // So the animation always start from the start.\n\n    var transitionProps = Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_8__[\"getTransitionProps\"])({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'enter'\n    });\n    node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  var handleEntered = normalizedTransitionCallback(onEntered);\n  var handleExiting = normalizedTransitionCallback(onExiting);\n  var handleExit = normalizedTransitionCallback(function (node) {\n    var transitionProps = Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_8__[\"getTransitionProps\"])({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'exit'\n    });\n    node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  var handleExited = normalizedTransitionCallback(onExited);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    appear: true,\n    in: inProp,\n    nodeRef: enableStrictModeCompat ? nodeRef : undefined,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    timeout: timeout\n  }, other), function (state, childProps) {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"cloneElement\"](children, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        opacity: 0,\n        visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n      }, styles[state], style, children.props.style),\n      ref: handleRef\n    }, childProps));\n  });\n});\n true ? Fade.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A single child content element.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.element,\n\n  /**\n   * Enable this prop if you encounter 'Function components cannot be given refs',\n   * use `unstable_createStrictModeTheme`,\n   * and can't forward the ref in the child component.\n   */\n  disableStrictModeCompat: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  timeout: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  })])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Fade);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Fade/Fade.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js ***!
+  \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Fade__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Fade */ \"./jaas-client/node_modules/@material-ui/core/esm/Fade/Fade.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Fade__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Fade/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FilledInput/FilledInput.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FilledInput/FilledInput.js ***!
+  \***********************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _InputBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../InputBase */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  var backgroundColor = light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      backgroundColor: backgroundColor,\n      borderTopLeftRadius: theme.shape.borderRadius,\n      borderTopRightRadius: theme.shape.borderRadius,\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      }),\n      '&:hover': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.13)' : 'rgba(255, 255, 255, 0.13)',\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: backgroundColor\n        }\n      },\n      '&$focused': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)'\n      },\n      '&$disabled': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)'\n      }\n    },\n\n    /* Styles applied to the root element if color secondary. */\n    colorSecondary: {\n      '&$underline:after': {\n        borderBottomColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if `disableUnderline={false}`. */\n    underline: {\n      '&:after': {\n        borderBottom: \"2px solid \".concat(theme.palette.primary.main),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\"',\n        position: 'absolute',\n        right: 0,\n        transform: 'scaleX(0)',\n        transition: theme.transitions.create('transform', {\n          duration: theme.transitions.duration.shorter,\n          easing: theme.transitions.easing.easeOut\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&$focused:after': {\n        transform: 'scaleX(1)'\n      },\n      '&$error:after': {\n        borderBottomColor: theme.palette.error.main,\n        transform: 'scaleX(1)' // error is always underlined in red\n\n      },\n      '&:before': {\n        borderBottom: \"1px solid \".concat(bottomLineColor),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\\\\00a0\"',\n        position: 'absolute',\n        right: 0,\n        transition: theme.transitions.create('border-bottom-color', {\n          duration: theme.transitions.duration.shorter\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&:hover:before': {\n        borderBottom: \"1px solid \".concat(theme.palette.text.primary)\n      },\n      '&$disabled:before': {\n        borderBottomStyle: 'dotted'\n      }\n    },\n\n    /* Pseudo-class applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {\n      paddingLeft: 12\n    },\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {\n      paddingRight: 12\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: '27px 12px 10px',\n      '&$marginDense': {\n        paddingTop: 23,\n        paddingBottom: 6\n      }\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      padding: '27px 12px 10px',\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: theme.palette.type === 'light' ? null : '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: theme.palette.type === 'light' ? null : '#fff',\n        caretColor: theme.palette.type === 'light' ? null : '#fff',\n        borderTopLeftRadius: 'inherit',\n        borderTopRightRadius: 'inherit'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 23,\n      paddingBottom: 6\n    },\n\n    /* Styles applied to the `input` if in `<FormControl hiddenLabel />`. */\n    inputHiddenLabel: {\n      paddingTop: 18,\n      paddingBottom: 19,\n      '&$inputMarginDense': {\n        paddingTop: 10,\n        paddingBottom: 11\n      }\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {\n      paddingLeft: 0\n    },\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {\n      paddingRight: 0\n    }\n  };\n};\nvar FilledInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FilledInput(props, ref) {\n  var disableUnderline = props.disableUnderline,\n      classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"disableUnderline\", \"classes\", \"fullWidth\", \"inputComponent\", \"multiline\", \"type\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_InputBase__WEBPACK_IMPORTED_MODULE_6__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, classes, {\n      root: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, !disableUnderline && classes.underline),\n      underline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\n true ? FilledInput.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will not have an underline.\n   */\n  disableUnderline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\nFilledInput.muiName = 'Input';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiFilledInput'\n})(FilledInput));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FilledInput/FilledInput.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js ***!
+  \*****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FilledInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FilledInput */ \"./jaas-client/node_modules/@material-ui/core/esm/FilledInput/FilledInput.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FilledInput__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControl.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControl.js ***!
+  \***********************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _InputBase_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../InputBase/utils */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/isMuiElement */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js\");\n/* harmony import */ var _FormControlContext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FormControlContext */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'inline-flex',\n    flexDirection: 'column',\n    position: 'relative',\n    // Reset fieldset default style.\n    minWidth: 0,\n    padding: 0,\n    margin: 0,\n    border: 0,\n    verticalAlign: 'top' // Fix alignment issue on Safari.\n\n  },\n\n  /* Styles applied to the root element if `margin=\"normal\"`. */\n  marginNormal: {\n    marginTop: 16,\n    marginBottom: 8\n  },\n\n  /* Styles applied to the root element if `margin=\"dense\"`. */\n  marginDense: {\n    marginTop: 8,\n    marginBottom: 4\n  },\n\n  /* Styles applied to the root element if `fullWidth={true}`. */\n  fullWidth: {\n    width: '100%'\n  }\n};\n/**\n * Provides context such as filled/focused/error/required for form inputs.\n * Relying on the context provides high flexibility and ensures that the state always stays\n * consistent across the children of the `FormControl`.\n * This context is used by the following components:\n *\n *  - FormLabel\n *  - FormHelperText\n *  - Input\n *  - InputLabel\n *\n * You can find one composition example below and more going to [the demos](/components/text-fields/#components).\n *\n * ```jsx\n * <FormControl>\n *   <InputLabel htmlFor=\"my-input\">Email address</InputLabel>\n *   <Input id=\"my-input\" aria-describedby=\"my-helper-text\" />\n *   <FormHelperText id=\"my-helper-text\">We'll never share your email.</FormHelperText>\n * </FormControl>\n * ```\n *\n * ⚠️Only one input can be used within a FormControl.\n */\n\nvar FormControl = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FormControl(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$error = props.error,\n      error = _props$error === void 0 ? false : _props$error,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      visuallyFocused = props.focused,\n      _props$hiddenLabel = props.hiddenLabel,\n      hiddenLabel = _props$hiddenLabel === void 0 ? false : _props$hiddenLabel,\n      _props$margin = props.margin,\n      margin = _props$margin === void 0 ? 'none' : _props$margin,\n      _props$required = props.required,\n      required = _props$required === void 0 ? false : _props$required,\n      size = props.size,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"error\", \"fullWidth\", \"focused\", \"hiddenLabel\", \"margin\", \"required\", \"size\", \"variant\"]);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](function () {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    var initialAdornedStart = false;\n\n    if (children) {\n      react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].forEach(children, function (child) {\n        if (!Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(child, ['Input', 'Select'])) {\n          return;\n        }\n\n        var input = Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(child, ['Select']) ? child.props.input : child;\n\n        if (input && Object(_InputBase_utils__WEBPACK_IMPORTED_MODULE_5__[\"isAdornedStart\"])(input.props)) {\n          initialAdornedStart = true;\n        }\n      });\n    }\n\n    return initialAdornedStart;\n  }),\n      adornedStart = _React$useState[0],\n      setAdornedStart = _React$useState[1];\n\n  var _React$useState2 = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](function () {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    var initialFilled = false;\n\n    if (children) {\n      react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].forEach(children, function (child) {\n        if (!Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(child, ['Input', 'Select'])) {\n          return;\n        }\n\n        if (Object(_InputBase_utils__WEBPACK_IMPORTED_MODULE_5__[\"isFilled\"])(child.props, true)) {\n          initialFilled = true;\n        }\n      });\n    }\n\n    return initialFilled;\n  }),\n      filled = _React$useState2[0],\n      setFilled = _React$useState2[1];\n\n  var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      _focused = _React$useState3[0],\n      setFocused = _React$useState3[1];\n\n  var focused = visuallyFocused !== undefined ? visuallyFocused : _focused;\n\n  if (disabled && focused) {\n    setFocused(false);\n  }\n\n  var registerEffect;\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    var registeredInput = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](false);\n\n    registerEffect = function registerEffect() {\n      if (registeredInput.current) {\n        console.error(['Material-UI: There are multiple InputBase components inside a FormControl.', 'This is not supported. It might cause infinite rendering loops.', 'Only use one InputBase.'].join('\\n'));\n      }\n\n      registeredInput.current = true;\n      return function () {\n        registeredInput.current = false;\n      };\n    };\n  }\n\n  var onFilled = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    setFilled(true);\n  }, []);\n  var onEmpty = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    setFilled(false);\n  }, []);\n  var childContext = {\n    adornedStart: adornedStart,\n    setAdornedStart: setAdornedStart,\n    color: color,\n    disabled: disabled,\n    error: error,\n    filled: filled,\n    focused: focused,\n    fullWidth: fullWidth,\n    hiddenLabel: hiddenLabel,\n    margin: (size === 'small' ? 'dense' : undefined) || margin,\n    onBlur: function onBlur() {\n      setFocused(false);\n    },\n    onEmpty: onEmpty,\n    onFilled: onFilled,\n    onFocus: function onFocus() {\n      setFocused(true);\n    },\n    registerEffect: registerEffect,\n    required: required,\n    variant: variant\n  };\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FormControlContext__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Provider, {\n    value: childContext\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, margin !== 'none' && classes[\"margin\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(margin))], fullWidth && classes.fullWidth),\n    ref: ref\n  }, other), children));\n});\n true ? FormControl.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The contents of the form control.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the label, input and helper text should be displayed in a disabled state.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label should be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the component will be displayed in focused state.\n   */\n  focused: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the component will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label will be hidden.\n   * This is used to increase density for a `FilledInput`.\n   * Be sure to add `aria-label` to the `input` element.\n   */\n  hiddenLabel: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none', 'normal']),\n\n  /**\n   * If `true`, the label will indicate that the input is required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The size of the text field.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['medium', 'small']),\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiFormControl'\n})(FormControl));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControl.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js":
+/*!******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js ***!
+  \******************************************************************************************/
+/*! exports provided: useFormControl, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useFormControl\", function() { return useFormControl; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * @ignore - internal component.\n */\n\nvar FormControlContext = react__WEBPACK_IMPORTED_MODULE_0__[\"createContext\"]();\n\nif (true) {\n  FormControlContext.displayName = 'FormControlContext';\n}\n\nfunction useFormControl() {\n  return react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"](FormControlContext);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (FormControlContext);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js":
+/*!****************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js ***!
+  \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return formControlState; });\nfunction formControlState(_ref) {\n  var props = _ref.props,\n      states = _ref.states,\n      muiFormControl = _ref.muiFormControl;\n  return states.reduce(function (acc, state) {\n    acc[state] = props[state];\n\n    if (muiFormControl) {\n      if (typeof props[state] === 'undefined') {\n        acc[state] = muiFormControl[state];\n      }\n    }\n\n    return acc;\n  }, {});\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js ***!
+  \*****************************************************************************/
+/*! exports provided: default, useFormControl */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FormControl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FormControl__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _useFormControl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useFormControl\", function() { return _useFormControl__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js":
+/*!**************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js ***!
+  \**************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useFormControl; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _FormControlContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormControlContext */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js\");\n\n\nfunction useFormControl() {\n  return react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"](_FormControlContext__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js":
+/*!*********************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js ***!
+  \*********************************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _FormControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Typography__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-flex',\n      alignItems: 'center',\n      cursor: 'pointer',\n      // For correct alignment with the text.\n      verticalAlign: 'middle',\n      WebkitTapHighlightColor: 'transparent',\n      marginLeft: -11,\n      marginRight: 16,\n      // used for row presentation of radio/checkbox\n      '&$disabled': {\n        cursor: 'default'\n      }\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"start\"`. */\n    labelPlacementStart: {\n      flexDirection: 'row-reverse',\n      marginLeft: 16,\n      // used for row presentation of radio/checkbox\n      marginRight: -11\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"top\"`. */\n    labelPlacementTop: {\n      flexDirection: 'column-reverse',\n      marginLeft: 16\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"bottom\"`. */\n    labelPlacementBottom: {\n      flexDirection: 'column',\n      marginLeft: 16\n    },\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the label's Typography component. */\n    label: {\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      }\n    }\n  };\n};\n/**\n * Drop in replacement of the `Radio`, `Switch` and `Checkbox` component.\n * Use this component if you want to display an extra label.\n */\n\nvar FormControlLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FormControlLabel(props, ref) {\n  var checked = props.checked,\n      classes = props.classes,\n      className = props.className,\n      control = props.control,\n      disabledProp = props.disabled,\n      inputRef = props.inputRef,\n      label = props.label,\n      _props$labelPlacement = props.labelPlacement,\n      labelPlacement = _props$labelPlacement === void 0 ? 'end' : _props$labelPlacement,\n      name = props.name,\n      onChange = props.onChange,\n      value = props.value,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"checked\", \"classes\", \"className\", \"control\", \"disabled\", \"inputRef\", \"label\", \"labelPlacement\", \"name\", \"onChange\", \"value\"]);\n\n  var muiFormControl = Object(_FormControl__WEBPACK_IMPORTED_MODULE_6__[\"useFormControl\"])();\n  var disabled = disabledProp;\n\n  if (typeof disabled === 'undefined' && typeof control.props.disabled !== 'undefined') {\n    disabled = control.props.disabled;\n  }\n\n  if (typeof disabled === 'undefined' && muiFormControl) {\n    disabled = muiFormControl.disabled;\n  }\n\n  var controlProps = {\n    disabled: disabled\n  };\n  ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(function (key) {\n    if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {\n      controlProps[key] = props[key];\n    }\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"label\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, labelPlacement !== 'end' && classes[\"labelPlacement\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(labelPlacement))], disabled && classes.disabled),\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](control, controlProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Typography__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n    component: \"span\",\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.label, disabled && classes.disabled)\n  }, label));\n});\n true ? FormControlLabel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the component appears selected.\n   */\n  checked: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * A control element. For instance, it can be be a `Radio`, a `Switch` or a `Checkbox`.\n   */\n  control: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element.isRequired,\n\n  /**\n   * If `true`, the control will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * The text to be used in an enclosing label element.\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * The position of the label.\n   */\n  labelPlacement: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['bottom', 'end', 'start', 'top']),\n\n  /**\n   * @ignore\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The value of the component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiFormControlLabel'\n})(FormControlLabel));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/index.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/index.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FormControlLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormControlLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FormControlLabel__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js":
+/*!*****************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js ***!
+  \*****************************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      color: theme.palette.text.secondary\n    }, theme.typography.caption, {\n      textAlign: 'left',\n      marginTop: 3,\n      margin: 0,\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      },\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }),\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `margin=\"dense\"`. */\n    marginDense: {\n      marginTop: 4\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"` or `variant=\"outlined\"`. */\n    contained: {\n      marginLeft: 14,\n      marginRight: 14\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `filled={true}`. */\n    filled: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {}\n  };\n};\nvar FormHelperText = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FormHelperText(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'p' : _props$component,\n      disabled = props.disabled,\n      error = props.error,\n      filled = props.filled,\n      focused = props.focused,\n      margin = props.margin,\n      required = props.required,\n      variant = props.variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"margin\", \"required\", \"variant\"]);\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant', 'margin', 'disabled', 'error', 'filled', 'focused', 'required']\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, (fcs.variant === 'filled' || fcs.variant === 'outlined') && classes.contained, className, fcs.disabled && classes.disabled, fcs.error && classes.error, fcs.filled && classes.filled, fcs.focused && classes.focused, fcs.required && classes.required, fcs.margin === 'dense' && classes.marginDense),\n    ref: ref\n  }, other), children === ' ' ?\n  /*#__PURE__*/\n  // eslint-disable-next-line react/no-danger\n  react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  }) : children);\n});\n true ? FormHelperText.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   *\n   * If `' '` is provided, the component reserves one line height for displaying a future message.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the helper text should be displayed in a disabled state.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, helper text should be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the helper text should use filled classes key.\n   */\n  filled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the helper text should use focused classes key.\n   */\n  focused: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense']),\n\n  /**\n   * If `true`, the helper text should use required classes key.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiFormHelperText'\n})(FormHelperText));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/index.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/index.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FormHelperText__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormHelperText */ \"./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FormHelperText__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormLabel/FormLabel.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormLabel/FormLabel.js ***!
+  \*******************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      color: theme.palette.text.secondary\n    }, theme.typography.body1, {\n      lineHeight: 1,\n      padding: 0,\n      '&$focused': {\n        color: theme.palette.primary.main\n      },\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      },\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }),\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {\n      '&$focused': {\n        color: theme.palette.secondary.main\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `filled={true}`. */\n    filled: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {},\n\n    /* Styles applied to the asterisk element. */\n    asterisk: {\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }\n  };\n};\nvar FormLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function FormLabel(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      color = props.color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'label' : _props$component,\n      disabled = props.disabled,\n      error = props.error,\n      filled = props.filled,\n      focused = props.focused,\n      required = props.required,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"required\"]);\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(fcs.color || 'primary'))], className, fcs.disabled && classes.disabled, fcs.error && classes.error, fcs.filled && classes.filled, fcs.focused && classes.focused, fcs.required && classes.required),\n    ref: ref\n  }, other), children, fcs.required && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    \"aria-hidden\": true,\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.asterisk, fcs.error && classes.error)\n  }, \"\\u2009\", '*'));\n});\n true ? FormLabel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the label should be displayed in a disabled state.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label should be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label should use filled classes key.\n   */\n  filled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input of this label is focused (used by `FormGroup` components).\n   */\n  focused: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label will indicate that the input is required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(styles, {\n  name: 'MuiFormLabel'\n})(FormLabel));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormLabel/FormLabel.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/FormLabel/index.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/FormLabel/index.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _FormLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/FormLabel/FormLabel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _FormLabel__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/FormLabel/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Grid/Grid.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Grid/Grid.js ***!
+  \*********************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_requirePropFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/requirePropFactory */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/requirePropFactory.js\");\n\n\n// A grid component using the following libs as inspiration.\n//\n// For the implementation:\n// - https://getbootstrap.com/docs/4.3/layout/grid/\n// - https://github.com/kristoferjoseph/flexboxgrid/blob/master/src/css/flexboxgrid.css\n// - https://github.com/roylee0704/react-flexbox-grid\n// - https://material.angularjs.org/latest/layout/introduction\n//\n// Follow this flexbox Guide to better understand the underlying model:\n// - https://css-tricks.com/snippets/css/a-guide-to-flexbox/\n\n\n\n\n\nvar SPACINGS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nvar GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\nfunction generateGrid(globalStyles, theme, breakpoint) {\n  var styles = {};\n  GRID_SIZES.forEach(function (size) {\n    var key = \"grid-\".concat(breakpoint, \"-\").concat(size);\n\n    if (size === true) {\n      // For the auto layouting\n      styles[key] = {\n        flexBasis: 0,\n        flexGrow: 1,\n        maxWidth: '100%'\n      };\n      return;\n    }\n\n    if (size === 'auto') {\n      styles[key] = {\n        flexBasis: 'auto',\n        flexGrow: 0,\n        maxWidth: 'none'\n      };\n      return;\n    } // Keep 7 significant numbers.\n\n\n    var width = \"\".concat(Math.round(size / 12 * 10e7) / 10e5, \"%\"); // Close to the bootstrap implementation:\n    // https://github.com/twbs/bootstrap/blob/8fccaa2439e97ec72a4b7dc42ccc1f649790adb0/scss/mixins/_grid.scss#L41\n\n    styles[key] = {\n      flexBasis: width,\n      flexGrow: 0,\n      maxWidth: width\n    };\n  }); // No need for a media query for the first size.\n\n  if (breakpoint === 'xs') {\n    Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(globalStyles, styles);\n  } else {\n    globalStyles[theme.breakpoints.up(breakpoint)] = styles;\n  }\n}\n\nfunction getOffset(val) {\n  var div = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var parse = parseFloat(val);\n  return \"\".concat(parse / div).concat(String(val).replace(String(parse), '') || 'px');\n}\n\nfunction generateGutter(theme, breakpoint) {\n  var styles = {};\n  SPACINGS.forEach(function (spacing) {\n    var themeSpacing = theme.spacing(spacing);\n\n    if (themeSpacing === 0) {\n      return;\n    }\n\n    styles[\"spacing-\".concat(breakpoint, \"-\").concat(spacing)] = {\n      margin: \"-\".concat(getOffset(themeSpacing, 2)),\n      width: \"calc(100% + \".concat(getOffset(themeSpacing), \")\"),\n      '& > $item': {\n        padding: getOffset(themeSpacing, 2)\n      }\n    };\n  });\n  return styles;\n} // Default CSS values\n// flex: '0 1 auto',\n// flexDirection: 'row',\n// alignItems: 'flex-start',\n// flexWrap: 'nowrap',\n// justifyContent: 'flex-start',\n\n\nvar styles = function styles(theme) {\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    /* Styles applied to the root element. */\n    root: {},\n\n    /* Styles applied to the root element if `container={true}`. */\n    container: {\n      boxSizing: 'border-box',\n      display: 'flex',\n      flexWrap: 'wrap',\n      width: '100%'\n    },\n\n    /* Styles applied to the root element if `item={true}`. */\n    item: {\n      boxSizing: 'border-box',\n      margin: '0' // For instance, it's useful when used with a `figure` element.\n\n    },\n\n    /* Styles applied to the root element if `zeroMinWidth={true}`. */\n    zeroMinWidth: {\n      minWidth: 0\n    },\n\n    /* Styles applied to the root element if `direction=\"column\"`. */\n    'direction-xs-column': {\n      flexDirection: 'column'\n    },\n\n    /* Styles applied to the root element if `direction=\"column-reverse\"`. */\n    'direction-xs-column-reverse': {\n      flexDirection: 'column-reverse'\n    },\n\n    /* Styles applied to the root element if `direction=\"row-reverse\"`. */\n    'direction-xs-row-reverse': {\n      flexDirection: 'row-reverse'\n    },\n\n    /* Styles applied to the root element if `wrap=\"nowrap\"`. */\n    'wrap-xs-nowrap': {\n      flexWrap: 'nowrap'\n    },\n\n    /* Styles applied to the root element if `wrap=\"reverse\"`. */\n    'wrap-xs-wrap-reverse': {\n      flexWrap: 'wrap-reverse'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"center\"`. */\n    'align-items-xs-center': {\n      alignItems: 'center'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"flex-start\"`. */\n    'align-items-xs-flex-start': {\n      alignItems: 'flex-start'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"flex-end\"`. */\n    'align-items-xs-flex-end': {\n      alignItems: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"baseline\"`. */\n    'align-items-xs-baseline': {\n      alignItems: 'baseline'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"center\"`. */\n    'align-content-xs-center': {\n      alignContent: 'center'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"flex-start\"`. */\n    'align-content-xs-flex-start': {\n      alignContent: 'flex-start'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"flex-end\"`. */\n    'align-content-xs-flex-end': {\n      alignContent: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"space-between\"`. */\n    'align-content-xs-space-between': {\n      alignContent: 'space-between'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"space-around\"`. */\n    'align-content-xs-space-around': {\n      alignContent: 'space-around'\n    },\n\n    /* Styles applied to the root element if `justify=\"center\"`. */\n    'justify-xs-center': {\n      justifyContent: 'center'\n    },\n\n    /* Styles applied to the root element if `justify=\"flex-end\"`. */\n    'justify-xs-flex-end': {\n      justifyContent: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-between\"`. */\n    'justify-xs-space-between': {\n      justifyContent: 'space-between'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-around\"`. */\n    'justify-xs-space-around': {\n      justifyContent: 'space-around'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-evenly\"`. */\n    'justify-xs-space-evenly': {\n      justifyContent: 'space-evenly'\n    }\n  }, generateGutter(theme, 'xs'), theme.breakpoints.keys.reduce(function (accumulator, key) {\n    // Use side effect over immutability for better performance.\n    generateGrid(accumulator, theme, key);\n    return accumulator;\n  }, {}));\n};\nvar Grid = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Grid(props, ref) {\n  var _props$alignContent = props.alignContent,\n      alignContent = _props$alignContent === void 0 ? 'stretch' : _props$alignContent,\n      _props$alignItems = props.alignItems,\n      alignItems = _props$alignItems === void 0 ? 'stretch' : _props$alignItems,\n      classes = props.classes,\n      classNameProp = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$container = props.container,\n      container = _props$container === void 0 ? false : _props$container,\n      _props$direction = props.direction,\n      direction = _props$direction === void 0 ? 'row' : _props$direction,\n      _props$item = props.item,\n      item = _props$item === void 0 ? false : _props$item,\n      _props$justify = props.justify,\n      justify = _props$justify === void 0 ? 'flex-start' : _props$justify,\n      _props$lg = props.lg,\n      lg = _props$lg === void 0 ? false : _props$lg,\n      _props$md = props.md,\n      md = _props$md === void 0 ? false : _props$md,\n      _props$sm = props.sm,\n      sm = _props$sm === void 0 ? false : _props$sm,\n      _props$spacing = props.spacing,\n      spacing = _props$spacing === void 0 ? 0 : _props$spacing,\n      _props$wrap = props.wrap,\n      wrap = _props$wrap === void 0 ? 'wrap' : _props$wrap,\n      _props$xl = props.xl,\n      xl = _props$xl === void 0 ? false : _props$xl,\n      _props$xs = props.xs,\n      xs = _props$xs === void 0 ? false : _props$xs,\n      _props$zeroMinWidth = props.zeroMinWidth,\n      zeroMinWidth = _props$zeroMinWidth === void 0 ? false : _props$zeroMinWidth,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"alignContent\", \"alignItems\", \"classes\", \"className\", \"component\", \"container\", \"direction\", \"item\", \"justify\", \"lg\", \"md\", \"sm\", \"spacing\", \"wrap\", \"xl\", \"xs\", \"zeroMinWidth\"]);\n\n  var className = Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classNameProp, container && [classes.container, spacing !== 0 && classes[\"spacing-xs-\".concat(String(spacing))]], item && classes.item, zeroMinWidth && classes.zeroMinWidth, direction !== 'row' && classes[\"direction-xs-\".concat(String(direction))], wrap !== 'wrap' && classes[\"wrap-xs-\".concat(String(wrap))], alignItems !== 'stretch' && classes[\"align-items-xs-\".concat(String(alignItems))], alignContent !== 'stretch' && classes[\"align-content-xs-\".concat(String(alignContent))], justify !== 'flex-start' && classes[\"justify-xs-\".concat(String(justify))], xs !== false && classes[\"grid-xs-\".concat(String(xs))], sm !== false && classes[\"grid-sm-\".concat(String(sm))], md !== false && classes[\"grid-md-\".concat(String(md))], lg !== false && classes[\"grid-lg-\".concat(String(lg))], xl !== false && classes[\"grid-xl-\".concat(String(xl))]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: className,\n    ref: ref\n  }, other));\n});\n true ? Grid.propTypes = {\n  /**\n   * Defines the `align-content` style property.\n   * It's applied for all screen sizes.\n   */\n  alignContent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'space-between', 'space-around']),\n\n  /**\n   * Defines the `align-items` style property.\n   * It's applied for all screen sizes.\n   */\n  alignItems: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['flex-start', 'center', 'flex-end', 'stretch', 'baseline']),\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the component will have the flex *container* behavior.\n   * You should be wrapping *items* with a *container*.\n   */\n  container: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Defines the `flex-direction` style property.\n   * It is applied for all screen sizes.\n   */\n  direction: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['row', 'row-reverse', 'column', 'column-reverse']),\n\n  /**\n   * If `true`, the component will have the flex *item* behavior.\n   * You should be wrapping *items* with a *container*.\n   */\n  item: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Defines the `justify-content` style property.\n   * It is applied for all screen sizes.\n   */\n  justify: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['flex-start', 'center', 'flex-end', 'space-between', 'space-around', 'space-evenly']),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `lg` breakpoint and wider screens if not overridden.\n   */\n  lg: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `md` breakpoint and wider screens if not overridden.\n   */\n  md: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `sm` breakpoint and wider screens if not overridden.\n   */\n  sm: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the space between the type `item` component.\n   * It can only be used on a type `container` component.\n   */\n  spacing: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(SPACINGS),\n\n  /**\n   * Defines the `flex-wrap` style property.\n   * It's applied for all screen sizes.\n   */\n  wrap: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['nowrap', 'wrap', 'wrap-reverse']),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `xl` breakpoint and wider screens.\n   */\n  xl: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for all the screen sizes with the lowest priority.\n   */\n  xs: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * If `true`, it sets `min-width: 0` on the item.\n   * Refer to the limitations section of the documentation to better understand the use case.\n   */\n  zeroMinWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool\n} : undefined;\nvar StyledGrid = Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiGrid'\n})(Grid);\n\nif (true) {\n  var requireProp = Object(_utils_requirePropFactory__WEBPACK_IMPORTED_MODULE_6__[\"default\"])('Grid');\n  StyledGrid.propTypes = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, StyledGrid.propTypes, {\n    alignContent: requireProp('container'),\n    alignItems: requireProp('container'),\n    direction: requireProp('container'),\n    justify: requireProp('container'),\n    lg: requireProp('item'),\n    md: requireProp('item'),\n    sm: requireProp('item'),\n    spacing: requireProp('container'),\n    wrap: requireProp('container'),\n    xs: requireProp('item'),\n    zeroMinWidth: requireProp('item')\n  });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (StyledGrid);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Grid/Grid.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Grid/index.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Grid/index.js ***!
+  \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Grid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Grid */ \"./jaas-client/node_modules/@material-ui/core/esm/Grid/Grid.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Grid__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Grid/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Grow/Grow.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Grow/Grow.js ***!
+  \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_transition_group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-transition-group */ \"./jaas-client/node_modules/react-transition-group/esm/index.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/useTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js\");\n/* harmony import */ var _transitions_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../transitions/utils */ \"./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\n\n\n\nfunction getScale(value) {\n  return \"scale(\".concat(value, \", \").concat(Math.pow(value, 2), \")\");\n}\n\nvar styles = {\n  entering: {\n    opacity: 1,\n    transform: getScale(1)\n  },\n  entered: {\n    opacity: 1,\n    transform: 'none'\n  }\n};\n/**\n * The Grow transition is used by the [Tooltip](/components/tooltips/) and\n * [Popover](/components/popover/) components.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Grow = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function Grow(props, ref) {\n  var children = props.children,\n      _props$disableStrictM = props.disableStrictModeCompat,\n      disableStrictModeCompat = _props$disableStrictM === void 0 ? false : _props$disableStrictM,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      style = props.style,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? 'auto' : _props$timeout,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? react_transition_group__WEBPACK_IMPORTED_MODULE_5__[\"Transition\"] : _props$TransitionComp,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"children\", \"disableStrictModeCompat\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"timeout\", \"TransitionComponent\"]);\n\n  var timer = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"]();\n  var autoTimeout = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"]();\n  var theme = Object(_styles_useTheme__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n  var enableStrictModeCompat = theme.unstable_strictMode && !disableStrictModeCompat;\n  var nodeRef = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](null);\n  var foreignRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(children.ref, ref);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(enableStrictModeCompat ? nodeRef : undefined, foreignRef);\n\n  var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {\n    return function (nodeOrAppearing, maybeAppearing) {\n      if (callback) {\n        var _ref = enableStrictModeCompat ? [nodeRef.current, nodeOrAppearing] : [nodeOrAppearing, maybeAppearing],\n            _ref2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref, 2),\n            node = _ref2[0],\n            isAppearing = _ref2[1]; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n\n\n        if (isAppearing === undefined) {\n          callback(node);\n        } else {\n          callback(node, isAppearing);\n        }\n      }\n    };\n  };\n\n  var handleEntering = normalizedTransitionCallback(onEntering);\n  var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {\n    Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_7__[\"reflow\"])(node); // So the animation always start from the start.\n\n    var _getTransitionProps = Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_7__[\"getTransitionProps\"])({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'enter'\n    }),\n        transitionDuration = _getTransitionProps.duration,\n        delay = _getTransitionProps.delay;\n\n    var duration;\n\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration: duration,\n      delay: delay\n    }), theme.transitions.create('transform', {\n      duration: duration * 0.666,\n      delay: delay\n    })].join(',');\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  var handleEntered = normalizedTransitionCallback(onEntered);\n  var handleExiting = normalizedTransitionCallback(onExiting);\n  var handleExit = normalizedTransitionCallback(function (node) {\n    var _getTransitionProps2 = Object(_transitions_utils__WEBPACK_IMPORTED_MODULE_7__[\"getTransitionProps\"])({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'exit'\n    }),\n        transitionDuration = _getTransitionProps2.duration,\n        delay = _getTransitionProps2.delay;\n\n    var duration;\n\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration: duration,\n      delay: delay\n    }), theme.transitions.create('transform', {\n      duration: duration * 0.666,\n      delay: delay || duration * 0.333\n    })].join(',');\n    node.style.opacity = '0';\n    node.style.transform = getScale(0.75);\n\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  var handleExited = normalizedTransitionCallback(onExited);\n\n  var addEndListener = function addEndListener(nodeOrNext, maybeNext) {\n    var next = enableStrictModeCompat ? nodeOrNext : maybeNext;\n\n    if (timeout === 'auto') {\n      timer.current = setTimeout(next, autoTimeout.current || 0);\n    }\n  };\n\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    return function () {\n      clearTimeout(timer.current);\n    };\n  }, []);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    appear: true,\n    in: inProp,\n    nodeRef: enableStrictModeCompat ? nodeRef : undefined,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    addEndListener: addEndListener,\n    timeout: timeout === 'auto' ? null : timeout\n  }, other), function (state, childProps) {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"cloneElement\"](children, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        opacity: 0,\n        transform: getScale(0.75),\n        visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n      }, styles[state], style, children.props.style),\n      ref: handleRef\n    }, childProps));\n  });\n});\n true ? Grow.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A single child content element.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.element,\n\n  /**\n   * Enable this prop if you encounter 'Function components cannot be given refs',\n   * use `unstable_createStrictModeTheme`,\n   * and can't forward the ref in the child component.\n   */\n  disableStrictModeCompat: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, show the component; triggers the enter or exit animation.\n   */\n  in: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   *\n   * Set to 'auto' to automatically calculate transition time based on height.\n   */\n  timeout: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['auto']), prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  })])\n} : undefined;\nGrow.muiSupportAuto = true;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Grow);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Grow/Grow.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Grow/index.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Grow/index.js ***!
+  \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Grow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Grow */ \"./jaas-client/node_modules/@material-ui/core/esm/Grow/Grow.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Grow__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Grow/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/IconButton/IconButton.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/IconButton/IconButton.js ***!
+  \*********************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _styles_colorManipulator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/colorManipulator */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js\");\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ButtonBase */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      textAlign: 'center',\n      flex: '0 0 auto',\n      fontSize: theme.typography.pxToRem(24),\n      padding: 12,\n      borderRadius: '50%',\n      overflow: 'visible',\n      // Explicitly set the default value to solve a bug on IE 11.\n      color: theme.palette.action.active,\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_7__[\"fade\"])(theme.palette.action.active, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        backgroundColor: 'transparent',\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if `edge=\"start\"`. */\n    edgeStart: {\n      marginLeft: -12,\n      '$sizeSmall&': {\n        marginLeft: -3\n      }\n    },\n\n    /* Styles applied to the root element if `edge=\"end\"`. */\n    edgeEnd: {\n      marginRight: -12,\n      '$sizeSmall&': {\n        marginRight: -3\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_7__[\"fade\"])(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: Object(_styles_colorManipulator__WEBPACK_IMPORTED_MODULE_7__[\"fade\"])(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {\n      padding: 3,\n      fontSize: theme.typography.pxToRem(18)\n    },\n\n    /* Styles applied to the children container element. */\n    label: {\n      width: '100%',\n      display: 'flex',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    }\n  };\n};\n/**\n * Refer to the [Icons](/components/icons/) section of the documentation\n * regarding the available icon options.\n */\n\nvar IconButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function IconButton(props, ref) {\n  var _props$edge = props.edge,\n      edge = _props$edge === void 0 ? false : _props$edge,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"edge\", \"children\", \"classes\", \"className\", \"color\", \"disabled\", \"disableFocusRipple\", \"size\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_ButtonBase__WEBPACK_IMPORTED_MODULE_8__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, color !== 'default' && classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(color))], disabled && classes.disabled, size === \"small\" && classes[\"size\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(size))], {\n      'start': classes.edgeStart,\n      'end': classes.edgeEnd\n    }[edge]),\n    centerRipple: true,\n    focusRipple: !disableFocusRipple,\n    disabled: disabled,\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", {\n    className: classes.label\n  }, children));\n});\n true ? IconButton.propTypes = {\n  /**\n   * The icon element.\n   */\n  children: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node, function (props) {\n    var found = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].toArray(props.children).some(function (child) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"isValidElement\"](child) && child.props.onClick;\n    });\n\n    if (found) {\n      return new Error(['Material-UI: You are providing an onClick event listener ' + 'to a child of a button element.', 'Firefox will never trigger the event.', 'You should move the onClick listener to the parent button element.', 'https://github.com/mui-org/material-ui/issues/13957'].join('\\n'));\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * If `true`, the button will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   */\n  disableFocusRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   */\n  edge: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['start', 'end', false]),\n\n  /**\n   * The size of the button.\n   * `small` is equivalent to the dense button styling.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['small', 'medium'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiIconButton'\n})(IconButton));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/IconButton/IconButton.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/IconButton/index.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/IconButton/index.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _IconButton__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IconButton */ \"./jaas-client/node_modules/@material-ui/core/esm/IconButton/IconButton.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _IconButton__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/IconButton/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Input/Input.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Input/Input.js ***!
+  \***********************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _InputBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../InputBase */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative'\n    },\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {\n      'label + &': {\n        marginTop: 16\n      }\n    },\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if color secondary. */\n    colorSecondary: {\n      '&$underline:after': {\n        borderBottomColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if `disableUnderline={false}`. */\n    underline: {\n      '&:after': {\n        borderBottom: \"2px solid \".concat(theme.palette.primary.main),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\"',\n        position: 'absolute',\n        right: 0,\n        transform: 'scaleX(0)',\n        transition: theme.transitions.create('transform', {\n          duration: theme.transitions.duration.shorter,\n          easing: theme.transitions.easing.easeOut\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&$focused:after': {\n        transform: 'scaleX(1)'\n      },\n      '&$error:after': {\n        borderBottomColor: theme.palette.error.main,\n        transform: 'scaleX(1)' // error is always underlined in red\n\n      },\n      '&:before': {\n        borderBottom: \"1px solid \".concat(bottomLineColor),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\\\\00a0\"',\n        position: 'absolute',\n        right: 0,\n        transition: theme.transitions.create('border-bottom-color', {\n          duration: theme.transitions.duration.shorter\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&:hover:not($disabled):before': {\n        borderBottom: \"2px solid \".concat(theme.palette.text.primary),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          borderBottom: \"1px solid \".concat(bottomLineColor)\n        }\n      },\n      '&$disabled:before': {\n        borderBottomStyle: 'dotted'\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {},\n\n    /* Styles applied to the `input` element. */\n    input: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {},\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {},\n\n    /* Styles applied to the `input` element if `type=\"search\"`. */\n    inputTypeSearch: {}\n  };\n};\nvar Input = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Input(props, ref) {\n  var disableUnderline = props.disableUnderline,\n      classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"disableUnderline\", \"classes\", \"fullWidth\", \"inputComponent\", \"multiline\", \"type\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_InputBase__WEBPACK_IMPORTED_MODULE_6__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, classes, {\n      root: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, !disableUnderline && classes.underline),\n      underline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\n true ? Input.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will not have an underline.\n   */\n  disableUnderline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\nInput.muiName = 'Input';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiInput'\n})(Input));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Input/Input.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Input/index.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Input/index.js ***!
+  \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Input */ \"./jaas-client/node_modules/@material-ui/core/esm/Input/Input.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Input__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Input/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputBase/InputBase.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputBase/InputBase.js ***!
+  \*******************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_FormControlContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FormControl/FormControlContext */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/FormControlContext.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _TextareaAutosize__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../TextareaAutosize */ \"./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/index.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js\");\n\n\n\n\n/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */\n\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var placeholder = {\n    color: 'currentColor',\n    opacity: light ? 0.42 : 0.5,\n    transition: theme.transitions.create('opacity', {\n      duration: theme.transitions.duration.shorter\n    })\n  };\n  var placeholderHidden = {\n    opacity: '0 !important'\n  };\n  var placeholderVisible = {\n    opacity: light ? 0.42 : 0.5\n  };\n  return {\n    '@global': {\n      '@keyframes mui-auto-fill': {},\n      '@keyframes mui-auto-fill-cancel': {}\n    },\n\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, theme.typography.body1, {\n      color: theme.palette.text.primary,\n      lineHeight: '1.1876em',\n      // Reset (19px), match the native input line-height\n      boxSizing: 'border-box',\n      // Prevent padding issue with fullWidth.\n      position: 'relative',\n      cursor: 'text',\n      display: 'inline-flex',\n      alignItems: 'center',\n      '&$disabled': {\n        color: theme.palette.text.disabled,\n        cursor: 'default'\n      }\n    }),\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {},\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {},\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n      '&$marginDense': {\n        paddingTop: 4 - 1\n      }\n    },\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {\n      width: '100%'\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      font: 'inherit',\n      letterSpacing: 'inherit',\n      color: 'currentColor',\n      padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n      border: 0,\n      boxSizing: 'content-box',\n      background: 'none',\n      height: '1.1876em',\n      // Reset (19px), match the native input line-height\n      margin: 0,\n      // Reset for Safari\n      WebkitTapHighlightColor: 'transparent',\n      display: 'block',\n      // Make the flex item shrink with Firefox\n      minWidth: 0,\n      width: '100%',\n      // Fix IE 11 width issue\n      animationName: 'mui-auto-fill-cancel',\n      animationDuration: '10ms',\n      '&::-webkit-input-placeholder': placeholder,\n      '&::-moz-placeholder': placeholder,\n      // Firefox 19+\n      '&:-ms-input-placeholder': placeholder,\n      // IE 11\n      '&::-ms-input-placeholder': placeholder,\n      // Edge\n      '&:focus': {\n        outline: 0\n      },\n      // Reset Firefox invalid required input style\n      '&:invalid': {\n        boxShadow: 'none'\n      },\n      '&::-webkit-search-decoration': {\n        // Remove the padding when type=search.\n        '-webkit-appearance': 'none'\n      },\n      // Show and hide the placeholder logic\n      'label[data-shrink=false] + $formControl &': {\n        '&::-webkit-input-placeholder': placeholderHidden,\n        '&::-moz-placeholder': placeholderHidden,\n        // Firefox 19+\n        '&:-ms-input-placeholder': placeholderHidden,\n        // IE 11\n        '&::-ms-input-placeholder': placeholderHidden,\n        // Edge\n        '&:focus::-webkit-input-placeholder': placeholderVisible,\n        '&:focus::-moz-placeholder': placeholderVisible,\n        // Firefox 19+\n        '&:focus:-ms-input-placeholder': placeholderVisible,\n        // IE 11\n        '&:focus::-ms-input-placeholder': placeholderVisible // Edge\n\n      },\n      '&$disabled': {\n        opacity: 1 // Reset iOS opacity\n\n      },\n      '&:-webkit-autofill': {\n        animationDuration: '5000s',\n        animationName: 'mui-auto-fill'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 4 - 1\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      height: 'auto',\n      resize: 'none',\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `type=\"search\"`. */\n    inputTypeSearch: {\n      // Improve type search style.\n      '-moz-appearance': 'textfield',\n      '-webkit-appearance': 'textfield'\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {},\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {},\n\n    /* Styles applied to the `input` element if `hiddenLabel={true}`. */\n    inputHiddenLabel: {}\n  };\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"] : react__WEBPACK_IMPORTED_MODULE_3__[\"useLayoutEffect\"];\n/**\n * `InputBase` contains as few styles as possible.\n * It aims to be a simple building block for creating an input.\n * It contains a load of style reset and some state logic.\n */\n\nvar InputBase = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function InputBase(props, ref) {\n  var ariaDescribedby = props['aria-describedby'],\n      autoComplete = props.autoComplete,\n      autoFocus = props.autoFocus,\n      classes = props.classes,\n      className = props.className,\n      color = props.color,\n      defaultValue = props.defaultValue,\n      disabled = props.disabled,\n      endAdornment = props.endAdornment,\n      error = props.error,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      id = props.id,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$inputProps = props.inputProps,\n      inputPropsProp = _props$inputProps === void 0 ? {} : _props$inputProps,\n      inputRefProp = props.inputRef,\n      margin = props.margin,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onClick = props.onClick,\n      onFocus = props.onFocus,\n      onKeyDown = props.onKeyDown,\n      onKeyUp = props.onKeyUp,\n      placeholder = props.placeholder,\n      readOnly = props.readOnly,\n      renderSuffix = props.renderSuffix,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      rowsMin = props.rowsMin,\n      startAdornment = props.startAdornment,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      valueProp = props.value,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"aria-describedby\", \"autoComplete\", \"autoFocus\", \"classes\", \"className\", \"color\", \"defaultValue\", \"disabled\", \"endAdornment\", \"error\", \"fullWidth\", \"id\", \"inputComponent\", \"inputProps\", \"inputRef\", \"margin\", \"multiline\", \"name\", \"onBlur\", \"onChange\", \"onClick\", \"onFocus\", \"onKeyDown\", \"onKeyUp\", \"placeholder\", \"readOnly\", \"renderSuffix\", \"rows\", \"rowsMax\", \"rowsMin\", \"startAdornment\", \"type\", \"value\"]);\n\n  var value = inputPropsProp.value != null ? inputPropsProp.value : valueProp;\n\n  var _React$useRef = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"](value != null),\n      isControlled = _React$useRef.current;\n\n  var inputRef = react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"]();\n  var handleInputRefWarning = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function (instance) {\n    if (true) {\n      if (instance && instance.nodeName !== 'INPUT' && !instance.focus) {\n        console.error(['Material-UI: You have provided a `inputComponent` to the input component', 'that does not correctly handle the `inputRef` prop.', 'Make sure the `inputRef` prop is called with a HTMLInputElement.'].join('\\n'));\n      }\n    }\n  }, []);\n  var handleInputPropsRefProp = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(inputPropsProp.ref, handleInputRefWarning);\n  var handleInputRefProp = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(inputRefProp, handleInputPropsRefProp);\n  var handleInputRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(inputRef, handleInputRefProp);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__[\"useState\"](false),\n      focused = _React$useState[0],\n      setFocused = _React$useState[1];\n\n  var muiFormControl = Object(_FormControl_FormControlContext__WEBPACK_IMPORTED_MODULE_7__[\"useFormControl\"])();\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n      if (muiFormControl) {\n        return muiFormControl.registerEffect();\n      }\n\n      return undefined;\n    }, [muiFormControl]);\n  }\n\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['color', 'disabled', 'error', 'hiddenLabel', 'margin', 'required', 'filled']\n  });\n  fcs.focused = muiFormControl ? muiFormControl.focused : focused; // The blur won't fire when the disabled state is set on a focused input.\n  // We need to book keep the focused state manually.\n\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    if (!muiFormControl && disabled && focused) {\n      setFocused(false);\n\n      if (onBlur) {\n        onBlur();\n      }\n    }\n  }, [muiFormControl, disabled, focused, onBlur]);\n  var onFilled = muiFormControl && muiFormControl.onFilled;\n  var onEmpty = muiFormControl && muiFormControl.onEmpty;\n  var checkDirty = react__WEBPACK_IMPORTED_MODULE_3__[\"useCallback\"](function (obj) {\n    if (Object(_utils__WEBPACK_IMPORTED_MODULE_12__[\"isFilled\"])(obj)) {\n      if (onFilled) {\n        onFilled();\n      }\n    } else if (onEmpty) {\n      onEmpty();\n    }\n  }, [onFilled, onEmpty]);\n  useEnhancedEffect(function () {\n    if (isControlled) {\n      checkDirty({\n        value: value\n      });\n    }\n  }, [value, checkDirty, isControlled]);\n\n  var handleFocus = function handleFocus(event) {\n    // Fix a bug with IE 11 where the focus/blur events are triggered\n    // while the input is disabled.\n    if (fcs.disabled) {\n      event.stopPropagation();\n      return;\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n\n    if (inputPropsProp.onFocus) {\n      inputPropsProp.onFocus(event);\n    }\n\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    } else {\n      setFocused(true);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    if (onBlur) {\n      onBlur(event);\n    }\n\n    if (inputPropsProp.onBlur) {\n      inputPropsProp.onBlur(event);\n    }\n\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    } else {\n      setFocused(false);\n    }\n  };\n\n  var handleChange = function handleChange(event) {\n    if (!isControlled) {\n      var element = event.target || inputRef.current;\n\n      if (element == null) {\n        throw new Error( true ? \"Material-UI: Expected valid input target. Did you use a custom `inputComponent` and forget to forward refs? See https://material-ui.com/r/input-component-ref-interface for more info.\" : undefined);\n      }\n\n      checkDirty({\n        value: element.value\n      });\n    }\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (inputPropsProp.onChange) {\n      inputPropsProp.onChange.apply(inputPropsProp, [event].concat(args));\n    } // Perform in the willUpdate\n\n\n    if (onChange) {\n      onChange.apply(void 0, [event].concat(args));\n    }\n  }; // Check the input state on mount, in case it was filled by the user\n  // or auto filled by the browser before the hydration (for SSR).\n\n\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    checkDirty(inputRef.current);\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  var handleClick = function handleClick(event) {\n    if (inputRef.current && event.currentTarget === event.target) {\n      inputRef.current.focus();\n    }\n\n    if (onClick) {\n      onClick(event);\n    }\n  };\n\n  var InputComponent = inputComponent;\n\n  var inputProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, inputPropsProp, {\n    ref: handleInputRef\n  });\n\n  if (typeof InputComponent !== 'string') {\n    inputProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      // Rename ref to inputRef as we don't know the\n      // provided `inputComponent` structure.\n      inputRef: handleInputRef,\n      type: type\n    }, inputProps, {\n      ref: null\n    });\n  } else if (multiline) {\n    if (rows && !rowsMax && !rowsMin) {\n      InputComponent = 'textarea';\n    } else {\n      inputProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        rows: rows,\n        rowsMax: rowsMax\n      }, inputProps);\n      InputComponent = _TextareaAutosize__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\n    }\n  } else {\n    inputProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      type: type\n    }, inputProps);\n  }\n\n  var handleAutoFill = function handleAutoFill(event) {\n    // Provide a fake value as Chrome might not let you access it for security reasons.\n    checkDirty(event.animationName === 'mui-auto-fill-cancel' ? inputRef.current : {\n      value: 'x'\n    });\n  };\n\n  react__WEBPACK_IMPORTED_MODULE_3__[\"useEffect\"](function () {\n    if (muiFormControl) {\n      muiFormControl.setAdornedStart(Boolean(startAdornment));\n    }\n  }, [muiFormControl, startAdornment]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(fcs.color || 'primary'))], className, fcs.disabled && classes.disabled, fcs.error && classes.error, fullWidth && classes.fullWidth, fcs.focused && classes.focused, muiFormControl && classes.formControl, multiline && classes.multiline, startAdornment && classes.adornedStart, endAdornment && classes.adornedEnd, fcs.margin === 'dense' && classes.marginDense),\n    onClick: handleClick,\n    ref: ref\n  }, other), startAdornment, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_FormControl_FormControlContext__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Provider, {\n    value: null\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](InputComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    \"aria-invalid\": fcs.error,\n    \"aria-describedby\": ariaDescribedby,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    disabled: fcs.disabled,\n    id: id,\n    onAnimationStart: handleAutoFill,\n    name: name,\n    placeholder: placeholder,\n    readOnly: readOnly,\n    required: fcs.required,\n    rows: rows,\n    value: value,\n    onKeyDown: onKeyDown,\n    onKeyUp: onKeyUp\n  }, inputProps, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.input, inputPropsProp.className, fcs.disabled && classes.disabled, multiline && classes.inputMultiline, fcs.hiddenLabel && classes.inputHiddenLabel, startAdornment && classes.inputAdornedStart, endAdornment && classes.inputAdornedEnd, type === 'search' && classes.inputTypeSearch, fcs.margin === 'dense' && classes.inputMarginDense),\n    onBlur: handleBlur,\n    onChange: handleChange,\n    onFocus: handleFocus\n  }))), endAdornment, renderSuffix ? renderSuffix(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, fcs, {\n    startAdornment: startAdornment\n  })) : null);\n});\n true ? InputBase.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * @ignore\n   */\n  'aria-describedby': prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"refType\"],\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * Callback fired when the input is blurred.\n   *\n   * Notice that the first argument (event) might be undefined.\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onKeyUp: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  renderSuffix: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string]),\n\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  rowsMin: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(styles, {\n  name: 'MuiInputBase'\n})(InputBase));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputBase/InputBase.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _InputBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InputBase */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/InputBase.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _InputBase__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js ***!
+  \***************************************************************************/
+/*! exports provided: hasValue, isFilled, isAdornedStart */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hasValue\", function() { return hasValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isFilled\", function() { return isFilled; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isAdornedStart\", function() { return isAdornedStart; });\n// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns {boolean} true if string (including '') or number (including zero)\nfunction hasValue(value) {\n  return value != null && !(Array.isArray(value) && value.length === 0);\n} // Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns {boolean} False when not present or empty string.\n//                    True when any number or string with length.\n\nfunction isFilled(obj) {\n  var SSR = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  return obj && (hasValue(obj.value) && obj.value !== '' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !== '');\n} // Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns {boolean} False when no adornments.\n//                    True when adorned at the start.\n\nfunction isAdornedStart(obj) {\n  return obj.startAdornment;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputLabel/InputLabel.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputLabel/InputLabel.js ***!
+  \*********************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _FormLabel__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../FormLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/FormLabel/index.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'block',\n      transformOrigin: 'top left'\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {},\n\n    /* Pseudo-class applied to the asterisk element. */\n    asterisk: {},\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      // slight alteration to spec spacing to match visual spec result\n      transform: 'translate(0, 24px) scale(1)'\n    },\n\n    /* Styles applied to the root element if `margin=\"dense\"`. */\n    marginDense: {\n      // Compensation for the `Input.inputDense` style.\n      transform: 'translate(0, 21px) scale(1)'\n    },\n\n    /* Styles applied to the `input` element if `shrink={true}`. */\n    shrink: {\n      transform: 'translate(0, 1.5px) scale(0.75)',\n      transformOrigin: 'top left'\n    },\n\n    /* Styles applied to the `input` element if `disableAnimation={false}`. */\n    animated: {\n      transition: theme.transitions.create(['color', 'transform'], {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      })\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"`. */\n    filled: {\n      // Chrome's autofill feature gives the input field a yellow background.\n      // Since the input field is behind the label in the HTML tree,\n      // the input field is drawn last and hides the label with an opaque background color.\n      // zIndex: 1 will raise the label above opaque background-colors of input.\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(12px, 20px) scale(1)',\n      '&$marginDense': {\n        transform: 'translate(12px, 17px) scale(1)'\n      },\n      '&$shrink': {\n        transform: 'translate(12px, 10px) scale(0.75)',\n        '&$marginDense': {\n          transform: 'translate(12px, 7px) scale(0.75)'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      // see comment above on filled.zIndex\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(14px, 20px) scale(1)',\n      '&$marginDense': {\n        transform: 'translate(14px, 12px) scale(1)'\n      },\n      '&$shrink': {\n        transform: 'translate(14px, -6px) scale(0.75)'\n      }\n    }\n  };\n};\nvar InputLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function InputLabel(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$disableAnimati = props.disableAnimation,\n      disableAnimation = _props$disableAnimati === void 0 ? false : _props$disableAnimati,\n      margin = props.margin,\n      shrinkProp = props.shrink,\n      variant = props.variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"disableAnimation\", \"margin\", \"shrink\", \"variant\"]);\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n  var shrink = shrinkProp;\n\n  if (typeof shrink === 'undefined' && muiFormControl) {\n    shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n  }\n\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_5__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['margin', 'variant']\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FormLabel__WEBPACK_IMPORTED_MODULE_8__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    \"data-shrink\": shrink,\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, muiFormControl && classes.formControl, !disableAnimation && classes.animated, shrink && classes.shrink, fcs.margin === 'dense' && classes.marginDense, {\n      'filled': classes.filled,\n      'outlined': classes.outlined\n    }[fcs.variant]),\n    classes: {\n      focused: classes.focused,\n      disabled: classes.disabled,\n      error: classes.error,\n      required: classes.required,\n      asterisk: classes.asterisk\n    },\n    ref: ref\n  }, other));\n});\n true ? InputLabel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The contents of the `InputLabel`.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * If `true`, the transition animation is disabled.\n   */\n  disableAnimation: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, apply disabled class.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label will be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input of this label is focused.\n   */\n  focused: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense']),\n\n  /**\n   * if `true`, the label will indicate that the input is required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label is shrunk.\n   */\n  shrink: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiInputLabel'\n})(InputLabel));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputLabel/InputLabel.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/InputLabel/index.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/InputLabel/index.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _InputLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InputLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/InputLabel/InputLabel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _InputLabel__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/InputLabel/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Link/Link.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Link/Link.js ***!
+  \*********************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/useIsFocusVisible */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _Typography__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {},\n\n  /* Styles applied to the root element if `underline=\"none\"`. */\n  underlineNone: {\n    textDecoration: 'none'\n  },\n\n  /* Styles applied to the root element if `underline=\"hover\"`. */\n  underlineHover: {\n    textDecoration: 'none',\n    '&:hover': {\n      textDecoration: 'underline'\n    }\n  },\n\n  /* Styles applied to the root element if `underline=\"always\"`. */\n  underlineAlways: {\n    textDecoration: 'underline'\n  },\n  // Same reset as ButtonBase.root\n\n  /* Styles applied to the root element if `component=\"button\"`. */\n  button: {\n    position: 'relative',\n    WebkitTapHighlightColor: 'transparent',\n    backgroundColor: 'transparent',\n    // Reset default value\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0,\n    border: 0,\n    margin: 0,\n    // Remove the margin in Safari\n    borderRadius: 0,\n    padding: 0,\n    // Remove the padding in Firefox\n    cursor: 'pointer',\n    userSelect: 'none',\n    verticalAlign: 'middle',\n    '-moz-appearance': 'none',\n    // Reset\n    '-webkit-appearance': 'none',\n    // Reset\n    '&::-moz-focus-inner': {\n      borderStyle: 'none' // Remove Firefox dotted outline.\n\n    },\n    '&$focusVisible': {\n      outline: 'auto'\n    }\n  },\n\n  /* Pseudo-class applied to the root element if the link is keyboard focused. */\n  focusVisible: {}\n};\nvar Link = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Link(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'a' : _props$component,\n      onBlur = props.onBlur,\n      onFocus = props.onFocus,\n      TypographyClasses = props.TypographyClasses,\n      _props$underline = props.underline,\n      underline = _props$underline === void 0 ? 'hover' : _props$underline,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'inherit' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"color\", \"component\", \"onBlur\", \"onFocus\", \"TypographyClasses\", \"underline\", \"variant\"]);\n\n  var _useIsFocusVisible = Object(_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](false),\n      focusVisible = _React$useState[0],\n      setFocusVisible = _React$useState[1];\n\n  var handlerRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(ref, focusVisibleRef);\n\n  var handleBlur = function handleBlur(event) {\n    if (focusVisible) {\n      onBlurVisible();\n      setFocusVisible(false);\n    }\n\n    if (onBlur) {\n      onBlur(event);\n    }\n  };\n\n  var handleFocus = function handleFocus(event) {\n    if (isFocusVisible(event)) {\n      setFocusVisible(true);\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n  };\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Typography__WEBPACK_IMPORTED_MODULE_10__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes[\"underline\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(underline))], className, focusVisible && classes.focusVisible, component === 'button' && classes.button),\n    classes: TypographyClasses,\n    color: color,\n    component: component,\n    onBlur: handleBlur,\n    onFocus: handleFocus,\n    ref: handlerRef,\n    variant: variant\n  }, other));\n});\n true ? Link.propTypes = {\n  /**\n   * The content of the link.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the link.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['initial', 'inherit', 'primary', 'secondary', 'textPrimary', 'textSecondary', 'error']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: _material_ui_utils__WEBPACK_IMPORTED_MODULE_7__[\"elementTypeAcceptingRef\"],\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * `classes` prop applied to the [`Typography`](/api/typography/) element.\n   */\n  TypographyClasses: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Controls when the link should have an underline.\n   */\n  underline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['none', 'hover', 'always']),\n\n  /**\n   * Applies the theme typography styles.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiLink'\n})(Link));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Link/Link.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Link/index.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Link/index.js ***!
+  \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Link */ \"./jaas-client/node_modules/@material-ui/core/esm/Link/Link.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Link__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Link/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/List/List.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/List/List.js ***!
+  \*********************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _ListContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ListContext */ \"./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js\");\n\n\n\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    listStyle: 'none',\n    margin: 0,\n    padding: 0,\n    position: 'relative'\n  },\n\n  /* Styles applied to the root element if `disablePadding={false}`. */\n  padding: {\n    paddingTop: 8,\n    paddingBottom: 8\n  },\n\n  /* Styles applied to the root element if dense. */\n  dense: {},\n\n  /* Styles applied to the root element if a `subheader` is provided. */\n  subheader: {\n    paddingTop: 0\n  }\n};\nvar List = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function List(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'ul' : _props$component,\n      _props$dense = props.dense,\n      dense = _props$dense === void 0 ? false : _props$dense,\n      _props$disablePadding = props.disablePadding,\n      disablePadding = _props$disablePadding === void 0 ? false : _props$disablePadding,\n      subheader = props.subheader,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"component\", \"dense\", \"disablePadding\", \"subheader\"]);\n\n  var context = react__WEBPACK_IMPORTED_MODULE_2__[\"useMemo\"](function () {\n    return {\n      dense: dense\n    };\n  }, [dense]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_ListContext__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Provider, {\n    value: context\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, dense && classes.dense, !disablePadding && classes.padding, subheader && classes.subheader),\n    ref: ref\n  }, other), subheader, children));\n});\n true ? List.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used for\n   * the list and list items.\n   * The prop is available to descendant components as the `dense` context.\n   */\n  dense: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, vertical padding will be removed from the list.\n   */\n  disablePadding: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The content of the subheader, normally `ListSubheader`.\n   */\n  subheader: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiList'\n})(List));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/List/List.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * @ignore - internal component.\n */\n\nvar ListContext = react__WEBPACK_IMPORTED_MODULE_0__[\"createContext\"]({});\n\nif (true) {\n  ListContext.displayName = 'ListContext';\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ListContext);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/List/index.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/List/index.js ***!
+  \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _List__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./List */ \"./jaas-client/node_modules/@material-ui/core/esm/List/List.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _List__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/List/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/ListItem/ListItem.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/ListItem/ListItem.js ***!
+  \*****************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ButtonBase */ \"./jaas-client/node_modules/@material-ui/core/esm/ButtonBase/index.js\");\n/* harmony import */ var _utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/isMuiElement */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _List_ListContext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../List/ListContext */ \"./jaas-client/node_modules/@material-ui/core/esm/List/ListContext.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_11__);\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the (normally root) `component` element. May be wrapped by a `container`. */\n    root: {\n      display: 'flex',\n      justifyContent: 'flex-start',\n      alignItems: 'center',\n      position: 'relative',\n      textDecoration: 'none',\n      width: '100%',\n      boxSizing: 'border-box',\n      textAlign: 'left',\n      paddingTop: 8,\n      paddingBottom: 8,\n      '&$focusVisible': {\n        backgroundColor: theme.palette.action.selected\n      },\n      '&$selected, &$selected:hover': {\n        backgroundColor: theme.palette.action.selected\n      },\n      '&$disabled': {\n        opacity: 0.5\n      }\n    },\n\n    /* Styles applied to the `container` element if `children` includes `ListItemSecondaryAction`. */\n    container: {\n      position: 'relative'\n    },\n\n    /* Pseudo-class applied to the `component`'s `focusVisibleClassName` prop if `button={true}`. */\n    focusVisible: {},\n\n    /* Styles applied to the `component` element if dense. */\n    dense: {\n      paddingTop: 4,\n      paddingBottom: 4\n    },\n\n    /* Styles applied to the `component` element if `alignItems=\"flex-start\"`. */\n    alignItemsFlexStart: {\n      alignItems: 'flex-start'\n    },\n\n    /* Pseudo-class applied to the inner `component` element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the inner `component` element if `divider={true}`. */\n    divider: {\n      borderBottom: \"1px solid \".concat(theme.palette.divider),\n      backgroundClip: 'padding-box'\n    },\n\n    /* Styles applied to the inner `component` element if `disableGutters={false}`. */\n    gutters: {\n      paddingLeft: 16,\n      paddingRight: 16\n    },\n\n    /* Styles applied to the inner `component` element if `button={true}`. */\n    button: {\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: theme.palette.action.hover,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the `component` element if `children` includes `ListItemSecondaryAction`. */\n    secondaryAction: {\n      // Add some space to avoid collision as `ListItemSecondaryAction`\n      // is absolutely positioned.\n      paddingRight: 48\n    },\n\n    /* Pseudo-class applied to the root element if `selected={true}`. */\n    selected: {}\n  };\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"] : react__WEBPACK_IMPORTED_MODULE_2__[\"useLayoutEffect\"];\n/**\n * Uses an additional container component if `ListItemSecondaryAction` is the last child.\n */\n\nvar ListItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function ListItem(props, ref) {\n  var _props$alignItems = props.alignItems,\n      alignItems = _props$alignItems === void 0 ? 'center' : _props$alignItems,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$button = props.button,\n      button = _props$button === void 0 ? false : _props$button,\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      componentProp = props.component,\n      _props$ContainerCompo = props.ContainerComponent,\n      ContainerComponent = _props$ContainerCompo === void 0 ? 'li' : _props$ContainerCompo,\n      _props$ContainerProps = props.ContainerProps;\n  _props$ContainerProps = _props$ContainerProps === void 0 ? {} : _props$ContainerProps;\n\n  var ContainerClassName = _props$ContainerProps.className,\n      ContainerProps = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_props$ContainerProps, [\"className\"]),\n      _props$dense = props.dense,\n      dense = _props$dense === void 0 ? false : _props$dense,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$divider = props.divider,\n      divider = _props$divider === void 0 ? false : _props$divider,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$selected = props.selected,\n      selected = _props$selected === void 0 ? false : _props$selected,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"alignItems\", \"autoFocus\", \"button\", \"children\", \"classes\", \"className\", \"component\", \"ContainerComponent\", \"ContainerProps\", \"dense\", \"disabled\", \"disableGutters\", \"divider\", \"focusVisibleClassName\", \"selected\"]);\n\n  var context = react__WEBPACK_IMPORTED_MODULE_2__[\"useContext\"](_List_ListContext__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n  var childContext = {\n    dense: dense || context.dense || false,\n    alignItems: alignItems\n  };\n  var listItemRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  useEnhancedEffect(function () {\n    if (autoFocus) {\n      if (listItemRef.current) {\n        listItemRef.current.focus();\n      } else if (true) {\n        console.error('Material-UI: Unable to set focus to a ListItem whose component has not been rendered.');\n      }\n    }\n  }, [autoFocus]);\n  var children = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].toArray(childrenProp);\n  var hasSecondaryAction = children.length && Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(children[children.length - 1], ['ListItemSecondaryAction']);\n  var handleOwnRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (instance) {\n    // #StrictMode ready\n    listItemRef.current = react_dom__WEBPACK_IMPORTED_MODULE_11__[\"findDOMNode\"](instance);\n  }, []);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(handleOwnRef, ref);\n\n  var componentProps = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, childContext.dense && classes.dense, !disableGutters && classes.gutters, divider && classes.divider, disabled && classes.disabled, button && classes.button, alignItems !== \"center\" && classes.alignItemsFlexStart, hasSecondaryAction && classes.secondaryAction, selected && classes.selected),\n    disabled: disabled\n  }, other);\n\n  var Component = componentProp || 'li';\n\n  if (button) {\n    componentProps.component = componentProp || 'div';\n    componentProps.focusVisibleClassName = Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.focusVisible, focusVisibleClassName);\n    Component = _ButtonBase__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\n  }\n\n  if (hasSecondaryAction) {\n    // Use div by default.\n    Component = !componentProps.component && !componentProp ? 'div' : Component; // Avoid nesting of li > li.\n\n    if (ContainerComponent === 'li') {\n      if (Component === 'li') {\n        Component = 'div';\n      } else if (componentProps.component === 'li') {\n        componentProps.component = 'div';\n      }\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_List_ListContext__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Provider, {\n      value: childContext\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](ContainerComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.container, ContainerClassName),\n      ref: handleRef\n    }, ContainerProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, componentProps, children), children.pop()));\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_List_ListContext__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Provider, {\n    value: childContext\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    ref: handleRef\n  }, componentProps), children));\n});\n true ? ListItem.propTypes = {\n  /**\n   * Defines the `align-items` style property.\n   */\n  alignItems: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['flex-start', 'center']),\n\n  /**\n   * If `true`, the list item will be focused during the first mount.\n   * Focus will also be triggered if the value changes from false to true.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the list item will be a button (using `ButtonBase`). Props intended\n   * for `ButtonBase` can then be applied to `ListItem`.\n   */\n  button: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The content of the component. If a `ListItemSecondaryAction` is used it must\n   * be the last child.\n   */\n  children: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node, function (props) {\n    var children = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].toArray(props.children); // React.Children.toArray(props.children).findLastIndex(isListItemSecondaryAction)\n\n    var secondaryActionIndex = -1;\n\n    for (var i = children.length - 1; i >= 0; i -= 1) {\n      var child = children[i];\n\n      if (Object(_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(child, ['ListItemSecondaryAction'])) {\n        secondaryActionIndex = i;\n        break;\n      }\n    } //  is ListItemSecondaryAction the last child of ListItem\n\n\n    if (secondaryActionIndex !== -1 && secondaryActionIndex !== children.length - 1) {\n      return new Error('Material-UI: You used an element after ListItemSecondaryAction. ' + 'For ListItem to detect that it has a secondary action ' + 'you must pass it as the last child to ListItem.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   * By default, it's a `li` when `button` is `false` and a `div` when `button` is `true`.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * The container component used when a `ListItemSecondaryAction` is the last child.\n   */\n  ContainerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * Props applied to the container component if used.\n   */\n  ContainerProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used.\n   */\n  dense: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the list item will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, a 1px light border is added to the bottom of the list item.\n   */\n  divider: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Use to apply selected styling.\n   */\n  selected: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiListItem'\n})(ListItem));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ListItem/ListItem.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/ListItem/index.js":
+/*!**************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/ListItem/index.js ***!
+  \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ListItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ListItem */ \"./jaas-client/node_modules/@material-ui/core/esm/ListItem/ListItem.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _ListItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/ListItem/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js ***!
+  \*********************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Popover__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Popover */ \"./jaas-client/node_modules/@material-ui/core/esm/Popover/index.js\");\n/* harmony import */ var _MenuList__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../MenuList */ \"./jaas-client/node_modules/@material-ui/core/esm/MenuList/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _utils_setRef__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/setRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../styles/useTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar RTL_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'right'\n};\nvar LTR_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'left'\n};\nvar styles = {\n  /* Styles applied to the `Paper` component. */\n  paper: {\n    // specZ: The maximum height of a simple menu should be one or more rows less than the view\n    // height. This ensures a tapable area outside of the simple menu with which to dismiss\n    // the menu.\n    maxHeight: 'calc(100% - 96px)',\n    // Add iOS momentum scrolling.\n    WebkitOverflowScrolling: 'touch'\n  },\n\n  /* Styles applied to the `List` component via `MenuList`. */\n  list: {\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0\n  }\n};\nvar Menu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Menu(props, ref) {\n  var _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,\n      children = props.children,\n      classes = props.classes,\n      _props$disableAutoFoc = props.disableAutoFocusItem,\n      disableAutoFocusItem = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$MenuListProps = props.MenuListProps,\n      MenuListProps = _props$MenuListProps === void 0 ? {} : _props$MenuListProps,\n      onClose = props.onClose,\n      onEntering = props.onEntering,\n      open = props.open,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      PopoverClasses = props.PopoverClasses,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? 'auto' : _props$transitionDura,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'selectedMenu' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"autoFocus\", \"children\", \"classes\", \"disableAutoFocusItem\", \"MenuListProps\", \"onClose\", \"onEntering\", \"open\", \"PaperProps\", \"PopoverClasses\", \"transitionDuration\", \"variant\"]);\n\n  var theme = Object(_styles_useTheme__WEBPACK_IMPORTED_MODULE_12__[\"default\"])();\n  var autoFocusItem = autoFocus && !disableAutoFocusItem && open;\n  var menuListActionsRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var contentAnchorRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n\n  var getContentAnchorEl = function getContentAnchorEl() {\n    return contentAnchorRef.current;\n  };\n\n  var handleEntering = function handleEntering(element, isAppearing) {\n    if (menuListActionsRef.current) {\n      menuListActionsRef.current.adjustStyleForScrollbar(element, theme);\n    }\n\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n  };\n\n  var handleListKeyDown = function handleListKeyDown(event) {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n\n      if (onClose) {\n        onClose(event, 'tabKeyDown');\n      }\n    }\n  };\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n\n\n  var activeItemIndex = -1; // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].map(children, function (child, index) {\n    if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"isValidElement\"](child)) {\n      return;\n    }\n\n    if (true) {\n      if (Object(react_is__WEBPACK_IMPORTED_MODULE_3__[\"isFragment\"])(child)) {\n        console.error([\"Material-UI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    if (!child.props.disabled) {\n      if (variant !== \"menu\" && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  var items = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].map(children, function (child, index) {\n    if (index === activeItemIndex) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](child, {\n        ref: function ref(instance) {\n          // #StrictMode ready\n          contentAnchorRef.current = react_dom__WEBPACK_IMPORTED_MODULE_10__[\"findDOMNode\"](instance);\n          Object(_utils_setRef__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(child.ref, instance);\n        }\n      });\n    }\n\n    return child;\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Popover__WEBPACK_IMPORTED_MODULE_8__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    getContentAnchorEl: getContentAnchorEl,\n    classes: PopoverClasses,\n    onClose: onClose,\n    onEntering: handleEntering,\n    anchorOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n    transformOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n    PaperProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, PaperProps, {\n      classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, PaperProps.classes, {\n        root: classes.paper\n      })\n    }),\n    open: open,\n    ref: ref,\n    transitionDuration: transitionDuration\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_MenuList__WEBPACK_IMPORTED_MODULE_9__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    onKeyDown: handleListKeyDown,\n    actions: menuListActionsRef,\n    autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),\n    autoFocusItem: autoFocusItem,\n    variant: variant\n  }, MenuListProps, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.list, MenuListProps.className)\n  }), items));\n});\n true ? Menu.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A HTML element, or a function that returns it.\n   * It's used to set the position of the menu.\n   */\n  anchorEl: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]),\n\n  /**\n   * If `true` (Default) will focus the `[role=\"menu\"]` if no focusable child is found. Disabled\n   * children are not focusable. If you set this prop to `false` focus will be placed\n   * on the parent modal container. This has severe accessibility implications\n   * and should only be considered if you manage focus otherwise.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Menu contents, normally `MenuItem`s.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * When opening the menu will not focus the active item but the `[role=\"menu\"]`\n   * unless `autoFocus` is also set to `false`. Not using the default means not\n   * following WAI-ARIA authoring practices. Please be considerate about possible\n   * accessibility implications.\n   */\n  disableAutoFocusItem: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Props applied to the [`MenuList`](/api/menu-list/) element.\n   */\n  MenuListProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`, `\"tabKeyDown\"`.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired before the Menu enters.\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the Menu has entered.\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the Menu is entering.\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired before the Menu exits.\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the Menu has exited.\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the Menu is exiting.\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * If `true`, the menu is visible.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired,\n\n  /**\n   * @ignore\n   */\n  PaperProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * `classes` prop applied to the [`Popover`](/api/popover/) element.\n   */\n  PopoverClasses: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * The length of the transition in `ms`, or 'auto'\n   */\n  transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['auto']), prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  })]),\n\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['menu', 'selectedMenu'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(styles, {\n  name: 'MuiMenu'\n})(Menu));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Menu/index.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Menu/index.js ***!
+  \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Menu */ \"./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Menu__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Menu/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/MenuItem/MenuItem.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/MenuItem/MenuItem.js ***!
+  \*****************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _ListItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ListItem */ \"./jaas-client/node_modules/@material-ui/core/esm/ListItem/index.js\");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.typography.body1, Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      minHeight: 48,\n      paddingTop: 6,\n      paddingBottom: 6,\n      boxSizing: 'border-box',\n      width: 'auto',\n      overflow: 'hidden',\n      whiteSpace: 'nowrap'\n    }, theme.breakpoints.up('sm'), {\n      minHeight: 'auto'\n    })),\n    // TODO v5: remove\n\n    /* Styles applied to the root element if `disableGutters={false}`. */\n    gutters: {},\n\n    /* Styles applied to the root element if `selected={true}`. */\n    selected: {},\n\n    /* Styles applied to the root element if dense. */\n    dense: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, theme.typography.body2, {\n      minHeight: 'auto'\n    })\n  };\n};\nvar MenuItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function MenuItem(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'li' : _props$component,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      ListItemClasses = props.ListItemClasses,\n      _props$role = props.role,\n      role = _props$role === void 0 ? 'menuitem' : _props$role,\n      selected = props.selected,\n      tabIndexProp = props.tabIndex,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"classes\", \"className\", \"component\", \"disableGutters\", \"ListItemClasses\", \"role\", \"selected\", \"tabIndex\"]);\n\n  var tabIndex;\n\n  if (!props.disabled) {\n    tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_ListItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n    button: true,\n    role: role,\n    tabIndex: tabIndex,\n    component: component,\n    selected: selected,\n    disableGutters: disableGutters,\n    classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n      dense: classes.dense\n    }, ListItemClasses),\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className, selected && classes.selected, !disableGutters && classes.gutters),\n    ref: ref\n  }, other));\n});\n true ? MenuItem.propTypes = {\n  /**\n   * Menu item contents.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used.\n   */\n  dense: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * `classes` prop applied to the [`ListItem`](/api/list-item/) element.\n   */\n  ListItemClasses: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  role: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * @ignore\n   */\n  selected: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiMenuItem'\n})(MenuItem));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/MenuItem/MenuItem.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/MenuItem/index.js":
+/*!**************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/MenuItem/index.js ***!
+  \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MenuItem */ \"./jaas-client/node_modules/@material-ui/core/esm/MenuItem/MenuItem.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _MenuItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/MenuItem/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/MenuList/MenuList.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/MenuList/MenuList.js ***!
+  \*****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _List__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../List */ \"./jaas-client/node_modules/@material-ui/core/esm/List/index.js\");\n/* harmony import */ var _utils_getScrollbarSize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/getScrollbarSize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\n\n\n\n\nfunction nextItem(list, item, disableListWrap) {\n  if (list === item) {\n    return list.firstChild;\n  }\n\n  if (item && item.nextElementSibling) {\n    return item.nextElementSibling;\n  }\n\n  return disableListWrap ? null : list.firstChild;\n}\n\nfunction previousItem(list, item, disableListWrap) {\n  if (list === item) {\n    return disableListWrap ? list.firstChild : list.lastChild;\n  }\n\n  if (item && item.previousElementSibling) {\n    return item.previousElementSibling;\n  }\n\n  return disableListWrap ? null : list.lastChild;\n}\n\nfunction textCriteriaMatches(nextFocus, textCriteria) {\n  if (textCriteria === undefined) {\n    return true;\n  }\n\n  var text = nextFocus.innerText;\n\n  if (text === undefined) {\n    // jsdom doesn't support innerText\n    text = nextFocus.textContent;\n  }\n\n  text = text.trim().toLowerCase();\n\n  if (text.length === 0) {\n    return false;\n  }\n\n  if (textCriteria.repeating) {\n    return text[0] === textCriteria.keys[0];\n  }\n\n  return text.indexOf(textCriteria.keys.join('')) === 0;\n}\n\nfunction moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, traversalFunction, textCriteria) {\n  var wrappedOnce = false;\n  var nextFocus = traversalFunction(list, currentFocus, currentFocus ? disableListWrap : false);\n\n  while (nextFocus) {\n    // Prevent infinite loop.\n    if (nextFocus === list.firstChild) {\n      if (wrappedOnce) {\n        return;\n      }\n\n      wrappedOnce = true;\n    } // Same logic as useAutocomplete.js\n\n\n    var nextFocusDisabled = disabledItemsFocusable ? false : nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n\n    if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus, textCriteria) || nextFocusDisabled) {\n      // Move to the next element.\n      nextFocus = traversalFunction(list, nextFocus, disableListWrap);\n    } else {\n      nextFocus.focus();\n      return;\n    }\n  }\n}\n\nvar useEnhancedEffect = typeof window === 'undefined' ? react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"] : react__WEBPACK_IMPORTED_MODULE_2__[\"useLayoutEffect\"];\n/**\n * A permanently displayed menu following https://www.w3.org/TR/wai-aria-practices/#menubutton.\n * It's exposed to help customization of the [`Menu`](/api/menu/) component. If you\n * use it separately you need to move focus into the component manually. Once\n * the focus is placed inside the component it is fully keyboard accessible.\n */\n\nvar MenuList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function MenuList(props, ref) {\n  var actions = props.actions,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$autoFocusItem = props.autoFocusItem,\n      autoFocusItem = _props$autoFocusItem === void 0 ? false : _props$autoFocusItem,\n      children = props.children,\n      className = props.className,\n      _props$disabledItemsF = props.disabledItemsFocusable,\n      disabledItemsFocusable = _props$disabledItemsF === void 0 ? false : _props$disabledItemsF,\n      _props$disableListWra = props.disableListWrap,\n      disableListWrap = _props$disableListWra === void 0 ? false : _props$disableListWra,\n      onKeyDown = props.onKeyDown,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'selectedMenu' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"actions\", \"autoFocus\", \"autoFocusItem\", \"children\", \"className\", \"disabledItemsFocusable\", \"disableListWrap\", \"onKeyDown\", \"variant\"]);\n\n  var listRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var textCriteriaRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"]({\n    keys: [],\n    repeating: true,\n    previousKeyMatched: true,\n    lastTime: null\n  });\n  useEnhancedEffect(function () {\n    if (autoFocus) {\n      listRef.current.focus();\n    }\n  }, [autoFocus]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useImperativeHandle\"](actions, function () {\n    return {\n      adjustStyleForScrollbar: function adjustStyleForScrollbar(containerElement, theme) {\n        // Let's ignore that piece of logic if users are already overriding the width\n        // of the menu.\n        var noExplicitWidth = !listRef.current.style.width;\n\n        if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth) {\n          var scrollbarSize = \"\".concat(Object(_utils_getScrollbarSize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(true), \"px\");\n          listRef.current.style[theme.direction === 'rtl' ? 'paddingLeft' : 'paddingRight'] = scrollbarSize;\n          listRef.current.style.width = \"calc(100% + \".concat(scrollbarSize, \")\");\n        }\n\n        return listRef.current;\n      }\n    };\n  }, []);\n\n  var handleKeyDown = function handleKeyDown(event) {\n    var list = listRef.current;\n    var key = event.key;\n    /**\n     * @type {Element} - will always be defined since we are in a keydown handler\n     * attached to an element. A keydown event is either dispatched to the activeElement\n     * or document.body or document.documentElement. Only the first case will\n     * trigger this specific handler.\n     */\n\n    var currentFocus = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(list).activeElement;\n\n    if (key === 'ArrowDown') {\n      // Prevent scroll of the page\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'ArrowUp') {\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key === 'Home') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'End') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key.length === 1) {\n      var criteria = textCriteriaRef.current;\n      var lowerKey = key.toLowerCase();\n      var currTime = performance.now();\n\n      if (criteria.keys.length > 0) {\n        // Reset\n        if (currTime - criteria.lastTime > 500) {\n          criteria.keys = [];\n          criteria.repeating = true;\n          criteria.previousKeyMatched = true;\n        } else if (criteria.repeating && lowerKey !== criteria.keys[0]) {\n          criteria.repeating = false;\n        }\n      }\n\n      criteria.lastTime = currTime;\n      criteria.keys.push(lowerKey);\n      var keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);\n\n      if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list, currentFocus, false, disabledItemsFocusable, nextItem, criteria))) {\n        event.preventDefault();\n      } else {\n        criteria.previousKeyMatched = false;\n      }\n    }\n\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  };\n\n  var handleOwnRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (instance) {\n    // #StrictMode ready\n    listRef.current = react_dom__WEBPACK_IMPORTED_MODULE_5__[\"findDOMNode\"](instance);\n  }, []);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(handleOwnRef, ref);\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n\n  var activeItemIndex = -1; // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n\n  react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].forEach(children, function (child, index) {\n    if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"isValidElement\"](child)) {\n      return;\n    }\n\n    if (true) {\n      if (Object(react_is__WEBPACK_IMPORTED_MODULE_3__[\"isFragment\"])(child)) {\n        console.error([\"Material-UI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    if (!child.props.disabled) {\n      if (variant === 'selectedMenu' && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  var items = react__WEBPACK_IMPORTED_MODULE_2__[\"Children\"].map(children, function (child, index) {\n    if (index === activeItemIndex) {\n      var newChildProps = {};\n\n      if (autoFocusItem) {\n        newChildProps.autoFocus = true;\n      }\n\n      if (child.props.tabIndex === undefined && variant === 'selectedMenu') {\n        newChildProps.tabIndex = 0;\n      }\n\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](child, newChildProps);\n    }\n\n    return child;\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_List__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    role: \"menu\",\n    ref: handleRef,\n    className: className,\n    onKeyDown: handleKeyDown,\n    tabIndex: autoFocus ? 0 : -1\n  }, other), items);\n});\n true ? MenuList.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, will focus the `[role=\"menu\"]` container and move into tab order.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, will focus the first menuitem if `variant=\"menu\"` or selected item\n   * if `variant=\"selectedMenu\"`.\n   */\n  autoFocusItem: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * MenuList contents, normally `MenuItem`s.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * If `true`, will allow focus on disabled items.\n   */\n  disabledItemsFocusable: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the menu items will not wrap focus.\n   */\n  disableListWrap: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['menu', 'selectedMenu'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (MenuList);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/MenuList/MenuList.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/MenuList/index.js":
+/*!**************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/MenuList/index.js ***!
+  \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _MenuList__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MenuList */ \"./jaas-client/node_modules/@material-ui/core/esm/MenuList/MenuList.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _MenuList__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/MenuList/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Modal/Modal.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Modal/Modal.js ***!
+  \***********************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _Portal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Portal */ \"./jaas-client/node_modules/@material-ui/core/esm/Portal/index.js\");\n/* harmony import */ var _utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/createChainedFunction */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/useEventCallback */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js\");\n/* harmony import */ var _styles_zIndex__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../styles/zIndex */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js\");\n/* harmony import */ var _ModalManager__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ModalManager */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js\");\n/* harmony import */ var _Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Unstable_TrapFocus */ \"./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/index.js\");\n/* harmony import */ var _SimpleBackdrop__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./SimpleBackdrop */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getContainer(container) {\n  container = typeof container === 'function' ? container() : container;\n  return react_dom__WEBPACK_IMPORTED_MODULE_3__[\"findDOMNode\"](container);\n}\n\nfunction getHasTransition(props) {\n  return props.children ? props.children.props.hasOwnProperty('in') : false;\n} // A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\n\n\nvar defaultManager = new _ModalManager__WEBPACK_IMPORTED_MODULE_13__[\"default\"]();\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'fixed',\n      zIndex: theme.zIndex.modal,\n      right: 0,\n      bottom: 0,\n      top: 0,\n      left: 0\n    },\n\n    /* Styles applied to the root element if the `Modal` has exited. */\n    hidden: {\n      visibility: 'hidden'\n    }\n  };\n};\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/api/dialog/)\n * - [Drawer](/api/drawer/)\n * - [Menu](/api/menu/)\n * - [Popover](/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\n\nvar Modal = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Modal(inProps, ref) {\n  var theme = Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_5__[\"useTheme\"])();\n  var props = Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_5__[\"getThemeProps\"])({\n    name: 'MuiModal',\n    props: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, inProps),\n    theme: theme\n  });\n\n  var _props$BackdropCompon = props.BackdropComponent,\n      BackdropComponent = _props$BackdropCompon === void 0 ? _SimpleBackdrop__WEBPACK_IMPORTED_MODULE_15__[\"default\"] : _props$BackdropCompon,\n      BackdropProps = props.BackdropProps,\n      children = props.children,\n      _props$closeAfterTran = props.closeAfterTransition,\n      closeAfterTransition = _props$closeAfterTran === void 0 ? false : _props$closeAfterTran,\n      container = props.container,\n      _props$disableAutoFoc = props.disableAutoFocus,\n      disableAutoFocus = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$disableBackdro = props.disableBackdropClick,\n      disableBackdropClick = _props$disableBackdro === void 0 ? false : _props$disableBackdro,\n      _props$disableEnforce = props.disableEnforceFocus,\n      disableEnforceFocus = _props$disableEnforce === void 0 ? false : _props$disableEnforce,\n      _props$disableEscapeK = props.disableEscapeKeyDown,\n      disableEscapeKeyDown = _props$disableEscapeK === void 0 ? false : _props$disableEscapeK,\n      _props$disablePortal = props.disablePortal,\n      disablePortal = _props$disablePortal === void 0 ? false : _props$disablePortal,\n      _props$disableRestore = props.disableRestoreFocus,\n      disableRestoreFocus = _props$disableRestore === void 0 ? false : _props$disableRestore,\n      _props$disableScrollL = props.disableScrollLock,\n      disableScrollLock = _props$disableScrollL === void 0 ? false : _props$disableScrollL,\n      _props$hideBackdrop = props.hideBackdrop,\n      hideBackdrop = _props$hideBackdrop === void 0 ? false : _props$hideBackdrop,\n      _props$keepMounted = props.keepMounted,\n      keepMounted = _props$keepMounted === void 0 ? false : _props$keepMounted,\n      _props$manager = props.manager,\n      manager = _props$manager === void 0 ? defaultManager : _props$manager,\n      onBackdropClick = props.onBackdropClick,\n      onClose = props.onClose,\n      onEscapeKeyDown = props.onEscapeKeyDown,\n      onRendered = props.onRendered,\n      open = props.open,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"BackdropComponent\", \"BackdropProps\", \"children\", \"closeAfterTransition\", \"container\", \"disableAutoFocus\", \"disableBackdropClick\", \"disableEnforceFocus\", \"disableEscapeKeyDown\", \"disablePortal\", \"disableRestoreFocus\", \"disableScrollLock\", \"hideBackdrop\", \"keepMounted\", \"manager\", \"onBackdropClick\", \"onClose\", \"onEscapeKeyDown\", \"onRendered\", \"open\"]);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"](true),\n      exited = _React$useState[0],\n      setExited = _React$useState[1];\n\n  var modal = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"]({});\n  var mountNodeRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var modalRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(modalRef, ref);\n  var hasTransition = getHasTransition(props);\n\n  var getDoc = function getDoc() {\n    return Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(mountNodeRef.current);\n  };\n\n  var getModal = function getModal() {\n    modal.current.modalRef = modalRef.current;\n    modal.current.mountNode = mountNodeRef.current;\n    return modal.current;\n  };\n\n  var handleMounted = function handleMounted() {\n    manager.mount(getModal(), {\n      disableScrollLock: disableScrollLock\n    }); // Fix a bug on Chrome where the scroll isn't initially 0.\n\n    modalRef.current.scrollTop = 0;\n  };\n\n  var handleOpen = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(function () {\n    var resolvedContainer = getContainer(container) || getDoc().body;\n    manager.add(getModal(), resolvedContainer); // The element was already mounted.\n\n    if (modalRef.current) {\n      handleMounted();\n    }\n  });\n  var isTopModal = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    return manager.isTopModal(getModal());\n  }, [manager]);\n  var handlePortalRef = Object(_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(function (node) {\n    mountNodeRef.current = node;\n\n    if (!node) {\n      return;\n    }\n\n    if (onRendered) {\n      onRendered();\n    }\n\n    if (open && isTopModal()) {\n      handleMounted();\n    } else {\n      Object(_ModalManager__WEBPACK_IMPORTED_MODULE_13__[\"ariaHidden\"])(modalRef.current, true);\n    }\n  });\n  var handleClose = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    manager.remove(getModal());\n  }, [manager]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    return function () {\n      handleClose();\n    };\n  }, [handleClose]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (open) {\n      handleOpen();\n    } else if (!hasTransition || !closeAfterTransition) {\n      handleClose();\n    }\n  }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);\n\n  if (!keepMounted && !open && (!hasTransition || exited)) {\n    return null;\n  }\n\n  var handleEnter = function handleEnter() {\n    setExited(false);\n  };\n\n  var handleExited = function handleExited() {\n    setExited(true);\n\n    if (closeAfterTransition) {\n      handleClose();\n    }\n  };\n\n  var handleBackdropClick = function handleBackdropClick(event) {\n    if (event.target !== event.currentTarget) {\n      return;\n    }\n\n    if (onBackdropClick) {\n      onBackdropClick(event);\n    }\n\n    if (!disableBackdropClick && onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    // The handler doesn't take event.defaultPrevented into account:\n    //\n    // event.preventDefault() is meant to stop default behaviours like\n    // clicking a checkbox to check it, hitting a button to submit a form,\n    // and hitting left arrow to move the cursor in a text input etc.\n    // Only special HTML elements have these default behaviors.\n    if (event.key !== 'Escape' || !isTopModal()) {\n      return;\n    }\n\n    if (onEscapeKeyDown) {\n      onEscapeKeyDown(event);\n    }\n\n    if (!disableEscapeKeyDown) {\n      // Swallow the event, in case someone is listening for the escape key on the body.\n      event.stopPropagation();\n\n      if (onClose) {\n        onClose(event, 'escapeKeyDown');\n      }\n    }\n  };\n\n  var inlineStyle = styles(theme || {\n    zIndex: _styles_zIndex__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n  });\n  var childProps = {};\n\n  if (children.props.tabIndex === undefined) {\n    childProps.tabIndex = children.props.tabIndex || '-1';\n  } // It's a Transition like component\n\n\n  if (hasTransition) {\n    childProps.onEnter = Object(_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(handleEnter, children.props.onEnter);\n    childProps.onExited = Object(_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(handleExited, children.props.onExited);\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Portal__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n    ref: handlePortalRef,\n    container: container,\n    disablePortal: disablePortal\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    ref: handleRef,\n    onKeyDown: handleKeyDown,\n    role: \"presentation\"\n  }, other, {\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, inlineStyle.root, !open && exited ? inlineStyle.hidden : {}, other.style)\n  }), hideBackdrop ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](BackdropComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    open: open,\n    onClick: handleBackdropClick\n  }, BackdropProps)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n    disableEnforceFocus: disableEnforceFocus,\n    disableAutoFocus: disableAutoFocus,\n    disableRestoreFocus: disableRestoreFocus,\n    getDoc: getDoc,\n    isEnabled: isTopModal,\n    open: open\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](children, childProps))));\n});\n true ? Modal.propTypes = {\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   */\n  BackdropComponent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType,\n\n  /**\n   * Props applied to the [`Backdrop`](/api/backdrop/) element.\n   */\n  BackdropProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * A single child content element.\n   */\n  children: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"elementAcceptingRef\"].isRequired,\n\n  /**\n   * When set to true the Modal waits until a nested Transition is completed before closing.\n   */\n  closeAfterTransition: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * A HTML element, component instance, or function that returns either.\n   * The `container` will have the portal children appended to it.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.instanceOf(react__WEBPACK_IMPORTED_MODULE_2__[\"Component\"]), prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]),\n\n  /**\n   * If `true`, the modal will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableAutoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, clicking the backdrop will not fire `onClose`.\n   */\n  disableBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the modal will not prevent focus from leaving the modal while open.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableEnforceFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, hitting escape will not fire `onClose`.\n   */\n  disableEscapeKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Disable the portal behavior.\n   * The children stay within it's parent DOM hierarchy.\n   */\n  disablePortal: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the modal will not restore focus to previously focused element once\n   * modal is hidden.\n   */\n  disableRestoreFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Disable the scroll lock behavior.\n   */\n  disableScrollLock: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the backdrop is not rendered.\n   */\n  hideBackdrop: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Modal.\n   */\n  keepMounted: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  manager: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Callback fired when the backdrop is clicked.\n   */\n  onBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * The `reason` parameter can optionally be used to control the response to `onClose`.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the escape key is pressed,\n   * `disableEscapeKeyDown` is false and the modal is in focus.\n   */\n  onEscapeKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired once the children has been mounted into the `container`.\n   * It signals that the `open={true}` prop took effect.\n   *\n   * This prop will be deprecated and removed in v5, the ref can be used instead.\n   */\n  onRendered: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * If `true`, the modal is open.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Modal);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Modal/Modal.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js ***!
+  \******************************************************************************/
+/*! exports provided: ariaHidden, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ariaHidden\", function() { return ariaHidden; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ModalManager; });\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _utils_getScrollbarSize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getScrollbarSize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _utils_ownerWindow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/ownerWindow */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js\");\n\n\n\n\n\n // Is a vertical scrollbar displayed?\n\nfunction isOverflowing(container) {\n  var doc = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(container);\n\n  if (doc.body === container) {\n    return Object(_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(doc).innerWidth > doc.documentElement.clientWidth;\n  }\n\n  return container.scrollHeight > container.clientHeight;\n}\n\nfunction ariaHidden(node, show) {\n  if (show) {\n    node.setAttribute('aria-hidden', 'true');\n  } else {\n    node.removeAttribute('aria-hidden');\n  }\n}\n\nfunction getPaddingRight(node) {\n  return parseInt(window.getComputedStyle(node)['padding-right'], 10) || 0;\n}\n\nfunction ariaHiddenSiblings(container, mountNode, currentNode) {\n  var nodesToExclude = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n  var show = arguments.length > 4 ? arguments[4] : undefined;\n  var blacklist = [mountNode, currentNode].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nodesToExclude));\n  var blacklistTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE'];\n  [].forEach.call(container.children, function (node) {\n    if (node.nodeType === 1 && blacklist.indexOf(node) === -1 && blacklistTagNames.indexOf(node.tagName) === -1) {\n      ariaHidden(node, show);\n    }\n  });\n}\n\nfunction findIndexOf(containerInfo, callback) {\n  var idx = -1;\n  containerInfo.some(function (item, index) {\n    if (callback(item)) {\n      idx = index;\n      return true;\n    }\n\n    return false;\n  });\n  return idx;\n}\n\nfunction handleContainer(containerInfo, props) {\n  var restoreStyle = [];\n  var restorePaddings = [];\n  var container = containerInfo.container;\n  var fixedNodes;\n\n  if (!props.disableScrollLock) {\n    if (isOverflowing(container)) {\n      // Compute the size before applying overflow hidden to avoid any scroll jumps.\n      var scrollbarSize = Object(_utils_getScrollbarSize__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n      restoreStyle.push({\n        value: container.style.paddingRight,\n        key: 'padding-right',\n        el: container\n      }); // Use computed style, here to get the real padding to add our scrollbar width.\n\n      container.style['padding-right'] = \"\".concat(getPaddingRight(container) + scrollbarSize, \"px\"); // .mui-fixed is a global helper.\n\n      fixedNodes = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(container).querySelectorAll('.mui-fixed');\n      [].forEach.call(fixedNodes, function (node) {\n        restorePaddings.push(node.style.paddingRight);\n        node.style.paddingRight = \"\".concat(getPaddingRight(node) + scrollbarSize, \"px\");\n      });\n    } // Improve Gatsby support\n    // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n\n\n    var parent = container.parentElement;\n    var scrollContainer = parent.nodeName === 'HTML' && window.getComputedStyle(parent)['overflow-y'] === 'scroll' ? parent : container; // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n    // screensize shrink.\n\n    restoreStyle.push({\n      value: scrollContainer.style.overflow,\n      key: 'overflow',\n      el: scrollContainer\n    });\n    scrollContainer.style.overflow = 'hidden';\n  }\n\n  var restore = function restore() {\n    if (fixedNodes) {\n      [].forEach.call(fixedNodes, function (node, i) {\n        if (restorePaddings[i]) {\n          node.style.paddingRight = restorePaddings[i];\n        } else {\n          node.style.removeProperty('padding-right');\n        }\n      });\n    }\n\n    restoreStyle.forEach(function (_ref) {\n      var value = _ref.value,\n          el = _ref.el,\n          key = _ref.key;\n\n      if (value) {\n        el.style.setProperty(key, value);\n      } else {\n        el.style.removeProperty(key);\n      }\n    });\n  };\n\n  return restore;\n}\n\nfunction getHiddenSiblings(container) {\n  var hiddenSiblings = [];\n  [].forEach.call(container.children, function (node) {\n    if (node.getAttribute && node.getAttribute('aria-hidden') === 'true') {\n      hiddenSiblings.push(node);\n    }\n  });\n  return hiddenSiblings;\n}\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\n\n\nvar ModalManager = /*#__PURE__*/function () {\n  function ModalManager() {\n    Object(_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, ModalManager);\n\n    // this.modals[modalIndex] = modal\n    this.modals = []; // this.containers[containerIndex] = {\n    //   modals: [],\n    //   container,\n    //   restore: null,\n    // }\n\n    this.containers = [];\n  }\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(ModalManager, [{\n    key: \"add\",\n    value: function add(modal, container) {\n      var modalIndex = this.modals.indexOf(modal);\n\n      if (modalIndex !== -1) {\n        return modalIndex;\n      }\n\n      modalIndex = this.modals.length;\n      this.modals.push(modal); // If the modal we are adding is already in the DOM.\n\n      if (modal.modalRef) {\n        ariaHidden(modal.modalRef, false);\n      }\n\n      var hiddenSiblingNodes = getHiddenSiblings(container);\n      ariaHiddenSiblings(container, modal.mountNode, modal.modalRef, hiddenSiblingNodes, true);\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.container === container;\n      });\n\n      if (containerIndex !== -1) {\n        this.containers[containerIndex].modals.push(modal);\n        return modalIndex;\n      }\n\n      this.containers.push({\n        modals: [modal],\n        container: container,\n        restore: null,\n        hiddenSiblingNodes: hiddenSiblingNodes\n      });\n      return modalIndex;\n    }\n  }, {\n    key: \"mount\",\n    value: function mount(modal, props) {\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.modals.indexOf(modal) !== -1;\n      });\n      var containerInfo = this.containers[containerIndex];\n\n      if (!containerInfo.restore) {\n        containerInfo.restore = handleContainer(containerInfo, props);\n      }\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(modal) {\n      var modalIndex = this.modals.indexOf(modal);\n\n      if (modalIndex === -1) {\n        return modalIndex;\n      }\n\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.modals.indexOf(modal) !== -1;\n      });\n      var containerInfo = this.containers[containerIndex];\n      containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);\n      this.modals.splice(modalIndex, 1); // If that was the last modal in a container, clean up the container.\n\n      if (containerInfo.modals.length === 0) {\n        // The modal might be closed before it had the chance to be mounted in the DOM.\n        if (containerInfo.restore) {\n          containerInfo.restore();\n        }\n\n        if (modal.modalRef) {\n          // In case the modal wasn't in the DOM yet.\n          ariaHidden(modal.modalRef, true);\n        }\n\n        ariaHiddenSiblings(containerInfo.container, modal.mountNode, modal.modalRef, containerInfo.hiddenSiblingNodes, false);\n        this.containers.splice(containerIndex, 1);\n      } else {\n        // Otherwise make sure the next top modal is visible to a screen reader.\n        var nextTop = containerInfo.modals[containerInfo.modals.length - 1]; // as soon as a modal is adding its modalRef is undefined. it can't set\n        // aria-hidden because the dom element doesn't exist either\n        // when modal was unmounted before modalRef gets null\n\n        if (nextTop.modalRef) {\n          ariaHidden(nextTop.modalRef, false);\n        }\n      }\n\n      return modalIndex;\n    }\n  }, {\n    key: \"isTopModal\",\n    value: function isTopModal(modal) {\n      return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n    }\n  }]);\n\n  return ModalManager;\n}();\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js ***!
+  \********************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {\n    zIndex: -1,\n    position: 'fixed',\n    right: 0,\n    bottom: 0,\n    top: 0,\n    left: 0,\n    backgroundColor: 'rgba(0, 0, 0, 0.5)',\n    WebkitTapHighlightColor: 'transparent'\n  },\n\n  /* Styles applied to the root element if `invisible={true}`. */\n  invisible: {\n    backgroundColor: 'transparent'\n  }\n};\n/**\n * @ignore - internal component.\n */\n\nvar SimpleBackdrop = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function SimpleBackdrop(props, ref) {\n  var _props$invisible = props.invisible,\n      invisible = _props$invisible === void 0 ? false : _props$invisible,\n      open = props.open,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"invisible\", \"open\"]);\n\n  return open ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    \"aria-hidden\": true,\n    ref: ref\n  }, other, {\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, styles.root, invisible ? styles.invisible : {}, other.style)\n  })) : null;\n});\n true ? SimpleBackdrop.propTypes = {\n  /**\n   * If `true`, the backdrop is invisible.\n   * It can be used when rendering a popover or a custom select component.\n   */\n  invisible: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the backdrop is open.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (SimpleBackdrop);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js ***!
+  \***********************************************************************/
+/*! exports provided: default, ModalManager */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Modal */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/Modal.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Modal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _ModalManager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ModalManager */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/ModalManager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ModalManager\", function() { return _ModalManager__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js":
+/*!*************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js ***!
+  \*************************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _NativeSelectInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./NativeSelectInput */ \"./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _internal_svg_icons_ArrowDropDown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../internal/svg-icons/ArrowDropDown */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js\");\n/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Input */ \"./jaas-client/node_modules/@material-ui/core/esm/Input/index.js\");\n\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the select component `root` class. */\n    root: {},\n\n    /* Styles applied to the select component `select` class. */\n    select: {\n      '-moz-appearance': 'none',\n      // Reset\n      '-webkit-appearance': 'none',\n      // Reset\n      // When interacting quickly, the text can end up selected.\n      // Native select can't be selected either.\n      userSelect: 'none',\n      borderRadius: 0,\n      // Reset\n      minWidth: 16,\n      // So it doesn't collapse.\n      cursor: 'pointer',\n      '&:focus': {\n        // Show that it's not an text input\n        backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.05)' : 'rgba(255, 255, 255, 0.05)',\n        borderRadius: 0 // Reset Chrome style\n\n      },\n      // Remove IE 11 arrow\n      '&::-ms-expand': {\n        display: 'none'\n      },\n      '&$disabled': {\n        cursor: 'default'\n      },\n      '&[multiple]': {\n        height: 'auto'\n      },\n      '&:not([multiple]) option, &:not([multiple]) optgroup': {\n        backgroundColor: theme.palette.background.paper\n      },\n      '&&': {\n        paddingRight: 24\n      }\n    },\n\n    /* Styles applied to the select component if `variant=\"filled\"`. */\n    filled: {\n      '&&': {\n        paddingRight: 32\n      }\n    },\n\n    /* Styles applied to the select component if `variant=\"outlined\"`. */\n    outlined: {\n      borderRadius: theme.shape.borderRadius,\n      '&&': {\n        paddingRight: 32\n      }\n    },\n\n    /* Styles applied to the select component `selectMenu` class. */\n    selectMenu: {\n      height: 'auto',\n      // Resets for multpile select with chips\n      minHeight: '1.1876em',\n      // Required for select\\text-field height consistency\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden'\n    },\n\n    /* Pseudo-class applied to the select component `disabled` class. */\n    disabled: {},\n\n    /* Styles applied to the icon component. */\n    icon: {\n      // We use a position absolute over a flexbox in order to forward the pointer events\n      // to the input and to support wrapping tags..\n      position: 'absolute',\n      right: 0,\n      top: 'calc(50% - 12px)',\n      // Center vertically\n      pointerEvents: 'none',\n      // Don't block pointer events on the select under the icon.\n      color: theme.palette.action.active,\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the icon component if the popup is open. */\n    iconOpen: {\n      transform: 'rotate(180deg)'\n    },\n\n    /* Styles applied to the icon component if `variant=\"filled\"`. */\n    iconFilled: {\n      right: 7\n    },\n\n    /* Styles applied to the icon component if `variant=\"outlined\"`. */\n    iconOutlined: {\n      right: 7\n    },\n\n    /* Styles applied to the underlying native input component. */\n    nativeInput: {\n      bottom: 0,\n      left: 0,\n      position: 'absolute',\n      opacity: 0,\n      pointerEvents: 'none',\n      width: '100%'\n    }\n  };\n};\nvar defaultInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Input__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null);\n/**\n * An alternative to `<Select native />` with a much smaller bundle size footprint.\n */\n\nvar NativeSelect = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function NativeSelect(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? _internal_svg_icons_ArrowDropDown__WEBPACK_IMPORTED_MODULE_8__[\"default\"] : _props$IconComponent,\n      _props$input = props.input,\n      input = _props$input === void 0 ? defaultInput : _props$input,\n      inputProps = props.inputProps,\n      variant = props.variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"IconComponent\", \"input\", \"inputProps\", \"variant\"]);\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant']\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](input, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    // Most of the logic is implemented in `NativeSelectInput`.\n    // The `Select` component is a simple API wrapper to expose something better to play with.\n    inputComponent: _NativeSelectInput__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n    inputProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      children: children,\n      classes: classes,\n      IconComponent: IconComponent,\n      variant: fcs.variant,\n      type: undefined\n    }, inputProps, input ? input.props.inputProps : {}),\n    ref: ref\n  }, other));\n});\n true ? NativeSelect.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element,\n\n  /**\n   * Attributes applied to the `select` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The input value. The DOM API casts this to a string.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\nNativeSelect.muiName = 'Select';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiNativeSelect'\n})(NativeSelect));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js":
+/*!******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js ***!
+  \******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n/**\n * @ignore - internal component.\n */\n\nvar NativeSelectInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function NativeSelectInput(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      disabled = props.disabled,\n      IconComponent = props.IconComponent,\n      inputRef = props.inputRef,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"className\", \"disabled\", \"IconComponent\", \"inputRef\", \"variant\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"select\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, // TODO v5: merge root and select\n    classes.select, classes[variant], className, disabled && classes.disabled),\n    disabled: disabled,\n    ref: inputRef || ref\n  }, other)), props.multiple ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](IconComponent, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.icon, classes[\"icon\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(variant))], disabled && classes.disabled)\n  }));\n});\n true ? NativeSelectInput.propTypes = {\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * The CSS class name of the select element.\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the select will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType.isRequired,\n\n  /**\n   * Use that prop to pass a ref to the native select element.\n   * @deprecated\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * @ignore\n   */\n  multiple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The input value.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['standard', 'outlined', 'filled'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (NativeSelectInput);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js":
+/*!****************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js ***!
+  \****************************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/useTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'absolute',\n      bottom: 0,\n      right: 0,\n      top: -5,\n      left: 0,\n      margin: 0,\n      padding: '0 8px',\n      pointerEvents: 'none',\n      borderRadius: 'inherit',\n      borderStyle: 'solid',\n      borderWidth: 1,\n      overflow: 'hidden'\n    },\n\n    /* Styles applied to the legend element when `labelWidth` is provided. */\n    legend: {\n      textAlign: 'left',\n      padding: 0,\n      lineHeight: '11px',\n      // sync with `height` in `legend` styles\n      transition: theme.transitions.create('width', {\n        duration: 150,\n        easing: theme.transitions.easing.easeOut\n      })\n    },\n\n    /* Styles applied to the legend element. */\n    legendLabelled: {\n      display: 'block',\n      width: 'auto',\n      textAlign: 'left',\n      padding: 0,\n      height: 11,\n      // sync with `lineHeight` in `legend` styles\n      fontSize: '0.75em',\n      visibility: 'hidden',\n      maxWidth: 0.01,\n      transition: theme.transitions.create('max-width', {\n        duration: 50,\n        easing: theme.transitions.easing.easeOut\n      }),\n      '& > span': {\n        paddingLeft: 5,\n        paddingRight: 5,\n        display: 'inline-block'\n      }\n    },\n\n    /* Styles applied to the legend element is notched. */\n    legendNotched: {\n      maxWidth: 1000,\n      transition: theme.transitions.create('max-width', {\n        duration: 100,\n        easing: theme.transitions.easing.easeOut,\n        delay: 50\n      })\n    }\n  };\n};\n/**\n * @ignore - internal component.\n */\n\nvar NotchedOutline = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function NotchedOutline(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      label = props.label,\n      labelWidthProp = props.labelWidth,\n      notched = props.notched,\n      style = props.style,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"label\", \"labelWidth\", \"notched\", \"style\"]);\n\n  var theme = Object(_styles_useTheme__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n  var align = theme.direction === 'rtl' ? 'right' : 'left';\n\n  if (label !== undefined) {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"fieldset\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      \"aria-hidden\": true,\n      className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className),\n      ref: ref,\n      style: style\n    }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"legend\", {\n      className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.legendLabelled, notched && classes.legendNotched)\n    }, label ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"span\", null, label) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"span\", {\n      dangerouslySetInnerHTML: {\n        __html: '&#8203;'\n      }\n    })));\n  }\n\n  var labelWidth = labelWidthProp > 0 ? labelWidthProp * 0.75 + 8 : 0.01;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"fieldset\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    \"aria-hidden\": true,\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, \"padding\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(align)), 8), style),\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className),\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"legend\", {\n    className: classes.legend,\n    style: {\n      // IE 11: fieldset with legend does not render\n      // a border radius. This maintains consistency\n      // by always having a legend rendered\n      width: notched ? labelWidth : 0.01\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  })));\n});\n true ? NotchedOutline.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * The label.\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * The width of the label.\n   */\n  labelWidth: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number.isRequired,\n\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired,\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'PrivateNotchedOutline'\n})(NotchedOutline));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js":
+/*!***************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js ***!
+  \***************************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _InputBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../InputBase */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/index.js\");\n/* harmony import */ var _NotchedOutline__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./NotchedOutline */ \"./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var borderColor = theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      borderRadius: theme.shape.borderRadius,\n      '&:hover $notchedOutline': {\n        borderColor: theme.palette.text.primary\n      },\n      // Reset on touch devices, it doesn't add specificity\n      '@media (hover: none)': {\n        '&:hover $notchedOutline': {\n          borderColor: borderColor\n        }\n      },\n      '&$focused $notchedOutline': {\n        borderColor: theme.palette.primary.main,\n        borderWidth: 2\n      },\n      '&$error $notchedOutline': {\n        borderColor: theme.palette.error.main\n      },\n      '&$disabled $notchedOutline': {\n        borderColor: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {\n      '&$focused $notchedOutline': {\n        borderColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {\n      paddingLeft: 14\n    },\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {\n      paddingRight: 14\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: '18.5px 14px',\n      '&$marginDense': {\n        paddingTop: 10.5,\n        paddingBottom: 10.5\n      }\n    },\n\n    /* Styles applied to the `NotchedOutline` element. */\n    notchedOutline: {\n      borderColor: borderColor\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      padding: '18.5px 14px',\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: theme.palette.type === 'light' ? null : '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: theme.palette.type === 'light' ? null : '#fff',\n        caretColor: theme.palette.type === 'light' ? null : '#fff',\n        borderRadius: 'inherit'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 10.5,\n      paddingBottom: 10.5\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {\n      paddingLeft: 0\n    },\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {\n      paddingRight: 0\n    }\n  };\n};\nvar OutlinedInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function OutlinedInput(props, ref) {\n  var classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      label = props.label,\n      _props$labelWidth = props.labelWidth,\n      labelWidth = _props$labelWidth === void 0 ? 0 : _props$labelWidth,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      notched = props.notched,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"fullWidth\", \"inputComponent\", \"label\", \"labelWidth\", \"multiline\", \"notched\", \"type\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_InputBase__WEBPACK_IMPORTED_MODULE_6__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    renderSuffix: function renderSuffix(state) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_NotchedOutline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n        className: classes.notchedOutline,\n        label: label,\n        labelWidth: labelWidth,\n        notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused)\n      });\n    },\n    classes: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, classes, {\n      root: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, classes.underline),\n      notchedOutline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\n true ? OutlinedInput.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * The label of the input. It is only used for layout. The actual labelling\n   * is handled by `InputLabel`. If specified `labelWidth` is ignored.\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * The width of the label. Is ignored if `label` is provided. Prefer `label`\n   * if the input label appears with a strike through.\n   */\n  labelWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any\n} : undefined;\nOutlinedInput.muiName = 'Input';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(styles, {\n  name: 'MuiOutlinedInput'\n})(OutlinedInput));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _OutlinedInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OutlinedInput */ \"./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _OutlinedInput__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Paper/Paper.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Paper/Paper.js ***!
+  \***********************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  var elevations = {};\n  theme.shadows.forEach(function (shadow, index) {\n    elevations[\"elevation\".concat(index)] = {\n      boxShadow: shadow\n    };\n  });\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    /* Styles applied to the root element. */\n    root: {\n      backgroundColor: theme.palette.background.paper,\n      color: theme.palette.text.primary,\n      transition: theme.transitions.create('box-shadow')\n    },\n\n    /* Styles applied to the root element if `square={false}`. */\n    rounded: {\n      borderRadius: theme.shape.borderRadius\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      border: \"1px solid \".concat(theme.palette.divider)\n    }\n  }, elevations);\n};\nvar Paper = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Paper(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$square = props.square,\n      square = _props$square === void 0 ? false : _props$square,\n      _props$elevation = props.elevation,\n      elevation = _props$elevation === void 0 ? 1 : _props$elevation,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'elevation' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, [\"classes\", \"className\", \"component\", \"square\", \"elevation\", \"variant\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, variant === 'outlined' ? classes.outlined : classes[\"elevation\".concat(elevation)], !square && classes.rounded),\n    ref: ref\n  }, other));\n});\n true ? Paper.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * Shadow depth, corresponds to `dp` in the spec.\n   * It accepts values between 0 and 24 inclusive.\n   */\n  elevation: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, function (props) {\n    var classes = props.classes,\n        elevation = props.elevation; // in case `withStyles` fails to inject we don't need this warning\n\n    if (classes === undefined) {\n      return null;\n    }\n\n    if (elevation != null && classes[\"elevation\".concat(elevation)] === undefined) {\n      return new Error(\"Material-UI: This elevation `\".concat(elevation, \"` is not implemented.\"));\n    }\n\n    return null;\n  }),\n\n  /**\n   * If `true`, rounded corners are disabled.\n   */\n  square: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['elevation', 'outlined'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(styles, {\n  name: 'MuiPaper'\n})(Paper));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Paper/Paper.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js ***!
+  \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Paper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Paper */ \"./jaas-client/node_modules/@material-ui/core/esm/Paper/Paper.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Paper__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Popover/Popover.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Popover/Popover.js ***!
+  \***************************************************************************/
+/*! exports provided: getOffsetTop, getOffsetLeft, styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOffsetTop\", function() { return getOffsetTop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOffsetLeft\", function() { return getOffsetLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_debounce__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/debounce */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _utils_ownerWindow__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/ownerWindow */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js\");\n/* harmony import */ var _utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/createChainedFunction */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Modal */ \"./jaas-client/node_modules/@material-ui/core/esm/Modal/index.js\");\n/* harmony import */ var _Grow__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../Grow */ \"./jaas-client/node_modules/@material-ui/core/esm/Grow/index.js\");\n/* harmony import */ var _Paper__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Paper */ \"./jaas-client/node_modules/@material-ui/core/esm/Paper/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getOffsetTop(rect, vertical) {\n  var offset = 0;\n\n  if (typeof vertical === 'number') {\n    offset = vertical;\n  } else if (vertical === 'center') {\n    offset = rect.height / 2;\n  } else if (vertical === 'bottom') {\n    offset = rect.height;\n  }\n\n  return offset;\n}\nfunction getOffsetLeft(rect, horizontal) {\n  var offset = 0;\n\n  if (typeof horizontal === 'number') {\n    offset = horizontal;\n  } else if (horizontal === 'center') {\n    offset = rect.width / 2;\n  } else if (horizontal === 'right') {\n    offset = rect.width;\n  }\n\n  return offset;\n}\n\nfunction getTransformOriginValue(transformOrigin) {\n  return [transformOrigin.horizontal, transformOrigin.vertical].map(function (n) {\n    return typeof n === 'number' ? \"\".concat(n, \"px\") : n;\n  }).join(' ');\n} // Sum the scrollTop between two elements.\n\n\nfunction getScrollParent(parent, child) {\n  var element = child;\n  var scrollTop = 0;\n\n  while (element && element !== parent) {\n    element = element.parentElement;\n    scrollTop += element.scrollTop;\n  }\n\n  return scrollTop;\n}\n\nfunction getAnchorEl(anchorEl) {\n  return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\n\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {},\n\n  /* Styles applied to the `Paper` component. */\n  paper: {\n    position: 'absolute',\n    overflowY: 'auto',\n    overflowX: 'hidden',\n    // So we see the popover when it's empty.\n    // It's most likely on issue on userland.\n    minWidth: 16,\n    minHeight: 16,\n    maxWidth: 'calc(100% - 32px)',\n    maxHeight: 'calc(100% - 32px)',\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0\n  }\n};\nvar Popover = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Popover(props, ref) {\n  var action = props.action,\n      anchorEl = props.anchorEl,\n      _props$anchorOrigin = props.anchorOrigin,\n      anchorOrigin = _props$anchorOrigin === void 0 ? {\n    vertical: 'top',\n    horizontal: 'left'\n  } : _props$anchorOrigin,\n      anchorPosition = props.anchorPosition,\n      _props$anchorReferenc = props.anchorReference,\n      anchorReference = _props$anchorReferenc === void 0 ? 'anchorEl' : _props$anchorReferenc,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      containerProp = props.container,\n      _props$elevation = props.elevation,\n      elevation = _props$elevation === void 0 ? 8 : _props$elevation,\n      getContentAnchorEl = props.getContentAnchorEl,\n      _props$marginThreshol = props.marginThreshold,\n      marginThreshold = _props$marginThreshol === void 0 ? 16 : _props$marginThreshol,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      open = props.open,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      _props$transformOrigi = props.transformOrigin,\n      transformOrigin = _props$transformOrigi === void 0 ? {\n    vertical: 'top',\n    horizontal: 'left'\n  } : _props$transformOrigi,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? _Grow__WEBPACK_IMPORTED_MODULE_13__[\"default\"] : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDurationProp = _props$transitionDura === void 0 ? 'auto' : _props$transitionDura,\n      _props$TransitionProp = props.TransitionProps,\n      TransitionProps = _props$TransitionProp === void 0 ? {} : _props$TransitionProp,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"action\", \"anchorEl\", \"anchorOrigin\", \"anchorPosition\", \"anchorReference\", \"children\", \"classes\", \"className\", \"container\", \"elevation\", \"getContentAnchorEl\", \"marginThreshold\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"open\", \"PaperProps\", \"transformOrigin\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"]);\n\n  var paperRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](); // Returns the top/left offset of the position\n  // to attach to on the anchor element (or body if none is provided)\n\n  var getAnchorOffset = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (contentAnchorOffset) {\n    if (anchorReference === 'anchorPosition') {\n      if (true) {\n        if (!anchorPosition) {\n          console.error('Material-UI: You need to provide a `anchorPosition` prop when using ' + '<Popover anchorReference=\"anchorPosition\" />.');\n        }\n      }\n\n      return anchorPosition;\n    }\n\n    var resolvedAnchorEl = getAnchorEl(anchorEl); // If an anchor element wasn't provided, just use the parent body element of this Popover\n\n    var anchorElement = resolvedAnchorEl && resolvedAnchorEl.nodeType === 1 ? resolvedAnchorEl : Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(paperRef.current).body;\n    var anchorRect = anchorElement.getBoundingClientRect();\n\n    if (true) {\n      var box = anchorElement.getBoundingClientRect();\n\n      if ( true && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n        console.warn(['Material-UI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n      }\n    }\n\n    var anchorVertical = contentAnchorOffset === 0 ? anchorOrigin.vertical : 'center';\n    return {\n      top: anchorRect.top + getOffsetTop(anchorRect, anchorVertical),\n      left: anchorRect.left + getOffsetLeft(anchorRect, anchorOrigin.horizontal)\n    };\n  }, [anchorEl, anchorOrigin.horizontal, anchorOrigin.vertical, anchorPosition, anchorReference]); // Returns the vertical offset of inner content to anchor the transform on if provided\n\n  var getContentAnchorOffset = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (element) {\n    var contentAnchorOffset = 0;\n\n    if (getContentAnchorEl && anchorReference === 'anchorEl') {\n      var contentAnchorEl = getContentAnchorEl(element);\n\n      if (contentAnchorEl && element.contains(contentAnchorEl)) {\n        var scrollTop = getScrollParent(element, contentAnchorEl);\n        contentAnchorOffset = contentAnchorEl.offsetTop + contentAnchorEl.clientHeight / 2 - scrollTop || 0;\n      } // != the default value\n\n\n      if (true) {\n        if (anchorOrigin.vertical !== 'top') {\n          console.error(['Material-UI: You can not change the default `anchorOrigin.vertical` value ', 'when also providing the `getContentAnchorEl` prop to the popover component.', 'Only use one of the two props.', 'Set `getContentAnchorEl` to `null | undefined`' + ' or leave `anchorOrigin.vertical` unchanged.'].join('\\n'));\n        }\n      }\n    }\n\n    return contentAnchorOffset;\n  }, [anchorOrigin.vertical, anchorReference, getContentAnchorEl]); // Return the base transform origin using the element\n  // and taking the content anchor offset into account if in use\n\n  var getTransformOrigin = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (elemRect) {\n    var contentAnchorOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    return {\n      vertical: getOffsetTop(elemRect, transformOrigin.vertical) + contentAnchorOffset,\n      horizontal: getOffsetLeft(elemRect, transformOrigin.horizontal)\n    };\n  }, [transformOrigin.horizontal, transformOrigin.vertical]);\n  var getPositioningStyle = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (element) {\n    // Check if the parent has requested anchoring on an inner content node\n    var contentAnchorOffset = getContentAnchorOffset(element);\n    var elemRect = {\n      width: element.offsetWidth,\n      height: element.offsetHeight\n    }; // Get the transform origin point on the element itself\n\n    var elemTransformOrigin = getTransformOrigin(elemRect, contentAnchorOffset);\n\n    if (anchorReference === 'none') {\n      return {\n        top: null,\n        left: null,\n        transformOrigin: getTransformOriginValue(elemTransformOrigin)\n      };\n    } // Get the offset of of the anchoring element\n\n\n    var anchorOffset = getAnchorOffset(contentAnchorOffset); // Calculate element positioning\n\n    var top = anchorOffset.top - elemTransformOrigin.vertical;\n    var left = anchorOffset.left - elemTransformOrigin.horizontal;\n    var bottom = top + elemRect.height;\n    var right = left + elemRect.width; // Use the parent window of the anchorEl if provided\n\n    var containerWindow = Object(_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(getAnchorEl(anchorEl)); // Window thresholds taking required margin into account\n\n    var heightThreshold = containerWindow.innerHeight - marginThreshold;\n    var widthThreshold = containerWindow.innerWidth - marginThreshold; // Check if the vertical axis needs shifting\n\n    if (top < marginThreshold) {\n      var diff = top - marginThreshold;\n      top -= diff;\n      elemTransformOrigin.vertical += diff;\n    } else if (bottom > heightThreshold) {\n      var _diff = bottom - heightThreshold;\n\n      top -= _diff;\n      elemTransformOrigin.vertical += _diff;\n    }\n\n    if (true) {\n      if (elemRect.height > heightThreshold && elemRect.height && heightThreshold) {\n        console.error(['Material-UI: The popover component is too tall.', \"Some part of it can not be seen on the screen (\".concat(elemRect.height - heightThreshold, \"px).\"), 'Please consider adding a `max-height` to improve the user-experience.'].join('\\n'));\n      }\n    } // Check if the horizontal axis needs shifting\n\n\n    if (left < marginThreshold) {\n      var _diff2 = left - marginThreshold;\n\n      left -= _diff2;\n      elemTransformOrigin.horizontal += _diff2;\n    } else if (right > widthThreshold) {\n      var _diff3 = right - widthThreshold;\n\n      left -= _diff3;\n      elemTransformOrigin.horizontal += _diff3;\n    }\n\n    return {\n      top: \"\".concat(Math.round(top), \"px\"),\n      left: \"\".concat(Math.round(left), \"px\"),\n      transformOrigin: getTransformOriginValue(elemTransformOrigin)\n    };\n  }, [anchorEl, anchorReference, getAnchorOffset, getContentAnchorOffset, getTransformOrigin, marginThreshold]);\n  var setPositioningStyles = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    var element = paperRef.current;\n\n    if (!element) {\n      return;\n    }\n\n    var positioning = getPositioningStyle(element);\n\n    if (positioning.top !== null) {\n      element.style.top = positioning.top;\n    }\n\n    if (positioning.left !== null) {\n      element.style.left = positioning.left;\n    }\n\n    element.style.transformOrigin = positioning.transformOrigin;\n  }, [getPositioningStyle]);\n\n  var handleEntering = function handleEntering(element, isAppearing) {\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n\n    setPositioningStyles();\n  };\n\n  var handlePaperRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function (instance) {\n    // #StrictMode ready\n    paperRef.current = react_dom__WEBPACK_IMPORTED_MODULE_4__[\"findDOMNode\"](instance);\n  }, []);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (open) {\n      setPositioningStyles();\n    }\n  });\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useImperativeHandle\"](action, function () {\n    return open ? {\n      updatePosition: function updatePosition() {\n        setPositioningStyles();\n      }\n    } : null;\n  }, [open, setPositioningStyles]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    if (!open) {\n      return undefined;\n    }\n\n    var handleResize = Object(_utils_debounce__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(function () {\n      setPositioningStyles();\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [open, setPositioningStyles]);\n  var transitionDuration = transitionDurationProp;\n\n  if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) {\n    transitionDuration = undefined;\n  } // If the container prop is provided, use that\n  // If the anchorEl prop is provided, use its parent body element as the container\n  // If neither are provided let the Modal take care of choosing the container\n\n\n  var container = containerProp || (anchorEl ? Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(getAnchorEl(anchorEl)).body : undefined);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Modal__WEBPACK_IMPORTED_MODULE_12__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    container: container,\n    open: open,\n    ref: ref,\n    BackdropProps: {\n      invisible: true\n    },\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(classes.root, className)\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](TransitionComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    appear: true,\n    in: open,\n    onEnter: onEnter,\n    onEntered: onEntered,\n    onExit: onExit,\n    onExited: onExited,\n    onExiting: onExiting,\n    timeout: transitionDuration\n  }, TransitionProps, {\n    onEntering: Object(_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(handleEntering, TransitionProps.onEntering)\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Paper__WEBPACK_IMPORTED_MODULE_14__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    elevation: elevation,\n    ref: handlePaperRef\n  }, PaperProps, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(classes.paper, PaperProps.className)\n  }), children)));\n});\n true ? Popover.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A ref for imperative actions.\n   * It currently only supports updatePosition() action.\n   */\n  action: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * A HTML element, or a function that returns it.\n   * It's used to set the position of the popover.\n   */\n  anchorEl: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func]), function (props) {\n    if (props.open && (!props.anchorReference || props.anchorReference === 'anchorEl')) {\n      var resolvedAnchorEl = getAnchorEl(props.anchorEl);\n\n      if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {\n        var box = resolvedAnchorEl.getBoundingClientRect();\n\n        if ( true && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          return new Error(['Material-UI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      } else {\n        return new Error(['Material-UI: The `anchorEl` prop provided to the component is invalid.', \"It should be an Element instance but it's `\".concat(resolvedAnchorEl, \"` instead.\")].join('\\n'));\n      }\n    }\n\n    return null;\n  }),\n\n  /**\n   * This is the point on the anchor where the popover's\n   * `anchorEl` will attach to. This is not used when the\n   * anchorReference is 'anchorPosition'.\n   *\n   * Options:\n   * vertical: [top, center, bottom];\n   * horizontal: [left, center, right].\n   */\n  anchorOrigin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    horizontal: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['center', 'left', 'right']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number]).isRequired,\n    vertical: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['bottom', 'center', 'top']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number]).isRequired\n  }),\n\n  /**\n   * This is the position that may be used\n   * to set the position of the popover.\n   * The coordinates are relative to\n   * the application's client area.\n   */\n  anchorPosition: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    left: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number.isRequired,\n    top: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number.isRequired\n  }),\n\n  /**\n   * This determines which anchor prop to refer to to set\n   * the position of the popover.\n   */\n  anchorReference: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['anchorEl', 'anchorPosition', 'none']),\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * A HTML element, component instance, or function that returns either.\n   * The `container` will passed to the Modal component.\n   *\n   * By default, it uses the body of the anchorEl's top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.instanceOf(react__WEBPACK_IMPORTED_MODULE_2__[\"Component\"]), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func]),\n\n  /**\n   * The elevation of the popover.\n   */\n  elevation: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * This function is called in order to retrieve the content anchor element.\n   * It's the opposite of the `anchorEl` prop.\n   * The content anchor element should be an element inside the popover.\n   * It's used to correctly scroll and set the position of the popover.\n   * The positioning strategy tries to make the content anchor element just above the\n   * anchor element.\n   */\n  getContentAnchorEl: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Specifies how close to the edge of the window the popover can appear.\n   */\n  marginThreshold: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired before the component is entering.\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component has entered.\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component is entering.\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired before the component is exiting.\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component has exited.\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component is exiting.\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * If `true`, the popover is visible.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired,\n\n  /**\n   * Props applied to the [`Paper`](/api/paper/) element.\n   */\n  PaperProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .shape({\n    component: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"elementTypeAcceptingRef\"]\n  }),\n\n  /**\n   * This is the point on the popover which\n   * will attach to the anchor's origin.\n   *\n   * Options:\n   * vertical: [top, center, bottom, x(px)];\n   * horizontal: [left, center, right, x(px)].\n   */\n  transformOrigin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    horizontal: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['center', 'left', 'right']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number]).isRequired,\n    vertical: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['bottom', 'center', 'top']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number]).isRequired\n  }),\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * Set to 'auto' to automatically calculate transition time based on height.\n   */\n  transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['auto']), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({\n    appear: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n    enter: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n    exit: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number\n  })]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(styles, {\n  name: 'MuiPopover'\n})(Popover));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Popover/Popover.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Popover/index.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Popover/index.js ***!
+  \*************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Popover__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Popover */ \"./jaas-client/node_modules/@material-ui/core/esm/Popover/Popover.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Popover__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Popover/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Portal/Portal.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Portal/Portal.js ***!
+  \*************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_setRef__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/setRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\nfunction getContainer(container) {\n  container = typeof container === 'function' ? container() : container; // #StrictMode ready\n\n  return react_dom__WEBPACK_IMPORTED_MODULE_1__[\"findDOMNode\"](container);\n}\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"] : react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\n\nvar Portal = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"](function Portal(props, ref) {\n  var children = props.children,\n      container = props.container,\n      _props$disablePortal = props.disablePortal,\n      disablePortal = _props$disablePortal === void 0 ? false : _props$disablePortal,\n      onRendered = props.onRendered;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"](null),\n      mountNode = _React$useState[0],\n      setMountNode = _React$useState[1];\n\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"](children) ? children.ref : null, ref);\n  useEnhancedEffect(function () {\n    if (!disablePortal) {\n      setMountNode(getContainer(container) || document.body);\n    }\n  }, [container, disablePortal]);\n  useEnhancedEffect(function () {\n    if (mountNode && !disablePortal) {\n      Object(_utils_setRef__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(ref, mountNode);\n      return function () {\n        Object(_utils_setRef__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(ref, null);\n      };\n    }\n\n    return undefined;\n  }, [ref, mountNode, disablePortal]);\n  useEnhancedEffect(function () {\n    if (onRendered && (mountNode || disablePortal)) {\n      onRendered();\n    }\n  }, [onRendered, mountNode, disablePortal]);\n\n  if (disablePortal) {\n    if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"](children)) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"](children, {\n        ref: handleRef\n      });\n    }\n\n    return children;\n  }\n\n  return mountNode ? /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_1__[\"createPortal\"](children, mountNode) : mountNode;\n});\n true ? Portal.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The children to render into the `container`.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n\n  /**\n   * A HTML element, component instance, or function that returns either.\n   * The `container` will have the portal children appended to it.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([_material_ui_utils__WEBPACK_IMPORTED_MODULE_3__[\"HTMLElementType\"], prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]), prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func]),\n\n  /**\n   * Disable the portal behavior.\n   * The children stay within it's parent DOM hierarchy.\n   */\n  disablePortal: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * Callback fired once the children has been mounted into the `container`.\n   *\n   * This prop will be deprecated and removed in v5, the ref can be used instead.\n   */\n  onRendered: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func\n} : undefined;\n\nif (true) {\n  // eslint-disable-next-line\n  Portal['propTypes' + ''] = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_3__[\"exactProp\"])(Portal.propTypes);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Portal);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Portal/Portal.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Portal/index.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Portal/index.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Portal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Portal */ \"./jaas-client/node_modules/@material-ui/core/esm/Portal/Portal.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Portal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Portal/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Select/Select.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Select/Select.js ***!
+  \*************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var _SelectInput__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./SelectInput */ \"./jaas-client/node_modules/@material-ui/core/esm/Select/SelectInput.js\");\n/* harmony import */ var _FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/formControlState */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/formControlState.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _internal_svg_icons_ArrowDropDown__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../internal/svg-icons/ArrowDropDown */ \"./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js\");\n/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Input */ \"./jaas-client/node_modules/@material-ui/core/esm/Input/index.js\");\n/* harmony import */ var _NativeSelect_NativeSelect__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../NativeSelect/NativeSelect */ \"./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js\");\n/* harmony import */ var _NativeSelect_NativeSelectInput__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../NativeSelect/NativeSelectInput */ \"./jaas-client/node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js\");\n/* harmony import */ var _FilledInput__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../FilledInput */ \"./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js\");\n/* harmony import */ var _OutlinedInput__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../OutlinedInput */ \"./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles = _NativeSelect_NativeSelect__WEBPACK_IMPORTED_MODULE_11__[\"styles\"];\n\nvar _ref = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Input__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null);\n\nvar _ref2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FilledInput__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null);\n\nvar Select = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Select(props, ref) {\n  var _props$autoWidth = props.autoWidth,\n      autoWidth = _props$autoWidth === void 0 ? false : _props$autoWidth,\n      children = props.children,\n      classes = props.classes,\n      _props$displayEmpty = props.displayEmpty,\n      displayEmpty = _props$displayEmpty === void 0 ? false : _props$displayEmpty,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? _internal_svg_icons_ArrowDropDown__WEBPACK_IMPORTED_MODULE_9__[\"default\"] : _props$IconComponent,\n      id = props.id,\n      input = props.input,\n      inputProps = props.inputProps,\n      label = props.label,\n      labelId = props.labelId,\n      _props$labelWidth = props.labelWidth,\n      labelWidth = _props$labelWidth === void 0 ? 0 : _props$labelWidth,\n      MenuProps = props.MenuProps,\n      _props$multiple = props.multiple,\n      multiple = _props$multiple === void 0 ? false : _props$multiple,\n      _props$native = props.native,\n      native = _props$native === void 0 ? false : _props$native,\n      onClose = props.onClose,\n      onOpen = props.onOpen,\n      open = props.open,\n      renderValue = props.renderValue,\n      SelectDisplayProps = props.SelectDisplayProps,\n      _props$variant = props.variant,\n      variantProps = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"autoWidth\", \"children\", \"classes\", \"displayEmpty\", \"IconComponent\", \"id\", \"input\", \"inputProps\", \"label\", \"labelId\", \"labelWidth\", \"MenuProps\", \"multiple\", \"native\", \"onClose\", \"onOpen\", \"open\", \"renderValue\", \"SelectDisplayProps\", \"variant\"]);\n\n  var inputComponent = native ? _NativeSelect_NativeSelectInput__WEBPACK_IMPORTED_MODULE_12__[\"default\"] : _SelectInput__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n  var fcs = Object(_FormControl_formControlState__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant']\n  });\n  var variant = fcs.variant || variantProps;\n  var InputComponent = input || {\n    standard: _ref,\n    outlined: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_OutlinedInput__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n      label: label,\n      labelWidth: labelWidth\n    }),\n    filled: _ref2\n  }[variant];\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"cloneElement\"](InputComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    // Most of the logic is implemented in `SelectInput`.\n    // The `Select` component is a simple API wrapper to expose something better to play with.\n    inputComponent: inputComponent,\n    inputProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      children: children,\n      IconComponent: IconComponent,\n      variant: variant,\n      type: undefined,\n      // We render a select. We can ignore the type provided by the `Input`.\n      multiple: multiple\n    }, native ? {\n      id: id\n    } : {\n      autoWidth: autoWidth,\n      displayEmpty: displayEmpty,\n      labelId: labelId,\n      MenuProps: MenuProps,\n      onClose: onClose,\n      onOpen: onOpen,\n      open: open,\n      renderValue: renderValue,\n      SelectDisplayProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        id: id\n      }, SelectDisplayProps)\n    }, inputProps, {\n      classes: inputProps ? Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_4__[\"mergeClasses\"])({\n        baseClasses: classes,\n        newClasses: inputProps.classes,\n        Component: Select\n      }) : classes\n    }, input ? input.props.inputProps : {}),\n    ref: ref\n  }, other));\n});\n true ? Select.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `MenuItem` when `native` is false and `option` when `native` is true.\n   *\n   * ⚠️The `MenuItem` elements **must** be direct descendants when `native` is false.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, a value is displayed even if no items are selected.\n   *\n   * In order to display a meaningful value, a function should be passed to the `renderValue` prop which returns the value to be displayed when no items are selected.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  displayEmpty: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.elementType,\n\n  /**\n   * The `id` of the wrapper element or the `select` element when `native`.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.element,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   * When `native` is `true`, the attributes are applied on the `select` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * See [OutlinedInput#label](/api/outlined-input/#props)\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * See [OutlinedInput#label](/api/outlined-input/#props)\n   */\n  labelWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number,\n\n  /**\n   * Props applied to the [`Menu`](/api/menu/) element.\n   */\n  MenuProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the component will be using a native `select` element.\n   */\n  native: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected when `native` is `false` (default).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Control `select` open state.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Render the selected value.\n   * You can only use it when the `native` prop is `false` (default).\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The input value. Providing an empty string will select no options.\n   * This prop is required when the `native` prop is `false` (default).\n   * Set to an empty string `''` if you don't want any of the available options to be selected.\n   *\n   * If the value is an object it must have reference equality with the option in order to be selected.\n   * If the value is not an object, the string representation must match with the string representation of the option in order to be selected.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\nSelect.muiName = 'Select';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(styles, {\n  name: 'MuiSelect'\n})(Select));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Select/Select.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Select/SelectInput.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Select/SelectInput.js ***!
+  \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n/* harmony import */ var _Menu_Menu__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../Menu/Menu */ \"./jaas-client/node_modules/@material-ui/core/esm/Menu/Menu.js\");\n/* harmony import */ var _InputBase_utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../InputBase/utils */ \"./jaas-client/node_modules/@material-ui/core/esm/InputBase/utils.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _utils_useControlled__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/useControlled */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction areEqualValues(a, b) {\n  if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(b) === 'object' && b !== null) {\n    return a === b;\n  }\n\n  return String(a) === String(b);\n}\n\nfunction isEmpty(display) {\n  return display == null || typeof display === 'string' && !display.trim();\n}\n/**\n * @ignore - internal component.\n */\n\n\nvar SelectInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"forwardRef\"](function SelectInput(props, ref) {\n  var ariaLabel = props['aria-label'],\n      autoFocus = props.autoFocus,\n      autoWidth = props.autoWidth,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      defaultValue = props.defaultValue,\n      disabled = props.disabled,\n      displayEmpty = props.displayEmpty,\n      IconComponent = props.IconComponent,\n      inputRefProp = props.inputRef,\n      labelId = props.labelId,\n      _props$MenuProps = props.MenuProps,\n      MenuProps = _props$MenuProps === void 0 ? {} : _props$MenuProps,\n      multiple = props.multiple,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onClose = props.onClose,\n      onFocus = props.onFocus,\n      onOpen = props.onOpen,\n      openProp = props.open,\n      readOnly = props.readOnly,\n      renderValue = props.renderValue,\n      _props$SelectDisplayP = props.SelectDisplayProps,\n      SelectDisplayProps = _props$SelectDisplayP === void 0 ? {} : _props$SelectDisplayP,\n      tabIndexProp = props.tabIndex,\n      type = props.type,\n      valueProp = props.value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"aria-label\", \"autoFocus\", \"autoWidth\", \"children\", \"classes\", \"className\", \"defaultValue\", \"disabled\", \"displayEmpty\", \"IconComponent\", \"inputRef\", \"labelId\", \"MenuProps\", \"multiple\", \"name\", \"onBlur\", \"onChange\", \"onClose\", \"onFocus\", \"onOpen\", \"open\", \"readOnly\", \"renderValue\", \"SelectDisplayProps\", \"tabIndex\", \"type\", \"value\", \"variant\"]);\n\n  var _useControlled = Object(_utils_useControlled__WEBPACK_IMPORTED_MODULE_14__[\"default\"])({\n    controlled: valueProp,\n    default: defaultValue,\n    name: 'Select'\n  }),\n      _useControlled2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_useControlled, 2),\n      value = _useControlled2[0],\n      setValue = _useControlled2[1];\n\n  var inputRef = react__WEBPACK_IMPORTED_MODULE_5__[\"useRef\"](null);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_5__[\"useState\"](null),\n      displayNode = _React$useState[0],\n      setDisplayNode = _React$useState[1];\n\n  var _React$useRef = react__WEBPACK_IMPORTED_MODULE_5__[\"useRef\"](openProp != null),\n      isOpenControlled = _React$useRef.current;\n\n  var _React$useState2 = react__WEBPACK_IMPORTED_MODULE_5__[\"useState\"](),\n      menuMinWidthState = _React$useState2[0],\n      setMenuMinWidthState = _React$useState2[1];\n\n  var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_5__[\"useState\"](false),\n      openState = _React$useState3[0],\n      setOpenState = _React$useState3[1];\n\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(ref, inputRefProp);\n  react__WEBPACK_IMPORTED_MODULE_5__[\"useImperativeHandle\"](handleRef, function () {\n    return {\n      focus: function focus() {\n        displayNode.focus();\n      },\n      node: inputRef.current,\n      value: value\n    };\n  }, [displayNode, value]);\n  react__WEBPACK_IMPORTED_MODULE_5__[\"useEffect\"](function () {\n    if (autoFocus && displayNode) {\n      displayNode.focus();\n    }\n  }, [autoFocus, displayNode]);\n  react__WEBPACK_IMPORTED_MODULE_5__[\"useEffect\"](function () {\n    if (displayNode) {\n      var label = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(displayNode).getElementById(labelId);\n\n      if (label) {\n        var handler = function handler() {\n          if (getSelection().isCollapsed) {\n            displayNode.focus();\n          }\n        };\n\n        label.addEventListener('click', handler);\n        return function () {\n          label.removeEventListener('click', handler);\n        };\n      }\n    }\n\n    return undefined;\n  }, [labelId, displayNode]);\n\n  var update = function update(open, event) {\n    if (open) {\n      if (onOpen) {\n        onOpen(event);\n      }\n    } else if (onClose) {\n      onClose(event);\n    }\n\n    if (!isOpenControlled) {\n      setMenuMinWidthState(autoWidth ? null : displayNode.clientWidth);\n      setOpenState(open);\n    }\n  };\n\n  var handleMouseDown = function handleMouseDown(event) {\n    // Ignore everything but left-click\n    if (event.button !== 0) {\n      return;\n    } // Hijack the default focus behavior.\n\n\n    event.preventDefault();\n    displayNode.focus();\n    update(true, event);\n  };\n\n  var handleClose = function handleClose(event) {\n    update(false, event);\n  };\n\n  var childrenArray = react__WEBPACK_IMPORTED_MODULE_5__[\"Children\"].toArray(children); // Support autofill.\n\n  var handleChange = function handleChange(event) {\n    var index = childrenArray.map(function (child) {\n      return child.props.value;\n    }).indexOf(event.target.value);\n\n    if (index === -1) {\n      return;\n    }\n\n    var child = childrenArray[index];\n    setValue(child.props.value);\n\n    if (onChange) {\n      onChange(event, child);\n    }\n  };\n\n  var handleItemClick = function handleItemClick(child) {\n    return function (event) {\n      if (!multiple) {\n        update(false, event);\n      }\n\n      var newValue;\n\n      if (multiple) {\n        newValue = Array.isArray(value) ? value.slice() : [];\n        var itemIndex = value.indexOf(child.props.value);\n\n        if (itemIndex === -1) {\n          newValue.push(child.props.value);\n        } else {\n          newValue.splice(itemIndex, 1);\n        }\n      } else {\n        newValue = child.props.value;\n      }\n\n      if (child.props.onClick) {\n        child.props.onClick(event);\n      }\n\n      if (value === newValue) {\n        return;\n      }\n\n      setValue(newValue);\n\n      if (onChange) {\n        event.persist(); // Preact support, target is read only property on a native event.\n\n        Object.defineProperty(event, 'target', {\n          writable: true,\n          value: {\n            value: newValue,\n            name: name\n          }\n        });\n        onChange(event, child);\n      }\n    };\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    if (!readOnly) {\n      var validKeys = [' ', 'ArrowUp', 'ArrowDown', // The native select doesn't respond to enter on MacOS, but it's recommended by\n      // https://www.w3.org/TR/wai-aria-practices/examples/listbox/listbox-collapsible.html\n      'Enter'];\n\n      if (validKeys.indexOf(event.key) !== -1) {\n        event.preventDefault();\n        update(true, event);\n      }\n    }\n  };\n\n  var open = displayNode !== null && (isOpenControlled ? openProp : openState);\n\n  var handleBlur = function handleBlur(event) {\n    // if open event.stopImmediatePropagation\n    if (!open && onBlur) {\n      event.persist(); // Preact support, target is read only property on a native event.\n\n      Object.defineProperty(event, 'target', {\n        writable: true,\n        value: {\n          value: value,\n          name: name\n        }\n      });\n      onBlur(event);\n    }\n  };\n\n  delete other['aria-invalid'];\n  var display;\n  var displaySingle;\n  var displayMultiple = [];\n  var computeDisplay = false;\n  var foundMatch = false; // No need to display any value if the field is empty.\n\n  if (Object(_InputBase_utils__WEBPACK_IMPORTED_MODULE_12__[\"isFilled\"])({\n    value: value\n  }) || displayEmpty) {\n    if (renderValue) {\n      display = renderValue(value);\n    } else {\n      computeDisplay = true;\n    }\n  }\n\n  var items = childrenArray.map(function (child) {\n    if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"isValidElement\"](child)) {\n      return null;\n    }\n\n    if (true) {\n      if (Object(react_is__WEBPACK_IMPORTED_MODULE_6__[\"isFragment\"])(child)) {\n        console.error([\"Material-UI: The Select component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    var selected;\n\n    if (multiple) {\n      if (!Array.isArray(value)) {\n        throw new Error( true ? \"Material-UI: The `value` prop must be an array when using the `Select` component with `multiple`.\" : undefined);\n      }\n\n      selected = value.some(function (v) {\n        return areEqualValues(v, child.props.value);\n      });\n\n      if (selected && computeDisplay) {\n        displayMultiple.push(child.props.children);\n      }\n    } else {\n      selected = areEqualValues(value, child.props.value);\n\n      if (selected && computeDisplay) {\n        displaySingle = child.props.children;\n      }\n    }\n\n    if (selected) {\n      foundMatch = true;\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"cloneElement\"](child, {\n      'aria-selected': selected ? 'true' : undefined,\n      onClick: handleItemClick(child),\n      onKeyUp: function onKeyUp(event) {\n        if (event.key === ' ') {\n          // otherwise our MenuItems dispatches a click event\n          // it's not behavior of the native <option> and causes\n          // the select to close immediately since we open on space keydown\n          event.preventDefault();\n        }\n\n        if (child.props.onKeyUp) {\n          child.props.onKeyUp(event);\n        }\n      },\n      role: 'option',\n      selected: selected,\n      value: undefined,\n      // The value is most likely not a valid HTML attribute.\n      'data-value': child.props.value // Instead, we provide it as a data attribute.\n\n    });\n  });\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_5__[\"useEffect\"](function () {\n      if (!foundMatch && !multiple && value !== '') {\n        var values = childrenArray.map(function (child) {\n          return child.props.value;\n        });\n        console.warn([\"Material-UI: You have provided an out-of-range value `\".concat(value, \"` for the select \").concat(name ? \"(name=\\\"\".concat(name, \"\\\") \") : '', \"component.\"), \"Consider providing a value that matches one of the available options or ''.\", \"The available values are \".concat(values.filter(function (x) {\n          return x != null;\n        }).map(function (x) {\n          return \"`\".concat(x, \"`\");\n        }).join(', ') || '\"\"', \".\")].join('\\n'));\n      }\n    }, [foundMatch, childrenArray, multiple, name, value]);\n  }\n\n  if (computeDisplay) {\n    display = multiple ? displayMultiple.join(', ') : displaySingle;\n  } // Avoid performing a layout computation in the render method.\n\n\n  var menuMinWidth = menuMinWidthState;\n\n  if (!autoWidth && isOpenControlled && displayNode) {\n    menuMinWidth = displayNode.clientWidth;\n  }\n\n  var tabIndex;\n\n  if (typeof tabIndexProp !== 'undefined') {\n    tabIndex = tabIndexProp;\n  } else {\n    tabIndex = disabled ? null : 0;\n  }\n\n  var buttonId = SelectDisplayProps.id || (name ? \"mui-component-select-\".concat(name) : undefined);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_5__[\"Fragment\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](\"div\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(classes.root, // TODO v5: merge root and select\n    classes.select, classes.selectMenu, classes[variant], className, disabled && classes.disabled),\n    ref: setDisplayNode,\n    tabIndex: tabIndex,\n    role: \"button\",\n    \"aria-disabled\": disabled ? 'true' : undefined,\n    \"aria-expanded\": open ? 'true' : undefined,\n    \"aria-haspopup\": \"listbox\",\n    \"aria-label\": ariaLabel,\n    \"aria-labelledby\": [labelId, buttonId].filter(Boolean).join(' ') || undefined,\n    onKeyDown: handleKeyDown,\n    onMouseDown: disabled || readOnly ? null : handleMouseDown,\n    onBlur: handleBlur,\n    onFocus: onFocus\n  }, SelectDisplayProps, {\n    // The id is required for proper a11y\n    id: buttonId\n  }), isEmpty(display) ?\n  /*#__PURE__*/\n  // eslint-disable-next-line react/no-danger\n  react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  }) : display), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](\"input\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    value: Array.isArray(value) ? value.join(',') : value,\n    name: name,\n    ref: inputRef,\n    \"aria-hidden\": true,\n    onChange: handleChange,\n    tabIndex: -1,\n    className: classes.nativeInput,\n    autoFocus: autoFocus\n  }, other)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](IconComponent, {\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(classes.icon, classes[\"icon\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(variant))], open && classes.iconOpen, disabled && classes.disabled)\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__[\"createElement\"](_Menu_Menu__WEBPACK_IMPORTED_MODULE_11__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    id: \"menu-\".concat(name || ''),\n    anchorEl: displayNode,\n    open: open,\n    onClose: handleClose\n  }, MenuProps, {\n    MenuListProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      'aria-labelledby': labelId,\n      role: 'listbox',\n      disableListWrap: true\n    }, MenuProps.MenuListProps),\n    PaperProps: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, MenuProps.PaperProps, {\n      style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        minWidth: menuMinWidth\n      }, MenuProps.PaperProps != null ? MenuProps.PaperProps.style : null)\n    })\n  }), items));\n});\n true ? SelectInput.propTypes = {\n  /**\n   * @ignore\n   */\n  'aria-label': prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string,\n\n  /**\n   * @ignore\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<MenuItem>` elements.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.object.isRequired,\n\n  /**\n   * The CSS class name of the select element.\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.any,\n\n  /**\n   * If `true`, the select will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * If `true`, the selected item is displayed even if its value is empty.\n   */\n  displayEmpty: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.elementType.isRequired,\n\n  /**\n   * Imperative handle implementing `{ value: T, node: HTMLElement, focus(): void }`\n   * Equivalent to `ref`\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_4__[\"refType\"],\n\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string,\n\n  /**\n   * Props applied to the [`Menu`](/api/menu/) element.\n   */\n  MenuProps: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.object,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected.\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Control `select` open state.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.bool,\n\n  /**\n   * Render the selected value.\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.func,\n\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.object,\n\n  /**\n   * @ignore\n   */\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.string]),\n\n  /**\n   * @ignore\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.any,\n\n  /**\n   * The input value.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_7___default.a.oneOf(['standard', 'outlined', 'filled'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (SelectInput);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Select/SelectInput.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Select/index.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Select/index.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Select__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Select */ \"./jaas-client/node_modules/@material-ui/core/esm/Select/Select.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Select__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Select/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js ***!
+  \***************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      userSelect: 'none',\n      width: '1em',\n      height: '1em',\n      display: 'inline-block',\n      fill: 'currentColor',\n      flexShrink: 0,\n      fontSize: theme.typography.pxToRem(24),\n      transition: theme.transitions.create('fill', {\n        duration: theme.transitions.duration.shorter\n      })\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the root element if `color=\"action\"`. */\n    colorAction: {\n      color: theme.palette.action.active\n    },\n\n    /* Styles applied to the root element if `color=\"error\"`. */\n    colorError: {\n      color: theme.palette.error.main\n    },\n\n    /* Styles applied to the root element if `color=\"disabled\"`. */\n    colorDisabled: {\n      color: theme.palette.action.disabled\n    },\n\n    /* Styles applied to the root element if `fontSize=\"inherit\"`. */\n    fontSizeInherit: {\n      fontSize: 'inherit'\n    },\n\n    /* Styles applied to the root element if `fontSize=\"small\"`. */\n    fontSizeSmall: {\n      fontSize: theme.typography.pxToRem(20)\n    },\n\n    /* Styles applied to the root element if `fontSize=\"large\"`. */\n    fontSizeLarge: {\n      fontSize: theme.typography.pxToRem(35)\n    }\n  };\n};\nvar SvgIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function SvgIcon(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'inherit' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'svg' : _props$component,\n      _props$fontSize = props.fontSize,\n      fontSize = _props$fontSize === void 0 ? 'default' : _props$fontSize,\n      htmlColor = props.htmlColor,\n      titleAccess = props.titleAccess,\n      _props$viewBox = props.viewBox,\n      viewBox = _props$viewBox === void 0 ? '0 0 24 24' : _props$viewBox,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"fontSize\", \"htmlColor\", \"titleAccess\", \"viewBox\"]);\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, color !== 'inherit' && classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(color))], fontSize !== 'default' && classes[\"fontSize\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(fontSize))]),\n    focusable: \"false\",\n    viewBox: viewBox,\n    color: htmlColor,\n    \"aria-hidden\": titleAccess ? undefined : true,\n    role: titleAccess ? 'img' : undefined,\n    ref: ref\n  }, other), children, titleAccess ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"title\", null, titleAccess) : null);\n});\n true ? SvgIcon.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Node passed into the SVG element.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['action', 'disabled', 'error', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n   */\n  fontSize: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['default', 'inherit', 'large', 'small']),\n\n  /**\n   * Applies a color attribute to the SVG element.\n   */\n  htmlColor: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The shape-rendering attribute. The behavior of the different options is described on the\n   * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering).\n   * If you are having issues with blurry icons you should investigate this property.\n   */\n  shapeRendering: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Provides a human-readable title for the element that contains it.\n   * https://www.w3.org/TR/SVG-access/#Equivalent\n   */\n  titleAccess: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Allows you to redefine what the coordinates without units mean inside an SVG element.\n   * For example, if the SVG element is 500 (width) by 200 (height),\n   * and you pass viewBox=\"0 0 50 20\",\n   * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n   * to bottom right (50,20) and each unit will be worth 10px.\n   */\n  viewBox: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string\n} : undefined;\nSvgIcon.muiName = 'SvgIcon';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiSvgIcon'\n})(SvgIcon));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js ***!
+  \*************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _SvgIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _SvgIcon__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/TextField/TextField.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/TextField/TextField.js ***!
+  \*******************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Input */ \"./jaas-client/node_modules/@material-ui/core/esm/Input/index.js\");\n/* harmony import */ var _FilledInput__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FilledInput */ \"./jaas-client/node_modules/@material-ui/core/esm/FilledInput/index.js\");\n/* harmony import */ var _OutlinedInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../OutlinedInput */ \"./jaas-client/node_modules/@material-ui/core/esm/OutlinedInput/index.js\");\n/* harmony import */ var _InputLabel__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../InputLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/InputLabel/index.js\");\n/* harmony import */ var _FormControl__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../FormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/index.js\");\n/* harmony import */ var _FormHelperText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../FormHelperText */ \"./jaas-client/node_modules/@material-ui/core/esm/FormHelperText/index.js\");\n/* harmony import */ var _Select__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Select */ \"./jaas-client/node_modules/@material-ui/core/esm/Select/index.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar variantComponent = {\n  standard: _Input__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n  filled: _FilledInput__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n  outlined: _OutlinedInput__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n};\nvar styles = {\n  /* Styles applied to the root element. */\n  root: {}\n};\n/**\n * The `TextField` is a convenience wrapper for the most common cases (80%).\n * It cannot be all things to all people, otherwise the API would grow out of control.\n *\n * ## Advanced Configuration\n *\n * It's important to understand that the text field is a simple abstraction\n * on top of the following components:\n *\n * - [FormControl](/api/form-control/)\n * - [InputLabel](/api/input-label/)\n * - [FilledInput](/api/filled-input/)\n * - [OutlinedInput](/api/outlined-input/)\n * - [Input](/api/input/)\n * - [FormHelperText](/api/form-helper-text/)\n *\n * If you wish to alter the props applied to the `input` element, you can do so as follows:\n *\n * ```jsx\n * const inputProps = {\n *   step: 300,\n * };\n *\n * return <TextField id=\"time\" type=\"time\" inputProps={inputProps} />;\n * ```\n *\n * For advanced cases, please look at the source of TextField by clicking on the\n * \"Edit this page\" button above. Consider either:\n *\n * - using the upper case props for passing values directly to the components\n * - using the underlying components directly as shown in the demos\n */\n\nvar TextField = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function TextField(props, ref) {\n  var autoComplete = props.autoComplete,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      defaultValue = props.defaultValue,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$error = props.error,\n      error = _props$error === void 0 ? false : _props$error,\n      FormHelperTextProps = props.FormHelperTextProps,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      helperText = props.helperText,\n      hiddenLabel = props.hiddenLabel,\n      id = props.id,\n      InputLabelProps = props.InputLabelProps,\n      inputProps = props.inputProps,\n      InputProps = props.InputProps,\n      inputRef = props.inputRef,\n      label = props.label,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onFocus = props.onFocus,\n      placeholder = props.placeholder,\n      _props$required = props.required,\n      required = _props$required === void 0 ? false : _props$required,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      _props$select = props.select,\n      select = _props$select === void 0 ? false : _props$select,\n      SelectProps = props.SelectProps,\n      type = props.type,\n      value = props.value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"autoComplete\", \"autoFocus\", \"children\", \"classes\", \"className\", \"color\", \"defaultValue\", \"disabled\", \"error\", \"FormHelperTextProps\", \"fullWidth\", \"helperText\", \"hiddenLabel\", \"id\", \"InputLabelProps\", \"inputProps\", \"InputProps\", \"inputRef\", \"label\", \"multiline\", \"name\", \"onBlur\", \"onChange\", \"onFocus\", \"placeholder\", \"required\", \"rows\", \"rowsMax\", \"select\", \"SelectProps\", \"type\", \"value\", \"variant\"]);\n\n  if (true) {\n    if (select && !children) {\n      console.error('Material-UI: `children` must be passed when using the `TextField` component with `select`.');\n    }\n  }\n\n  var InputMore = {};\n\n  if (variant === 'outlined') {\n    if (InputLabelProps && typeof InputLabelProps.shrink !== 'undefined') {\n      InputMore.notched = InputLabelProps.shrink;\n    }\n\n    if (label) {\n      var _InputLabelProps$requ;\n\n      var displayRequired = (_InputLabelProps$requ = InputLabelProps === null || InputLabelProps === void 0 ? void 0 : InputLabelProps.required) !== null && _InputLabelProps$requ !== void 0 ? _InputLabelProps$requ : required;\n      InputMore.label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, label, displayRequired && \"\\xA0*\");\n    }\n  }\n\n  if (select) {\n    // unset defaults from textbox inputs\n    if (!SelectProps || !SelectProps.native) {\n      InputMore.id = undefined;\n    }\n\n    InputMore['aria-describedby'] = undefined;\n  }\n\n  var helperTextId = helperText && id ? \"\".concat(id, \"-helper-text\") : undefined;\n  var inputLabelId = label && id ? \"\".concat(id, \"-label\") : undefined;\n  var InputComponent = variantComponent[variant];\n  var InputElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](InputComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    \"aria-describedby\": helperTextId,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    fullWidth: fullWidth,\n    multiline: multiline,\n    name: name,\n    rows: rows,\n    rowsMax: rowsMax,\n    type: type,\n    value: value,\n    id: id,\n    inputRef: inputRef,\n    onBlur: onBlur,\n    onChange: onChange,\n    onFocus: onFocus,\n    placeholder: placeholder,\n    inputProps: inputProps\n  }, InputMore, InputProps));\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FormControl__WEBPACK_IMPORTED_MODULE_10__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className),\n    disabled: disabled,\n    error: error,\n    fullWidth: fullWidth,\n    hiddenLabel: hiddenLabel,\n    ref: ref,\n    required: required,\n    color: color,\n    variant: variant\n  }, other), label && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_InputLabel__WEBPACK_IMPORTED_MODULE_9__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    htmlFor: id,\n    id: inputLabelId\n  }, InputLabelProps), label), select ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_Select__WEBPACK_IMPORTED_MODULE_12__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    \"aria-describedby\": helperTextId,\n    id: id,\n    labelId: inputLabelId,\n    value: value,\n    input: InputElement\n  }, SelectProps), children) : InputElement, helperText && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](_FormHelperText__WEBPACK_IMPORTED_MODULE_11__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    id: helperTextId\n  }, FormHelperTextProps), helperText));\n});\n true ? TextField.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default value of the `input` element.\n   */\n  defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the label will be displayed in an error state.\n   */\n  error: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Props applied to the [`FormHelperText`](/api/form-helper-text/) element.\n   */\n  FormHelperTextProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The helper text content.\n   */\n  helperText: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * @ignore\n   */\n  hiddenLabel: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * The id of the `input` element.\n   * Use this prop to make `label` and `helperText` accessible for screen readers.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Props applied to the [`InputLabel`](/api/input-label/) element.\n   */\n  InputLabelProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Props applied to the Input element.\n   * It will be a [`FilledInput`](/api/filled-input/),\n   * [`OutlinedInput`](/api/outlined-input/) or [`Input`](/api/input/)\n   * component depending on the `variant` prop value.\n   */\n  InputProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"refType\"],\n\n  /**\n   * The label content.\n   */\n  label: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   */\n  margin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['dense', 'none', 'normal']),\n\n  /**\n   * If `true`, a textarea element will be rendered instead of an input.\n   */\n  multiline: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * If `true`, the label is displayed as required and the `input` element` will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Render a [`Select`](/api/select/) element while passing the Input element to `Select` as `input` parameter.\n   * If this option is set you must pass the options of the select as children.\n   */\n  select: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Props applied to the [`Select`](/api/select/) element.\n   */\n  SelectProps: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * The size of the text field.\n   */\n  size: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['medium', 'small']),\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['filled', 'outlined', 'standard'])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(styles, {\n  name: 'MuiTextField'\n})(TextField));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/TextField/TextField.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/TextField/index.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/TextField/index.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _TextField__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TextField */ \"./jaas-client/node_modules/@material-ui/core/esm/TextField/TextField.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _TextField__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/TextField/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js":
+/*!*********************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js ***!
+  \*********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_debounce__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/debounce */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n\n\n\n\n\n\n\nfunction getStyleValue(computedStyle, property) {\n  return parseInt(computedStyle[property], 10) || 0;\n}\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_2__[\"useLayoutEffect\"] : react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"];\nvar styles = {\n  /* Styles applied to the shadow textarea element. */\n  shadow: {\n    // Visibility needed to hide the extra text area on iPads\n    visibility: 'hidden',\n    // Remove from the content flow\n    position: 'absolute',\n    // Ignore the scrollbar width\n    overflow: 'hidden',\n    height: 0,\n    top: 0,\n    left: 0,\n    // Create a new layer, increase the isolation of the computed values\n    transform: 'translateZ(0)'\n  }\n};\nvar TextareaAutosize = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function TextareaAutosize(props, ref) {\n  var onChange = props.onChange,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      _props$rowsMin = props.rowsMin,\n      rowsMinProp = _props$rowsMin === void 0 ? 1 : _props$rowsMin,\n      style = props.style,\n      value = props.value,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"onChange\", \"rows\", \"rowsMax\", \"rowsMin\", \"style\", \"value\"]);\n\n  var rowsMin = rows || rowsMinProp;\n\n  var _React$useRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](value != null),\n      isControlled = _React$useRef.current;\n\n  var inputRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ref, inputRef);\n  var shadowRef = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](null);\n  var renders = react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"](0);\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"]({}),\n      state = _React$useState[0],\n      setState = _React$useState[1];\n\n  var syncHeight = react__WEBPACK_IMPORTED_MODULE_2__[\"useCallback\"](function () {\n    var input = inputRef.current;\n    var computedStyle = window.getComputedStyle(input);\n    var inputShallow = shadowRef.current;\n    inputShallow.style.width = computedStyle.width;\n    inputShallow.value = input.value || props.placeholder || 'x';\n\n    if (inputShallow.value.slice(-1) === '\\n') {\n      // Certain fonts which overflow the line height will cause the textarea\n      // to report a different scrollHeight depending on whether the last line\n      // is empty. Make it non-empty to avoid this issue.\n      inputShallow.value += ' ';\n    }\n\n    var boxSizing = computedStyle['box-sizing'];\n    var padding = getStyleValue(computedStyle, 'padding-bottom') + getStyleValue(computedStyle, 'padding-top');\n    var border = getStyleValue(computedStyle, 'border-bottom-width') + getStyleValue(computedStyle, 'border-top-width'); // The height of the inner content\n\n    var innerHeight = inputShallow.scrollHeight - padding; // Measure height of a textarea with a single row\n\n    inputShallow.value = 'x';\n    var singleRowHeight = inputShallow.scrollHeight - padding; // The height of the outer content\n\n    var outerHeight = innerHeight;\n\n    if (rowsMin) {\n      outerHeight = Math.max(Number(rowsMin) * singleRowHeight, outerHeight);\n    }\n\n    if (rowsMax) {\n      outerHeight = Math.min(Number(rowsMax) * singleRowHeight, outerHeight);\n    }\n\n    outerHeight = Math.max(outerHeight, singleRowHeight); // Take the box sizing into account for applying this value as a style.\n\n    var outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);\n    var overflow = Math.abs(outerHeight - innerHeight) <= 1;\n    setState(function (prevState) {\n      // Need a large enough difference to update the height.\n      // This prevents infinite rendering loop.\n      if (renders.current < 20 && (outerHeightStyle > 0 && Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1 || prevState.overflow !== overflow)) {\n        renders.current += 1;\n        return {\n          overflow: overflow,\n          outerHeightStyle: outerHeightStyle\n        };\n      }\n\n      if (true) {\n        if (renders.current === 20) {\n          console.error(['Material-UI: Too many re-renders. The layout is unstable.', 'TextareaAutosize limits the number of renders to prevent an infinite loop.'].join('\\n'));\n        }\n      }\n\n      return prevState;\n    });\n  }, [rowsMax, rowsMin, props.placeholder]);\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    var handleResize = Object(_utils_debounce__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(function () {\n      renders.current = 0;\n      syncHeight();\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [syncHeight]);\n  useEnhancedEffect(function () {\n    syncHeight();\n  });\n  react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"](function () {\n    renders.current = 0;\n  }, [value]);\n\n  var handleChange = function handleChange(event) {\n    renders.current = 0;\n\n    if (!isControlled) {\n      syncHeight();\n    }\n\n    if (onChange) {\n      onChange(event);\n    }\n  };\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"textarea\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    value: value,\n    onChange: handleChange,\n    ref: handleRef // Apply the rows prop to get a \"correct\" first SSR paint\n    ,\n    rows: rowsMin,\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      height: state.outerHeightStyle,\n      // Need a large enough difference to allow scrolling.\n      // This prevents infinite rendering loop.\n      overflow: state.overflow ? 'hidden' : null\n    }, style)\n  }, other)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"textarea\", {\n    \"aria-hidden\": true,\n    className: props.className,\n    readOnly: true,\n    ref: shadowRef,\n    tabIndex: -1,\n    style: Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, styles.shadow, style)\n  }));\n});\n true ? TextareaAutosize.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   */\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * Use `rowsMin` instead. The prop will be removed in v5.\n   *\n   * @deprecated\n   */\n  rows: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Maximum number of rows to display.\n   */\n  rowsMax: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * Minimum number of rows to display.\n   */\n  rowsMin: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string]),\n\n  /**\n   * @ignore\n   */\n  style: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string), prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string])\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (TextareaAutosize);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/index.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/index.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _TextareaAutosize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TextareaAutosize */ \"./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _TextareaAutosize__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/TextareaAutosize/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Typography/Typography.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Typography/Typography.js ***!
+  \*********************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/capitalize */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js\");\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      margin: 0\n    },\n\n    /* Styles applied to the root element if `variant=\"body2\"`. */\n    body2: theme.typography.body2,\n\n    /* Styles applied to the root element if `variant=\"body1\"`. */\n    body1: theme.typography.body1,\n\n    /* Styles applied to the root element if `variant=\"caption\"`. */\n    caption: theme.typography.caption,\n\n    /* Styles applied to the root element if `variant=\"button\"`. */\n    button: theme.typography.button,\n\n    /* Styles applied to the root element if `variant=\"h1\"`. */\n    h1: theme.typography.h1,\n\n    /* Styles applied to the root element if `variant=\"h2\"`. */\n    h2: theme.typography.h2,\n\n    /* Styles applied to the root element if `variant=\"h3\"`. */\n    h3: theme.typography.h3,\n\n    /* Styles applied to the root element if `variant=\"h4\"`. */\n    h4: theme.typography.h4,\n\n    /* Styles applied to the root element if `variant=\"h5\"`. */\n    h5: theme.typography.h5,\n\n    /* Styles applied to the root element if `variant=\"h6\"`. */\n    h6: theme.typography.h6,\n\n    /* Styles applied to the root element if `variant=\"subtitle1\"`. */\n    subtitle1: theme.typography.subtitle1,\n\n    /* Styles applied to the root element if `variant=\"subtitle2\"`. */\n    subtitle2: theme.typography.subtitle2,\n\n    /* Styles applied to the root element if `variant=\"overline\"`. */\n    overline: theme.typography.overline,\n\n    /* Styles applied to the root element if `variant=\"srOnly\"`. Only accessible to screen readers. */\n    srOnly: {\n      position: 'absolute',\n      height: 1,\n      width: 1,\n      overflow: 'hidden'\n    },\n\n    /* Styles applied to the root element if `align=\"left\"`. */\n    alignLeft: {\n      textAlign: 'left'\n    },\n\n    /* Styles applied to the root element if `align=\"center\"`. */\n    alignCenter: {\n      textAlign: 'center'\n    },\n\n    /* Styles applied to the root element if `align=\"right\"`. */\n    alignRight: {\n      textAlign: 'right'\n    },\n\n    /* Styles applied to the root element if `align=\"justify\"`. */\n    alignJustify: {\n      textAlign: 'justify'\n    },\n\n    /* Styles applied to the root element if `nowrap={true}`. */\n    noWrap: {\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap'\n    },\n\n    /* Styles applied to the root element if `gutterBottom={true}`. */\n    gutterBottom: {\n      marginBottom: '0.35em'\n    },\n\n    /* Styles applied to the root element if `paragraph={true}`. */\n    paragraph: {\n      marginBottom: 16\n    },\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the root element if `color=\"textPrimary\"`. */\n    colorTextPrimary: {\n      color: theme.palette.text.primary\n    },\n\n    /* Styles applied to the root element if `color=\"textSecondary\"`. */\n    colorTextSecondary: {\n      color: theme.palette.text.secondary\n    },\n\n    /* Styles applied to the root element if `color=\"error\"`. */\n    colorError: {\n      color: theme.palette.error.main\n    },\n\n    /* Styles applied to the root element if `display=\"inline\"`. */\n    displayInline: {\n      display: 'inline'\n    },\n\n    /* Styles applied to the root element if `display=\"block\"`. */\n    displayBlock: {\n      display: 'block'\n    }\n  };\n};\nvar defaultVariantMapping = {\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  subtitle1: 'h6',\n  subtitle2: 'h6',\n  body1: 'p',\n  body2: 'p'\n};\nvar Typography = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"forwardRef\"](function Typography(props, ref) {\n  var _props$align = props.align,\n      align = _props$align === void 0 ? 'inherit' : _props$align,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'initial' : _props$color,\n      component = props.component,\n      _props$display = props.display,\n      display = _props$display === void 0 ? 'initial' : _props$display,\n      _props$gutterBottom = props.gutterBottom,\n      gutterBottom = _props$gutterBottom === void 0 ? false : _props$gutterBottom,\n      _props$noWrap = props.noWrap,\n      noWrap = _props$noWrap === void 0 ? false : _props$noWrap,\n      _props$paragraph = props.paragraph,\n      paragraph = _props$paragraph === void 0 ? false : _props$paragraph,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'body1' : _props$variant,\n      _props$variantMapping = props.variantMapping,\n      variantMapping = _props$variantMapping === void 0 ? defaultVariantMapping : _props$variantMapping,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"align\", \"classes\", \"className\", \"color\", \"component\", \"display\", \"gutterBottom\", \"noWrap\", \"paragraph\", \"variant\", \"variantMapping\"]);\n\n  var Component = component || (paragraph ? 'p' : variantMapping[variant] || defaultVariantMapping[variant]) || 'span';\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className, variant !== 'inherit' && classes[variant], color !== 'initial' && classes[\"color\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(color))], noWrap && classes.noWrap, gutterBottom && classes.gutterBottom, paragraph && classes.paragraph, align !== 'inherit' && classes[\"align\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(align))], display !== 'initial' && classes[\"display\".concat(Object(_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(display))]),\n    ref: ref\n  }, other));\n});\n true ? Typography.propTypes = {\n  /**\n   * Set the text-align on the component.\n   */\n  align: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n\n  /**\n   * The content of the component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['initial', 'inherit', 'primary', 'secondary', 'textPrimary', 'textSecondary', 'error']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   * Overrides the behavior of the `variantMapping` prop.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * Controls the display type\n   */\n  display: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['initial', 'block', 'inline']),\n\n  /**\n   * If `true`, the text will have a bottom margin.\n   */\n  gutterBottom: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the text will not wrap, but instead will truncate with a text overflow ellipsis.\n   *\n   * Note that text overflow can only happen with block or inline-block level elements\n   * (the element needs to have a width in order to overflow).\n   */\n  noWrap: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * If `true`, the text will have a bottom margin.\n   */\n  paragraph: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * Applies the theme typography styles.\n   */\n  variant: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'caption', 'button', 'overline', 'srOnly', 'inherit']),\n\n  /**\n   * The component maps the variant prop to a range of different HTML element types.\n   * For instance, subtitle1 to `<h6>`.\n   * If you wish to change that mapping, you can provide your own.\n   * Alternatively, you can use the `component` prop.\n   */\n  variantMapping: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(styles, {\n  name: 'MuiTypography'\n})(Typography));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Typography/Typography.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Typography__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Typography__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js":
+/*!*************************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js ***!
+  \*************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/useForkRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* eslint-disable consistent-return, jsx-a11y/no-noninteractive-tabindex, camelcase */\n\n\n\n\n\n\n/**\n * Utility component that locks focus inside the component.\n */\n\nfunction Unstable_TrapFocus(props) {\n  var children = props.children,\n      _props$disableAutoFoc = props.disableAutoFocus,\n      disableAutoFocus = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$disableEnforce = props.disableEnforceFocus,\n      disableEnforceFocus = _props$disableEnforce === void 0 ? false : _props$disableEnforce,\n      _props$disableRestore = props.disableRestoreFocus,\n      disableRestoreFocus = _props$disableRestore === void 0 ? false : _props$disableRestore,\n      getDoc = props.getDoc,\n      isEnabled = props.isEnabled,\n      open = props.open;\n  var ignoreNextEnforceFocus = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"]();\n  var sentinelStart = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](null);\n  var sentinelEnd = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](null);\n  var nodeToRestore = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"]();\n  var rootRef = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](null); // can be removed once we drop support for non ref forwarding class components\n\n  var handleOwnRef = react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"](function (instance) {\n    // #StrictMode ready\n    rootRef.current = react_dom__WEBPACK_IMPORTED_MODULE_1__[\"findDOMNode\"](instance);\n  }, []);\n  var handleRef = Object(_utils_useForkRef__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(children.ref, handleOwnRef);\n  var prevOpenRef = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"]();\n  react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"](function () {\n    prevOpenRef.current = open;\n  }, [open]);\n\n  if (!prevOpenRef.current && open && typeof window !== 'undefined') {\n    // WARNING: Potentially unsafe in concurrent mode.\n    // The way the read on `nodeToRestore` is setup could make this actually safe.\n    // Say we render `open={false}` -> `open={true}` but never commit.\n    // We have now written a state that wasn't committed. But no committed effect\n    // will read this wrong value. We only read from `nodeToRestore` in effects\n    // that were committed on `open={true}`\n    // WARNING: Prevents the instance from being garbage collected. Should only\n    // hold a weak ref.\n    nodeToRestore.current = getDoc().activeElement;\n  }\n\n  react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"](function () {\n    if (!open) {\n      return;\n    }\n\n    var doc = Object(_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(rootRef.current); // We might render an empty child.\n\n    if (!disableAutoFocus && rootRef.current && !rootRef.current.contains(doc.activeElement)) {\n      if (!rootRef.current.hasAttribute('tabIndex')) {\n        if (true) {\n          console.error(['Material-UI: The modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to \"-1\".'].join('\\n'));\n        }\n\n        rootRef.current.setAttribute('tabIndex', -1);\n      }\n\n      rootRef.current.focus();\n    }\n\n    var contain = function contain() {\n      if (!doc.hasFocus() || disableEnforceFocus || !isEnabled() || ignoreNextEnforceFocus.current) {\n        ignoreNextEnforceFocus.current = false;\n        return;\n      }\n\n      if (rootRef.current && !rootRef.current.contains(doc.activeElement)) {\n        rootRef.current.focus();\n      }\n    };\n\n    var loopFocus = function loopFocus(event) {\n      // 9 = Tab\n      if (disableEnforceFocus || !isEnabled() || event.keyCode !== 9) {\n        return;\n      } // Make sure the next tab starts from the right place.\n\n\n      if (doc.activeElement === rootRef.current) {\n        // We need to ignore the next contain as\n        // it will try to move the focus back to the rootRef element.\n        ignoreNextEnforceFocus.current = true;\n\n        if (event.shiftKey) {\n          sentinelEnd.current.focus();\n        } else {\n          sentinelStart.current.focus();\n        }\n      }\n    };\n\n    doc.addEventListener('focus', contain, true);\n    doc.addEventListener('keydown', loopFocus, true); // With Edge, Safari and Firefox, no focus related events are fired when the focused area stops being a focused area\n    // e.g. https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n    //\n    // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n    // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n\n    var interval = setInterval(function () {\n      contain();\n    }, 50);\n    return function () {\n      clearInterval(interval);\n      doc.removeEventListener('focus', contain, true);\n      doc.removeEventListener('keydown', loopFocus, true); // restoreLastFocus()\n\n      if (!disableRestoreFocus) {\n        // In IE 11 it is possible for document.activeElement to be null resulting\n        // in nodeToRestore.current being null.\n        // Not all elements in IE 11 have a focus method.\n        // Once IE 11 support is dropped the focus() call can be unconditional.\n        if (nodeToRestore.current && nodeToRestore.current.focus) {\n          nodeToRestore.current.focus();\n        }\n\n        nodeToRestore.current = null;\n      }\n    };\n  }, [disableAutoFocus, disableEnforceFocus, disableRestoreFocus, isEnabled, open]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n    tabIndex: 0,\n    ref: sentinelStart,\n    \"data-test\": \"sentinelStart\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"](children, {\n    ref: handleRef\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n    tabIndex: 0,\n    ref: sentinelEnd,\n    \"data-test\": \"sentinelEnd\"\n  }));\n}\n\n true ? Unstable_TrapFocus.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A single child content element.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n\n  /**\n   * If `true`, the trap focus will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any trap focus children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the trap focus less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableAutoFocus: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * If `true`, the trap focus will not prevent focus from leaving the trap focus while open.\n   *\n   * Generally this should never be set to `true` as it makes the trap focus less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableEnforceFocus: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * If `true`, the trap focus will not restore focus to previously focused element once\n   * trap focus is hidden.\n   */\n  disableRestoreFocus: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * Return the document to consider.\n   * We use it to implement the restore focus between different browser documents.\n   */\n  getDoc: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,\n\n  /**\n   * Do we still want to enforce the focus?\n   * This prop helps nesting TrapFocus elements.\n   */\n  isEnabled: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,\n\n  /**\n   * If `true`, focus will be locked.\n   */\n  open: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired\n} : undefined;\n\nif (true) {\n  // eslint-disable-next-line\n  Unstable_TrapFocus['propTypes' + ''] = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"exactProp\"])(Unstable_TrapFocus.propTypes);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Unstable_TrapFocus);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/index.js":
+/*!************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/index.js ***!
+  \************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Unstable_TrapFocus */ \"./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/Unstable_TrapFocus/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/blue.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/blue.js ***!
+  \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (blue);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/blue.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/common.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/common.js ***!
+  \*************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar common = {\n  black: '#000',\n  white: '#fff'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (common);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/common.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/green.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/green.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (green);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/green.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/grey.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/grey.js ***!
+  \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#d5d5d5',\n  A200: '#aaaaaa',\n  A400: '#303030',\n  A700: '#616161'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (grey);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/grey.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/indigo.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/indigo.js ***!
+  \*************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar indigo = {\n  50: '#e8eaf6',\n  100: '#c5cae9',\n  200: '#9fa8da',\n  300: '#7986cb',\n  400: '#5c6bc0',\n  500: '#3f51b5',\n  600: '#3949ab',\n  700: '#303f9f',\n  800: '#283593',\n  900: '#1a237e',\n  A100: '#8c9eff',\n  A200: '#536dfe',\n  A400: '#3d5afe',\n  A700: '#304ffe'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (indigo);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/indigo.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/orange.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/orange.js ***!
+  \*************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (orange);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/orange.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/pink.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/pink.js ***!
+  \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar pink = {\n  50: '#fce4ec',\n  100: '#f8bbd0',\n  200: '#f48fb1',\n  300: '#f06292',\n  400: '#ec407a',\n  500: '#e91e63',\n  600: '#d81b60',\n  700: '#c2185b',\n  800: '#ad1457',\n  900: '#880e4f',\n  A100: '#ff80ab',\n  A200: '#ff4081',\n  A400: '#f50057',\n  A700: '#c51162'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (pink);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/pink.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/colors/red.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/colors/red.js ***!
+  \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (red);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/colors/red.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/SwitchBase.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/SwitchBase.js ***!
+  \*******************************************************************************/
+/*! exports provided: styles, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _utils_useControlled__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/useControlled */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js\");\n/* harmony import */ var _FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../FormControl/useFormControl */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControl/useFormControl.js\");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/withStyles */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js\");\n/* harmony import */ var _IconButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../IconButton */ \"./jaas-client/node_modules/@material-ui/core/esm/IconButton/index.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar styles = {\n  root: {\n    padding: 9\n  },\n  checked: {},\n  disabled: {},\n  input: {\n    cursor: 'inherit',\n    position: 'absolute',\n    opacity: 0,\n    width: '100%',\n    height: '100%',\n    top: 0,\n    left: 0,\n    margin: 0,\n    padding: 0,\n    zIndex: 1\n  }\n};\n/**\n * @ignore - internal component.\n */\n\nvar SwitchBase = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"forwardRef\"](function SwitchBase(props, ref) {\n  var autoFocus = props.autoFocus,\n      checkedProp = props.checked,\n      checkedIcon = props.checkedIcon,\n      classes = props.classes,\n      className = props.className,\n      defaultChecked = props.defaultChecked,\n      disabledProp = props.disabled,\n      icon = props.icon,\n      id = props.id,\n      inputProps = props.inputProps,\n      inputRef = props.inputRef,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onFocus = props.onFocus,\n      readOnly = props.readOnly,\n      required = props.required,\n      tabIndex = props.tabIndex,\n      type = props.type,\n      value = props.value,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(props, [\"autoFocus\", \"checked\", \"checkedIcon\", \"classes\", \"className\", \"defaultChecked\", \"disabled\", \"icon\", \"id\", \"inputProps\", \"inputRef\", \"name\", \"onBlur\", \"onChange\", \"onFocus\", \"readOnly\", \"required\", \"tabIndex\", \"type\", \"value\"]);\n\n  var _useControlled = Object(_utils_useControlled__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({\n    controlled: checkedProp,\n    default: Boolean(defaultChecked),\n    name: 'SwitchBase',\n    state: 'checked'\n  }),\n      _useControlled2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_useControlled, 2),\n      checked = _useControlled2[0],\n      setCheckedState = _useControlled2[1];\n\n  var muiFormControl = Object(_FormControl_useFormControl__WEBPACK_IMPORTED_MODULE_8__[\"default\"])();\n\n  var handleFocus = function handleFocus(event) {\n    if (onFocus) {\n      onFocus(event);\n    }\n\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    if (onBlur) {\n      onBlur(event);\n    }\n\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    }\n  };\n\n  var handleInputChange = function handleInputChange(event) {\n    var newChecked = event.target.checked;\n    setCheckedState(newChecked);\n\n    if (onChange) {\n      // TODO v5: remove the second argument.\n      onChange(event, newChecked);\n    }\n  };\n\n  var disabled = disabledProp;\n\n  if (muiFormControl) {\n    if (typeof disabled === 'undefined') {\n      disabled = muiFormControl.disabled;\n    }\n  }\n\n  var hasLabelFor = type === 'checkbox' || type === 'radio';\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](_IconButton__WEBPACK_IMPORTED_MODULE_10__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    component: \"span\",\n    className: Object(clsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(classes.root, className, checked && classes.checked, disabled && classes.disabled),\n    disabled: disabled,\n    tabIndex: null,\n    role: undefined,\n    onFocus: handleFocus,\n    onBlur: handleBlur,\n    ref: ref\n  }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__[\"createElement\"](\"input\", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    autoFocus: autoFocus,\n    checked: checkedProp,\n    defaultChecked: defaultChecked,\n    className: classes.input,\n    disabled: disabled,\n    id: hasLabelFor && id,\n    name: name,\n    onChange: handleInputChange,\n    readOnly: readOnly,\n    ref: inputRef,\n    required: required,\n    tabIndex: tabIndex,\n    type: type,\n    value: value\n  }, inputProps)), checked ? checkedIcon : icon);\n}); // NB: If changed, please update Checkbox, Switch and Radio\n// so that the API documentation is updated.\n\n true ? SwitchBase.propTypes = {\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * @ignore\n   */\n  defaultChecked: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the switch will be disabled.\n   */\n  disabled: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node.isRequired,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: _material_ui_utils__WEBPACK_IMPORTED_MODULE_6__[\"refType\"],\n\n  /*\n   * @ignore\n   */\n  name: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * @ignore\n   */\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string]),\n\n  /**\n   * The input component prop `type`.\n   */\n  type: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string.isRequired,\n\n  /**\n   * The value of the component.\n   */\n  value: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(styles, {\n  name: 'PrivateSwitchBase'\n})(SwitchBase));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/SwitchBase.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js":
+/*!********************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js ***!
+  \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js":
+/*!***************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js ***!
+  \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js":
+/*!***************************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js ***!
+  \***************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js":
+/*!****************************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js ***!
+  \****************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/Person.js":
+/*!*************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/Person.js ***!
+  \*************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js\");\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"path\", {\n  d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n}), 'Person'));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/internal/svg-icons/Person.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js ***!
+  \***********************************************************************************/
+/*! exports provided: hexToRgb, rgbToHex, hslToRgb, decomposeColor, recomposeColor, getContrastRatio, getLuminance, emphasize, fade, darken, lighten */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hexToRgb\", function() { return hexToRgb; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rgbToHex\", function() { return rgbToHex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hslToRgb\", function() { return hslToRgb; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"decomposeColor\", function() { return decomposeColor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"recomposeColor\", function() { return recomposeColor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getContrastRatio\", function() { return getContrastRatio; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLuminance\", function() { return getLuminance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"emphasize\", function() { return emphasize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fade\", function() { return fade; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"darken\", function() { return darken; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lighten\", function() { return lighten; });\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\n/* eslint-disable no-use-before-define */\n\n/**\n * Returns a number whose value is limited to the given range.\n *\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp(value) {\n  var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n  if (true) {\n    if (value < min || value > max) {\n      console.error(\"Material-UI: The value provided \".concat(value, \" is out of range [\").concat(min, \", \").concat(max, \"].\"));\n    }\n  }\n\n  return Math.min(Math.max(min, value), max);\n}\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n *\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\n\n\nfunction hexToRgb(color) {\n  color = color.substr(1);\n  var re = new RegExp(\".{1,\".concat(color.length >= 6 ? 2 : 1, \"}\"), 'g');\n  var colors = color.match(re);\n\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(function (n) {\n      return n + n;\n    });\n  }\n\n  return colors ? \"rgb\".concat(colors.length === 4 ? 'a' : '', \"(\").concat(colors.map(function (n, index) {\n    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n  }).join(', '), \")\") : '';\n}\n\nfunction intToHex(int) {\n  var hex = int.toString(16);\n  return hex.length === 1 ? \"0\".concat(hex) : hex;\n}\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n *\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\n\n\nfunction rgbToHex(color) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n\n  var _decomposeColor = decomposeColor(color),\n      values = _decomposeColor.values;\n\n  return \"#\".concat(values.map(function (n) {\n    return intToHex(n);\n  }).join(''));\n}\n/**\n * Converts a color from hsl format to rgb format.\n *\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\n\nfunction hslToRgb(color) {\n  color = decomposeColor(color);\n  var _color = color,\n      values = _color.values;\n  var h = values[0];\n  var s = values[1] / 100;\n  var l = values[2] / 100;\n  var a = s * Math.min(l, 1 - l);\n\n  var f = function f(n) {\n    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n    return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  };\n\n  var type = 'rgb';\n  var rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n\n  return recomposeColor({\n    type: type,\n    values: rgb\n  });\n}\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\n\nfunction decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n\n  var marker = color.indexOf('(');\n  var type = color.substring(0, marker);\n\n  if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) {\n    throw new Error( true ? \"Material-UI: Unsupported `\".concat(color, \"` color.\\nWe support the following formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla().\") : undefined);\n  }\n\n  var values = color.substring(marker + 1, color.length - 1).split(',');\n  values = values.map(function (value) {\n    return parseFloat(value);\n  });\n  return {\n    type: type,\n    values: values\n  };\n}\n/**\n * Converts a color object with type and values to a string.\n *\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\n\nfunction recomposeColor(color) {\n  var type = color.type;\n  var values = color.values;\n\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map(function (n, i) {\n      return i < 3 ? parseInt(n, 10) : n;\n    });\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = \"\".concat(values[1], \"%\");\n    values[2] = \"\".concat(values[2], \"%\");\n  }\n\n  return \"\".concat(type, \"(\").concat(values.join(', '), \")\");\n}\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\n\nfunction getContrastRatio(foreground, background) {\n  var lumA = getLuminance(foreground);\n  var lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\n\nfunction getLuminance(color) {\n  color = decomposeColor(color);\n  var rgb = color.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(function (val) {\n    val /= 255; // normalized\n\n    return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n  }); // Truncate at 3 digits\n\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction emphasize(color) {\n  var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} value - value to set the alpha channel to in the range 0 -1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction fade(color, value) {\n  color = decomposeColor(color);\n  value = clamp(value);\n\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n\n  color.values[3] = value;\n  return recomposeColor(color);\n}\n/**\n * Darkens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}\n/**\n * Lightens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createBreakpoints.js":
+/*!************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createBreakpoints.js ***!
+  \************************************************************************************/
+/*! exports provided: keys, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"keys\", function() { return keys; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createBreakpoints; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n\n\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nvar keys = ['xs', 'sm', 'md', 'lg', 'xl']; // Keep in mind that @media is inclusive by the CSS specification.\n\nfunction createBreakpoints(breakpoints) {\n  var _breakpoints$values = breakpoints.values,\n      values = _breakpoints$values === void 0 ? {\n    xs: 0,\n    sm: 600,\n    md: 960,\n    lg: 1280,\n    xl: 1920\n  } : _breakpoints$values,\n      _breakpoints$unit = breakpoints.unit,\n      unit = _breakpoints$unit === void 0 ? 'px' : _breakpoints$unit,\n      _breakpoints$step = breakpoints.step,\n      step = _breakpoints$step === void 0 ? 5 : _breakpoints$step,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(breakpoints, [\"values\", \"unit\", \"step\"]);\n\n  function up(key) {\n    var value = typeof values[key] === 'number' ? values[key] : key;\n    return \"@media (min-width:\".concat(value).concat(unit, \")\");\n  }\n\n  function down(key) {\n    var endIndex = keys.indexOf(key) + 1;\n    var upperbound = values[keys[endIndex]];\n\n    if (endIndex === keys.length) {\n      // xl down applies to all sizes\n      return up('xs');\n    }\n\n    var value = typeof upperbound === 'number' && endIndex > 0 ? upperbound : key;\n    return \"@media (max-width:\".concat(value - step / 100).concat(unit, \")\");\n  }\n\n  function between(start, end) {\n    var endIndex = keys.indexOf(end);\n\n    if (endIndex === keys.length - 1) {\n      return up(start);\n    }\n\n    return \"@media (min-width:\".concat(typeof values[start] === 'number' ? values[start] : start).concat(unit, \") and \") + \"(max-width:\".concat((endIndex !== -1 && typeof values[keys[endIndex + 1]] === 'number' ? values[keys[endIndex + 1]] : end) - step / 100).concat(unit, \")\");\n  }\n\n  function only(key) {\n    return between(key, key);\n  }\n\n  function width(key) {\n    return values[key];\n  }\n\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    keys: keys,\n    values: values,\n    up: up,\n    down: down,\n    between: between,\n    only: only,\n    width: width\n  }, other);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createBreakpoints.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createMixins.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createMixins.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createMixins; });\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n\n\nfunction createMixins(breakpoints, spacing, mixins) {\n  var _toolbar;\n\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n    gutters: function gutters() {\n      var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      // To deprecate in v4.1\n      //       warning(\n      //         false,\n      //         [\n      //           'Material-UI: Theme.mixins.gutters() is deprecated.',\n      //           'You can use the source of the mixin directly:',\n      //           `\n      // paddingLeft: theme.spacing(2),\n      // paddingRight: theme.spacing(2),\n      // [theme.breakpoints.up('sm')]: {\n      //   paddingLeft: theme.spacing(3),\n      //   paddingRight: theme.spacing(3),\n      // },\n      // `,\n      //         ].join('\\n'),\n      //       );\n      return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        paddingLeft: spacing(2),\n        paddingRight: spacing(2)\n      }, styles, Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, breakpoints.up('sm'), Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        paddingLeft: spacing(3),\n        paddingRight: spacing(3)\n      }, styles[breakpoints.up('sm')])));\n    },\n    toolbar: (_toolbar = {\n      minHeight: 56\n    }, Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_toolbar, \"\".concat(breakpoints.up('xs'), \" and (orientation: landscape)\"), {\n      minHeight: 48\n    }), Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_toolbar, breakpoints.up('sm'), {\n      minHeight: 64\n    }), _toolbar)\n  }, mixins);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createMixins.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createMuiTheme.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createMuiTheme.js ***!
+  \*********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _createBreakpoints__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createBreakpoints */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createBreakpoints.js\");\n/* harmony import */ var _createMixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createMixins */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createMixins.js\");\n/* harmony import */ var _createPalette__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPalette */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createPalette.js\");\n/* harmony import */ var _createTypography__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./createTypography */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createTypography.js\");\n/* harmony import */ var _shadows__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./shadows */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/shadows.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./shape */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/shape.js\");\n/* harmony import */ var _createSpacing__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createSpacing */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createSpacing.js\");\n/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./transitions */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js\");\n/* harmony import */ var _zIndex__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./zIndex */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction createMuiTheme() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var _options$breakpoints = options.breakpoints,\n      breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints,\n      _options$mixins = options.mixins,\n      mixinsInput = _options$mixins === void 0 ? {} : _options$mixins,\n      _options$palette = options.palette,\n      paletteInput = _options$palette === void 0 ? {} : _options$palette,\n      spacingInput = options.spacing,\n      _options$typography = options.typography,\n      typographyInput = _options$typography === void 0 ? {} : _options$typography,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(options, [\"breakpoints\", \"mixins\", \"palette\", \"spacing\", \"typography\"]);\n\n  var palette = Object(_createPalette__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(paletteInput);\n  var breakpoints = Object(_createBreakpoints__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(breakpointsInput);\n  var spacing = Object(_createSpacing__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(spacingInput);\n  var muiTheme = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])({\n    breakpoints: breakpoints,\n    direction: 'ltr',\n    mixins: Object(_createMixins__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(breakpoints, spacing, mixinsInput),\n    overrides: {},\n    // Inject custom styles\n    palette: palette,\n    props: {},\n    // Provide default props\n    shadows: _shadows__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n    typography: Object(_createTypography__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(palette, typographyInput),\n    spacing: spacing,\n    shape: _shape__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n    transitions: _transitions__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n    zIndex: _zIndex__WEBPACK_IMPORTED_MODULE_11__[\"default\"]\n  }, other);\n\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  muiTheme = args.reduce(function (acc, argument) {\n    return Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])(acc, argument);\n  }, muiTheme);\n\n  if (true) {\n    var pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected'];\n\n    var traverse = function traverse(node, parentKey) {\n      var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var key; // eslint-disable-next-line guard-for-in, no-restricted-syntax\n\n      for (key in node) {\n        var child = node[key];\n\n        if (depth === 1) {\n          if (key.indexOf('Mui') === 0 && child) {\n            traverse(child, key, depth + 1);\n          }\n        } else if (pseudoClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n          if (true) {\n            console.error([\"Material-UI: The `\".concat(parentKey, \"` component increases \") + \"the CSS specificity of the `\".concat(key, \"` internal state.\"), 'You can not override it like this: ', JSON.stringify(node, null, 2), '', 'Instead, you need to use the $ruleName syntax:', JSON.stringify({\n              root: Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, \"&$\".concat(key), child)\n            }, null, 2), '', 'https://material-ui.com/r/pseudo-classes-guide'].join('\\n'));\n          } // Remove the style to prevent global conflicts.\n\n\n          node[key] = {};\n        }\n      }\n    };\n\n    traverse(muiTheme.overrides);\n  }\n\n  return muiTheme;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (createMuiTheme);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createMuiTheme.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createPalette.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createPalette.js ***!
+  \********************************************************************************/
+/*! exports provided: light, dark, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"light\", function() { return light; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dark\", function() { return dark; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createPalette; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _colors_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../colors/common */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/common.js\");\n/* harmony import */ var _colors_grey__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../colors/grey */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/grey.js\");\n/* harmony import */ var _colors_indigo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../colors/indigo */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/indigo.js\");\n/* harmony import */ var _colors_pink__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../colors/pink */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/pink.js\");\n/* harmony import */ var _colors_red__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../colors/red */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/red.js\");\n/* harmony import */ var _colors_orange__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../colors/orange */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/orange.js\");\n/* harmony import */ var _colors_blue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../colors/blue */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/blue.js\");\n/* harmony import */ var _colors_green__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../colors/green */ \"./jaas-client/node_modules/@material-ui/core/esm/colors/green.js\");\n/* harmony import */ var _colorManipulator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./colorManipulator */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/colorManipulator.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar light = {\n  // The colors used to style the text.\n  text: {\n    // The most important text.\n    primary: 'rgba(0, 0, 0, 0.87)',\n    // Secondary text.\n    secondary: 'rgba(0, 0, 0, 0.54)',\n    // Disabled text have even lower visual prominence.\n    disabled: 'rgba(0, 0, 0, 0.38)',\n    // Text hints.\n    hint: 'rgba(0, 0, 0, 0.38)'\n  },\n  // The color used to divide different elements.\n  divider: 'rgba(0, 0, 0, 0.12)',\n  // The background colors used to style the surfaces.\n  // Consistency between these values is important.\n  background: {\n    paper: _colors_common__WEBPACK_IMPORTED_MODULE_3__[\"default\"].white,\n    default: _colors_grey__WEBPACK_IMPORTED_MODULE_4__[\"default\"][50]\n  },\n  // The colors used to style the action elements.\n  action: {\n    // The color of an active action like an icon button.\n    active: 'rgba(0, 0, 0, 0.54)',\n    // The color of an hovered action.\n    hover: 'rgba(0, 0, 0, 0.04)',\n    hoverOpacity: 0.04,\n    // The color of a selected action.\n    selected: 'rgba(0, 0, 0, 0.08)',\n    selectedOpacity: 0.08,\n    // The color of a disabled action.\n    disabled: 'rgba(0, 0, 0, 0.26)',\n    // The background color of a disabled action.\n    disabledBackground: 'rgba(0, 0, 0, 0.12)',\n    disabledOpacity: 0.38,\n    focus: 'rgba(0, 0, 0, 0.12)',\n    focusOpacity: 0.12,\n    activatedOpacity: 0.12\n  }\n};\nvar dark = {\n  text: {\n    primary: _colors_common__WEBPACK_IMPORTED_MODULE_3__[\"default\"].white,\n    secondary: 'rgba(255, 255, 255, 0.7)',\n    disabled: 'rgba(255, 255, 255, 0.5)',\n    hint: 'rgba(255, 255, 255, 0.5)',\n    icon: 'rgba(255, 255, 255, 0.5)'\n  },\n  divider: 'rgba(255, 255, 255, 0.12)',\n  background: {\n    paper: _colors_grey__WEBPACK_IMPORTED_MODULE_4__[\"default\"][800],\n    default: '#303030'\n  },\n  action: {\n    active: _colors_common__WEBPACK_IMPORTED_MODULE_3__[\"default\"].white,\n    hover: 'rgba(255, 255, 255, 0.08)',\n    hoverOpacity: 0.08,\n    selected: 'rgba(255, 255, 255, 0.16)',\n    selectedOpacity: 0.16,\n    disabled: 'rgba(255, 255, 255, 0.3)',\n    disabledBackground: 'rgba(255, 255, 255, 0.12)',\n    disabledOpacity: 0.38,\n    focus: 'rgba(255, 255, 255, 0.12)',\n    focusOpacity: 0.12,\n    activatedOpacity: 0.24\n  }\n};\n\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  var tonalOffsetLight = tonalOffset.light || tonalOffset;\n  var tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = Object(_colorManipulator__WEBPACK_IMPORTED_MODULE_11__[\"lighten\"])(intent.main, tonalOffsetLight);\n    } else if (direction === 'dark') {\n      intent.dark = Object(_colorManipulator__WEBPACK_IMPORTED_MODULE_11__[\"darken\"])(intent.main, tonalOffsetDark);\n    }\n  }\n}\n\nfunction createPalette(palette) {\n  var _palette$primary = palette.primary,\n      primary = _palette$primary === void 0 ? {\n    light: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__[\"default\"][300],\n    main: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__[\"default\"][500],\n    dark: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__[\"default\"][700]\n  } : _palette$primary,\n      _palette$secondary = palette.secondary,\n      secondary = _palette$secondary === void 0 ? {\n    light: _colors_pink__WEBPACK_IMPORTED_MODULE_6__[\"default\"].A200,\n    main: _colors_pink__WEBPACK_IMPORTED_MODULE_6__[\"default\"].A400,\n    dark: _colors_pink__WEBPACK_IMPORTED_MODULE_6__[\"default\"].A700\n  } : _palette$secondary,\n      _palette$error = palette.error,\n      error = _palette$error === void 0 ? {\n    light: _colors_red__WEBPACK_IMPORTED_MODULE_7__[\"default\"][300],\n    main: _colors_red__WEBPACK_IMPORTED_MODULE_7__[\"default\"][500],\n    dark: _colors_red__WEBPACK_IMPORTED_MODULE_7__[\"default\"][700]\n  } : _palette$error,\n      _palette$warning = palette.warning,\n      warning = _palette$warning === void 0 ? {\n    light: _colors_orange__WEBPACK_IMPORTED_MODULE_8__[\"default\"][300],\n    main: _colors_orange__WEBPACK_IMPORTED_MODULE_8__[\"default\"][500],\n    dark: _colors_orange__WEBPACK_IMPORTED_MODULE_8__[\"default\"][700]\n  } : _palette$warning,\n      _palette$info = palette.info,\n      info = _palette$info === void 0 ? {\n    light: _colors_blue__WEBPACK_IMPORTED_MODULE_9__[\"default\"][300],\n    main: _colors_blue__WEBPACK_IMPORTED_MODULE_9__[\"default\"][500],\n    dark: _colors_blue__WEBPACK_IMPORTED_MODULE_9__[\"default\"][700]\n  } : _palette$info,\n      _palette$success = palette.success,\n      success = _palette$success === void 0 ? {\n    light: _colors_green__WEBPACK_IMPORTED_MODULE_10__[\"default\"][300],\n    main: _colors_green__WEBPACK_IMPORTED_MODULE_10__[\"default\"][500],\n    dark: _colors_green__WEBPACK_IMPORTED_MODULE_10__[\"default\"][700]\n  } : _palette$success,\n      _palette$type = palette.type,\n      type = _palette$type === void 0 ? 'light' : _palette$type,\n      _palette$contrastThre = palette.contrastThreshold,\n      contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre,\n      _palette$tonalOffset = palette.tonalOffset,\n      tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(palette, [\"primary\", \"secondary\", \"error\", \"warning\", \"info\", \"success\", \"type\", \"contrastThreshold\", \"tonalOffset\"]); // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n\n\n  function getContrastText(background) {\n    var contrastText = Object(_colorManipulator__WEBPACK_IMPORTED_MODULE_11__[\"getContrastRatio\"])(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n\n    if (true) {\n      var contrast = Object(_colorManipulator__WEBPACK_IMPORTED_MODULE_11__[\"getContrastRatio\"])(background, contrastText);\n\n      if (contrast < 3) {\n        console.error([\"Material-UI: The contrast ratio of \".concat(contrast, \":1 for \").concat(contrastText, \" on \").concat(background), 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n      }\n    }\n\n    return contrastText;\n  }\n\n  var augmentColor = function augmentColor(color) {\n    var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n    var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n    var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700;\n    color = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, color);\n\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n\n    if (!color.main) {\n      throw new Error( true ? \"Material-UI: The color provided to augmentColor(color) is invalid.\\nThe color object needs to have a `main` property or a `\".concat(mainShade, \"` property.\") : undefined);\n    }\n\n    if (typeof color.main !== 'string') {\n      throw new Error( true ? \"Material-UI: The color provided to augmentColor(color) is invalid.\\n`color.main` should be a string, but `\".concat(JSON.stringify(color.main), \"` was provided instead.\\n\\nDid you intend to use one of the following approaches?\\n\\nimport {\\xA0green } from \\\"@material-ui/core/colors\\\";\\n\\nconst theme1 = createMuiTheme({ palette: {\\n  primary: green,\\n} });\\n\\nconst theme2 = createMuiTheme({ palette: {\\n  primary: { main: green[500] },\\n} });\") : undefined);\n    }\n\n    addLightOrDark(color, 'light', lightShade, tonalOffset);\n    addLightOrDark(color, 'dark', darkShade, tonalOffset);\n\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n\n    return color;\n  };\n\n  var types = {\n    dark: dark,\n    light: light\n  };\n\n  if (true) {\n    if (!types[type]) {\n      console.error(\"Material-UI: The palette type `\".concat(type, \"` is not supported.\"));\n    }\n  }\n\n  var paletteOutput = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    // A collection of common colors.\n    common: _colors_common__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n    // The palette type, can be light or dark.\n    type: type,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor(primary),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor(secondary, 'A400', 'A200', 'A700'),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor(error),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor(warning),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor(info),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor(success),\n    // The grey colors.\n    grey: _colors_grey__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold: contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText: getContrastText,\n    // Generate a rich color object.\n    augmentColor: augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset: tonalOffset\n  }, types[type]), other);\n  return paletteOutput;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createPalette.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createSpacing.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createSpacing.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createSpacing; });\n/* harmony import */ var _material_ui_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/system */ \"./jaas-client/node_modules/@material-ui/system/esm/index.js\");\n\nvar warnOnce;\nfunction createSpacing() {\n  var spacingInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8;\n\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  } // Material Design layouts are visually balanced. Most measurements align to an 8dp grid applied, which aligns both spacing and the overall layout.\n  // Smaller components, such as icons and type, can align to a 4dp grid.\n  // https://material.io/design/layout/understanding-layout.html#usage\n\n\n  var transform = Object(_material_ui_system__WEBPACK_IMPORTED_MODULE_0__[\"createUnarySpacing\"])({\n    spacing: spacingInput\n  });\n\n  var spacing = function spacing() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (true) {\n      if (!(args.length <= 4)) {\n        console.error(\"Material-UI: Too many arguments provided, expected between 0 and 4, got \".concat(args.length));\n      }\n    }\n\n    if (args.length === 0) {\n      return transform(1);\n    }\n\n    if (args.length === 1) {\n      return transform(args[0]);\n    }\n\n    return args.map(function (argument) {\n      if (typeof argument === 'string') {\n        return argument;\n      }\n\n      var output = transform(argument);\n      return typeof output === 'number' ? \"\".concat(output, \"px\") : output;\n    }).join(' ');\n  }; // Backward compatibility, to remove in v5.\n\n\n  Object.defineProperty(spacing, 'unit', {\n    get: function get() {\n      if (true) {\n        if (!warnOnce || \"development\" === 'test') {\n          console.error(['Material-UI: theme.spacing.unit usage has been deprecated.', 'It will be removed in v5.', 'You can replace `theme.spacing.unit * y` with `theme.spacing(y)`.', '', 'You can use the `https://github.com/mui-org/material-ui/tree/master/packages/material-ui-codemod/README.md#theme-spacing-api` migration helper to make the process smoother.'].join('\\n'));\n        }\n\n        warnOnce = true;\n      }\n\n      return spacingInput;\n    }\n  });\n  spacing.mui = true;\n  return spacing;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createSpacing.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/createTypography.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/createTypography.js ***!
+  \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createTypography; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\n\n\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\n\nvar caseAllCaps = {\n  textTransform: 'uppercase'\n};\nvar defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n/**\n * @see @link{https://material.io/design/typography/the-type-system.html}\n * @see @link{https://material.io/design/typography/understanding-typography.html}\n */\n\nfunction createTypography(palette, typography) {\n  var _ref = typeof typography === 'function' ? typography(palette) : typography,\n      _ref$fontFamily = _ref.fontFamily,\n      fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily,\n      _ref$fontSize = _ref.fontSize,\n      fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize,\n      _ref$fontWeightLight = _ref.fontWeightLight,\n      fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight,\n      _ref$fontWeightRegula = _ref.fontWeightRegular,\n      fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula,\n      _ref$fontWeightMedium = _ref.fontWeightMedium,\n      fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium,\n      _ref$fontWeightBold = _ref.fontWeightBold,\n      fontWeightBold = _ref$fontWeightBold === void 0 ? 700 : _ref$fontWeightBold,\n      _ref$htmlFontSize = _ref.htmlFontSize,\n      htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize,\n      allVariants = _ref.allVariants,\n      pxToRem2 = _ref.pxToRem,\n      other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref, [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"]);\n\n  if (true) {\n    if (typeof fontSize !== 'number') {\n      console.error('Material-UI: `fontSize` is required to be a number.');\n    }\n\n    if (typeof htmlFontSize !== 'number') {\n      console.error('Material-UI: `htmlFontSize` is required to be a number.');\n    }\n  }\n\n  var coef = fontSize / 14;\n\n  var pxToRem = pxToRem2 || function (size) {\n    return \"\".concat(size / htmlFontSize * coef, \"rem\");\n  };\n\n  var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) {\n    return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      fontFamily: fontFamily,\n      fontWeight: fontWeight,\n      fontSize: pxToRem(size),\n      // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n      lineHeight: lineHeight\n    }, fontFamily === defaultFontFamily ? {\n      letterSpacing: \"\".concat(round(letterSpacing / size), \"em\")\n    } : {}, casing, allVariants);\n  };\n\n  var variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps)\n  };\n  return Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    htmlFontSize: htmlFontSize,\n    pxToRem: pxToRem,\n    round: round,\n    // TODO v5: remove\n    fontFamily: fontFamily,\n    fontSize: fontSize,\n    fontWeightLight: fontWeightLight,\n    fontWeightRegular: fontWeightRegular,\n    fontWeightMedium: fontWeightMedium,\n    fontWeightBold: fontWeightBold\n  }, variants), other, {\n    clone: false // No need to clone deep\n\n  });\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/createTypography.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _createMuiTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createMuiTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n\nvar defaultTheme = Object(_createMuiTheme__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n/* harmony default export */ __webpack_exports__[\"default\"] = (defaultTheme);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/shadows.js":
+/*!**************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/shadows.js ***!
+  \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar shadowKeyUmbraOpacity = 0.2;\nvar shadowKeyPenumbraOpacity = 0.14;\nvar shadowAmbientShadowOpacity = 0.12;\n\nfunction createShadow() {\n  return [\"\".concat(arguments.length <= 0 ? undefined : arguments[0], \"px \").concat(arguments.length <= 1 ? undefined : arguments[1], \"px \").concat(arguments.length <= 2 ? undefined : arguments[2], \"px \").concat(arguments.length <= 3 ? undefined : arguments[3], \"px rgba(0,0,0,\").concat(shadowKeyUmbraOpacity, \")\"), \"\".concat(arguments.length <= 4 ? undefined : arguments[4], \"px \").concat(arguments.length <= 5 ? undefined : arguments[5], \"px \").concat(arguments.length <= 6 ? undefined : arguments[6], \"px \").concat(arguments.length <= 7 ? undefined : arguments[7], \"px rgba(0,0,0,\").concat(shadowKeyPenumbraOpacity, \")\"), \"\".concat(arguments.length <= 8 ? undefined : arguments[8], \"px \").concat(arguments.length <= 9 ? undefined : arguments[9], \"px \").concat(arguments.length <= 10 ? undefined : arguments[10], \"px \").concat(arguments.length <= 11 ? undefined : arguments[11], \"px rgba(0,0,0,\").concat(shadowAmbientShadowOpacity, \")\")].join(',');\n} // Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\n\n\nvar shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\n/* harmony default export */ __webpack_exports__[\"default\"] = (shadows);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/shadows.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/shape.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/shape.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar shape = {\n  borderRadius: 4\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (shape);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/shape.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/styled.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/styled.js ***!
+  \*************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js\");\n\n\n\n\nvar styled = function styled(Component) {\n  var componentCreator = Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_1__[\"styled\"])(Component);\n  return function (style, options) {\n    return componentCreator(style, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      defaultTheme: _defaultTheme__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n    }, options));\n  };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (styled);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/styled.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js ***!
+  \******************************************************************************/
+/*! exports provided: easing, duration, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"easing\", function() { return easing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"duration\", function() { return duration; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nvar easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\n\nvar duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\n\nfunction formatMs(milliseconds) {\n  return \"\".concat(Math.round(milliseconds), \"ms\");\n}\n/**\n * @param {string|Array} props\n * @param {object} param\n * @param {string} param.prop\n * @param {number} param.duration\n * @param {string} param.easing\n * @param {number} param.delay\n */\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  easing: easing,\n  duration: duration,\n  create: function create() {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['all'];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var _options$duration = options.duration,\n        durationOption = _options$duration === void 0 ? duration.standard : _options$duration,\n        _options$easing = options.easing,\n        easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing,\n        _options$delay = options.delay,\n        delay = _options$delay === void 0 ? 0 : _options$delay,\n        other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(options, [\"duration\", \"easing\", \"delay\"]);\n\n    if (true) {\n      var isString = function isString(value) {\n        return typeof value === 'string';\n      };\n\n      var isNumber = function isNumber(value) {\n        return !isNaN(parseFloat(value));\n      };\n\n      if (!isString(props) && !Array.isArray(props)) {\n        console.error('Material-UI: Argument \"props\" must be a string or Array.');\n      }\n\n      if (!isNumber(durationOption) && !isString(durationOption)) {\n        console.error(\"Material-UI: Argument \\\"duration\\\" must be a number or a string but found \".concat(durationOption, \".\"));\n      }\n\n      if (!isString(easingOption)) {\n        console.error('Material-UI: Argument \"easing\" must be a string.');\n      }\n\n      if (!isNumber(delay) && !isString(delay)) {\n        console.error('Material-UI: Argument \"delay\" must be a number or a string.');\n      }\n\n      if (Object.keys(other).length !== 0) {\n        console.error(\"Material-UI: Unrecognized argument(s) [\".concat(Object.keys(other).join(','), \"].\"));\n      }\n    }\n\n    return (Array.isArray(props) ? props : [props]).map(function (animatedProp) {\n      return \"\".concat(animatedProp, \" \").concat(typeof durationOption === 'string' ? durationOption : formatMs(durationOption), \" \").concat(easingOption, \" \").concat(typeof delay === 'string' ? delay : formatMs(delay));\n    }).join(',');\n  },\n  getAutoHeightDuration: function getAutoHeightDuration(height) {\n    if (!height) {\n      return 0;\n    }\n\n    var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n\n    return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10);\n  }\n});\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/transitions.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useTheme; });\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js\");\n\n\n\nfunction useTheme() {\n  var theme = Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_0__[\"useTheme\"])() || _defaultTheme__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_1___default.a.useDebugValue(theme);\n  }\n\n  return theme;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/useTheme.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js ***!
+  \*****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/styles */ \"./jaas-client/node_modules/@material-ui/styles/esm/index.js\");\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultTheme */ \"./jaas-client/node_modules/@material-ui/core/esm/styles/defaultTheme.js\");\n\n\n\n\nfunction withStyles(stylesOrCreator, options) {\n  return Object(_material_ui_styles__WEBPACK_IMPORTED_MODULE_1__[\"withStyles\"])(stylesOrCreator, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n    defaultTheme: _defaultTheme__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n  }, options));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (withStyles);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/withStyles.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js ***!
+  \*************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nvar zIndex = {\n  mobileStepper: 1000,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (zIndex);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/styles/zIndex.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js ***!
+  \*****************************************************************************/
+/*! exports provided: reflow, getTransitionProps */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reflow\", function() { return reflow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getTransitionProps\", function() { return getTransitionProps; });\nvar reflow = function reflow(node) {\n  return node.scrollTop;\n};\nfunction getTransitionProps(props, options) {\n  var timeout = props.timeout,\n      _props$style = props.style,\n      style = _props$style === void 0 ? {} : _props$style;\n  return {\n    duration: style.transitionDuration || typeof timeout === 'number' ? timeout : timeout[options.mode] || 0,\n    delay: style.transitionDelay\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/transitions/utils.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return capitalize; });\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word a the sentence.\n// We only handle the first word.\nfunction capitalize(string) {\n  if (typeof string !== 'string') {\n    throw new Error( true ? \"Material-UI: capitalize(string) expects a string argument.\" : undefined);\n  }\n\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/capitalize.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js":
+/*!***************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js ***!
+  \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createChainedFunction; });\n/**\n * Safe chained function\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n *\n * @param {function} functions to chain\n * @returns {function|null}\n */\nfunction createChainedFunction() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  return funcs.reduce(function (acc, func) {\n    if (func == null) {\n      return acc;\n    }\n\n    if (true) {\n      if (typeof func !== 'function') {\n        console.error('Material-UI: Invalid Argument Type, must only provide functions, undefined, or null.');\n      }\n    }\n\n    return function chainedFunction() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      acc.apply(this, args);\n      func.apply(this, args);\n    };\n  }, function () {});\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/createChainedFunction.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createSvgIcon; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _SvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../SvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js\");\n\n\n\n/**\n * Private module reserved for @material-ui/x packages.\n */\n\nfunction createSvgIcon(path, displayName) {\n  var Component = function Component(props, ref) {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_SvgIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      ref: ref\n    }, props), path);\n  };\n\n  if (true) {\n    // Need to set `displayName` on the inner component for React.memo.\n    // React prior to 16.14 ignores `displayName` on the wrapper.\n    Component.displayName = \"\".concat(displayName, \"Icon\");\n  }\n\n  Component.muiName = _SvgIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"].muiName;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.memo( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.forwardRef(Component));\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/createSvgIcon.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js":
+/*!**************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js ***!
+  \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return debounce; });\n// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nfunction debounce(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 166;\n  var timeout;\n\n  function debounced() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    // eslint-disable-next-line consistent-this\n    var that = this;\n\n    var later = function later() {\n      func.apply(that, args);\n    };\n\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  }\n\n  debounced.clear = function () {\n    clearTimeout(timeout);\n  };\n\n  return debounced;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/debounce.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getScrollbarSize; });\n// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/3ffe3a5d82f6f561b82ff78d82b32a7d14aed558/js/src/modal.js#L512-L519\nfunction getScrollbarSize() {\n  var scrollDiv = document.createElement('div');\n  scrollDiv.style.width = '99px';\n  scrollDiv.style.height = '99px';\n  scrollDiv.style.position = 'absolute';\n  scrollDiv.style.top = '-9999px';\n  scrollDiv.style.overflow = 'scroll';\n  document.body.appendChild(scrollDiv);\n  var scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n  document.body.removeChild(scrollDiv);\n  return scrollbarSize;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/getScrollbarSize.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js ***!
+  \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return isMuiElement; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction isMuiElement(element, muiNames) {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"](element) && muiNames.indexOf(element.type.muiName) !== -1;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/isMuiElement.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ownerDocument; });\nfunction ownerDocument(node) {\n  return node && node.ownerDocument || document;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js ***!
+  \*****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ownerWindow; });\n/* harmony import */ var _ownerDocument__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ownerDocument */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/ownerDocument.js\");\n\nfunction ownerWindow(node) {\n  var doc = Object(_ownerDocument__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node);\n  return doc.defaultView || window;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/ownerWindow.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/requirePropFactory.js":
+/*!************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/requirePropFactory.js ***!
+  \************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return requirePropFactory; });\nfunction requirePropFactory(componentNameInError) {\n  if (false) {}\n\n  var requireProp = function requireProp(requiredProp) {\n    return function (props, propName, componentName, location, propFullName) {\n      var propFullNameSafe = propFullName || propName;\n\n      if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n        return new Error(\"The prop `\".concat(propFullNameSafe, \"` of \") + \"`\".concat(componentNameInError, \"` must be used on `\").concat(requiredProp, \"`.\"));\n      }\n\n      return null;\n    };\n  };\n\n  return requireProp;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/requirePropFactory.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return setRef; });\n// TODO v5: consider to make it private\nfunction setRef(ref, value) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useControlled; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\n\nfunction useControlled(_ref) {\n  var controlled = _ref.controlled,\n      defaultProp = _ref.default,\n      name = _ref.name,\n      _ref$state = _ref.state,\n      state = _ref$state === void 0 ? 'value' : _ref$state;\n\n  var _React$useRef = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](controlled !== undefined),\n      isControlled = _React$useRef.current;\n\n  var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"](defaultProp),\n      valueState = _React$useState[0],\n      setValue = _React$useState[1];\n\n  var value = isControlled ? controlled : valueState;\n\n  if (true) {\n    react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"](function () {\n      if (isControlled !== (controlled !== undefined)) {\n        console.error([\"Material-UI: A component is changing the \".concat(isControlled ? '' : 'un', \"controlled \").concat(state, \" state of \").concat(name, \" to be \").concat(isControlled ? 'un' : '', \"controlled.\"), 'Elements should not switch from uncontrolled to controlled (or vice versa).', \"Decide between using a controlled or uncontrolled \".concat(name, \" \") + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render, it's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n      }\n    }, [controlled]);\n\n    var _React$useRef2 = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](defaultProp),\n        defaultValue = _React$useRef2.current;\n\n    react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"](function () {\n      if (!isControlled && defaultValue !== defaultProp) {\n        console.error([\"Material-UI: A component is changing the default \".concat(state, \" state of an uncontrolled \").concat(name, \" after being initialized. \") + \"To suppress this warning opt to use a controlled \".concat(name, \".\")].join('\\n'));\n      }\n    }, [JSON.stringify(defaultProp)]);\n  }\n\n  var setValueIfUncontrolled = react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"](function (newValue) {\n    if (!isControlled) {\n      setValue(newValue);\n    }\n  }, []);\n  return [value, setValueIfUncontrolled];\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/useControlled.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useEventCallback; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"] : react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n/**\n * https://github.com/facebook/react/issues/14099#issuecomment-440013892\n *\n * @param {function} fn\n */\n\nfunction useEventCallback(fn) {\n  var ref = react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"](fn);\n  useEnhancedEffect(function () {\n    ref.current = fn;\n  });\n  return react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"](function () {\n    return (0, ref.current).apply(void 0, arguments);\n  }, []);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/useEventCallback.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useForkRef; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _setRef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setRef */ \"./jaas-client/node_modules/@material-ui/core/esm/utils/setRef.js\");\n\n\nfunction useForkRef(refA, refB) {\n  /**\n   * This will create a new function if the ref props change and are defined.\n   * This means react will call the old forkRef with `null` and the new forkRef\n   * with the ref. Cleanup naturally emerges from this behavior\n   */\n  return react__WEBPACK_IMPORTED_MODULE_0__[\"useMemo\"](function () {\n    if (refA == null && refB == null) {\n      return null;\n    }\n\n    return function (refValue) {\n      Object(_setRef__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(refA, refValue);\n      Object(_setRef__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(refB, refValue);\n    };\n  }, [refA, refB]);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/useForkRef.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js ***!
+  \***********************************************************************************/
+/*! exports provided: teardown, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"teardown\", function() { return teardown; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useIsFocusVisible; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\n\n\nvar hadKeyboardEvent = true;\nvar hadFocusVisibleRecently = false;\nvar hadFocusVisibleRecentlyTimeout = null;\nvar inputTypesWhitelist = {\n  text: true,\n  search: true,\n  url: true,\n  tel: true,\n  email: true,\n  password: true,\n  number: true,\n  date: true,\n  month: true,\n  week: true,\n  time: true,\n  datetime: true,\n  'datetime-local': true\n};\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @return {boolean}\n */\n\nfunction focusTriggersKeyboardModality(node) {\n  var type = node.type,\n      tagName = node.tagName;\n\n  if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n    return true;\n  }\n\n  if (tagName === 'TEXTAREA' && !node.readOnly) {\n    return true;\n  }\n\n  if (node.isContentEditable) {\n    return true;\n  }\n\n  return false;\n}\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\n\n\nfunction handleKeyDown(event) {\n  if (event.metaKey || event.altKey || event.ctrlKey) {\n    return;\n  }\n\n  hadKeyboardEvent = true;\n}\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\n\n\nfunction handlePointerDown() {\n  hadKeyboardEvent = false;\n}\n\nfunction handleVisibilityChange() {\n  if (this.visibilityState === 'hidden') {\n    // If the tab becomes active again, the browser will handle calling focus\n    // on the element (Safari actually calls it twice).\n    // If this tab change caused a blur on an element with focus-visible,\n    // re-apply the class when the user switches back to the tab.\n    if (hadFocusVisibleRecently) {\n      hadKeyboardEvent = true;\n    }\n  }\n}\n\nfunction prepare(doc) {\n  doc.addEventListener('keydown', handleKeyDown, true);\n  doc.addEventListener('mousedown', handlePointerDown, true);\n  doc.addEventListener('pointerdown', handlePointerDown, true);\n  doc.addEventListener('touchstart', handlePointerDown, true);\n  doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\n\nfunction teardown(doc) {\n  doc.removeEventListener('keydown', handleKeyDown, true);\n  doc.removeEventListener('mousedown', handlePointerDown, true);\n  doc.removeEventListener('pointerdown', handlePointerDown, true);\n  doc.removeEventListener('touchstart', handlePointerDown, true);\n  doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\n\nfunction isFocusVisible(event) {\n  var target = event.target;\n\n  try {\n    return target.matches(':focus-visible');\n  } catch (error) {} // browsers not implementing :focus-visible will throw a SyntaxError\n  // we use our own heuristic for those browsers\n  // rethrow might be better if it's not the expected error but do we really\n  // want to crash if focus-visible malfunctioned?\n  // no need for validFocusTarget check. the user does that by attaching it to\n  // focusable events only\n\n\n  return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\n/**\n * Should be called if a blur event is fired on a focus-visible element\n */\n\n\nfunction handleBlurVisible() {\n  // To detect a tab/window switch, we look for a blur event followed\n  // rapidly by a visibility change.\n  // If we don't see a visibility change within 100ms, it's probably a\n  // regular focus change.\n  hadFocusVisibleRecently = true;\n  window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n  hadFocusVisibleRecentlyTimeout = window.setTimeout(function () {\n    hadFocusVisibleRecently = false;\n  }, 100);\n}\n\nfunction useIsFocusVisible() {\n  var ref = react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"](function (instance) {\n    var node = react_dom__WEBPACK_IMPORTED_MODULE_1__[\"findDOMNode\"](instance);\n\n    if (node != null) {\n      prepare(node.ownerDocument);\n    }\n  }, []);\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_0__[\"useDebugValue\"](isFocusVisible);\n  }\n\n  return {\n    isFocusVisible: isFocusVisible,\n    onBlurVisible: handleBlurVisible,\n    ref: ref\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/icons/LockOutlined.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/icons/LockOutlined.js ***!
+  \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\"));\n\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(/*! ./utils/createSvgIcon */ \"./jaas-client/node_modules/@material-ui/icons/utils/createSvgIcon.js\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9V6zm9 14H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z\"\n}), 'LockOutlined');\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/icons/LockOutlined.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/icons/utils/createSvgIcon.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/icons/utils/createSvgIcon.js ***!
+  \****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./jaas-client/node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createSvgIcon;\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/extends.js\"));\n\nvar _react = _interopRequireDefault(__webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\"));\n\nvar _SvgIcon = _interopRequireDefault(__webpack_require__(/*! @material-ui/core/SvgIcon */ \"./jaas-client/node_modules/@material-ui/core/esm/SvgIcon/index.js\"));\n\nfunction createSvgIcon(path, displayName) {\n  var Component = _react.default.memo(_react.default.forwardRef(function (props, ref) {\n    return _react.default.createElement(_SvgIcon.default, (0, _extends2.default)({\n      ref: ref\n    }, props), path);\n  }));\n\n  if (true) {\n    Component.displayName = \"\".concat(displayName, \"Icon\");\n  }\n\n  Component.muiName = _SvgIcon.default.muiName;\n  return Component;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/icons/utils/createSvgIcon.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js":
+/*!*************************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js ***!
+  \*************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ServerStyleSheets; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n/* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../StylesProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js\");\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../createGenerateClassName */ \"./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js\");\n\n\n\n\n\n\n\n\nvar ServerStyleSheets = /*#__PURE__*/function () {\n  function ServerStyleSheets() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    Object(_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, ServerStyleSheets);\n\n    this.options = options;\n  }\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(ServerStyleSheets, [{\n    key: \"collect\",\n    value: function collect(children) {\n      // This is needed in order to deduplicate the injection of CSS in the page.\n      var sheetsManager = new Map(); // This is needed in order to inject the critical CSS.\n\n      this.sheetsRegistry = new jss__WEBPACK_IMPORTED_MODULE_4__[\"SheetsRegistry\"](); // A new class name generator\n\n      var generateClassName = Object(_createGenerateClassName__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_StylesProvider__WEBPACK_IMPORTED_MODULE_5__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        sheetsManager: sheetsManager,\n        serverGenerateClassName: generateClassName,\n        sheetsRegistry: this.sheetsRegistry\n      }, this.options), children);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.sheetsRegistry ? this.sheetsRegistry.toString() : '';\n    }\n  }, {\n    key: \"getStyleElement\",\n    value: function getStyleElement(props) {\n      return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement('style', Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        id: 'jss-server-side',\n        key: 'jss-server-side',\n        dangerouslySetInnerHTML: {\n          __html: this.toString()\n        }\n      }, props));\n    }\n  }]);\n\n  return ServerStyleSheets;\n}();\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/index.js":
+/*!*************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/index.js ***!
+  \*************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ServerStyleSheets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ServerStyleSheets */ \"./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _ServerStyleSheets__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js":
+/*!*******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js ***!
+  \*******************************************************************************************/
+/*! exports provided: sheetsManager, StylesContext, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sheetsManager\", function() { return sheetsManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StylesContext\", function() { return StylesContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return StylesProvider; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../createGenerateClassName */ \"./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js\");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n/* harmony import */ var _jssPreset__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../jssPreset */ \"./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js\");\n\n\n\n\n\n\n\n // Default JSS instance.\n\nvar jss = Object(jss__WEBPACK_IMPORTED_MODULE_6__[\"create\"])(Object(_jssPreset__WEBPACK_IMPORTED_MODULE_7__[\"default\"])()); // Use a singleton or the provided one by the context.\n//\n// The counter-based approach doesn't tolerate any mistake.\n// It's much safer to use the same counter everywhere.\n\nvar generateClassName = Object(_createGenerateClassName__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(); // Exported for test purposes\n\nvar sheetsManager = new Map();\nvar defaultOptions = {\n  disableGeneration: false,\n  generateClassName: generateClassName,\n  jss: jss,\n  sheetsCache: null,\n  sheetsManager: sheetsManager,\n  sheetsRegistry: null\n};\nvar StylesContext = react__WEBPACK_IMPORTED_MODULE_2___default.a.createContext(defaultOptions);\n\nif (true) {\n  StylesContext.displayName = 'StylesContext';\n}\n\nvar injectFirstNode;\nfunction StylesProvider(props) {\n  var children = props.children,\n      _props$injectFirst = props.injectFirst,\n      injectFirst = _props$injectFirst === void 0 ? false : _props$injectFirst,\n      _props$disableGenerat = props.disableGeneration,\n      disableGeneration = _props$disableGenerat === void 0 ? false : _props$disableGenerat,\n      localOptions = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"injectFirst\", \"disableGeneration\"]);\n\n  var outerOptions = react__WEBPACK_IMPORTED_MODULE_2___default.a.useContext(StylesContext);\n\n  var context = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, outerOptions), {}, {\n    disableGeneration: disableGeneration\n  }, localOptions);\n\n  if (true) {\n    if (typeof window === 'undefined' && !context.sheetsManager) {\n      console.error('Material-UI: You need to use the ServerStyleSheets API when rendering on the server.');\n    }\n  }\n\n  if (true) {\n    if (context.jss.options.insertionPoint && injectFirst) {\n      console.error('Material-UI: You cannot use a custom insertionPoint and <StylesContext injectFirst> at the same time.');\n    }\n  }\n\n  if (true) {\n    if (injectFirst && localOptions.jss) {\n      console.error('Material-UI: You cannot use the jss and injectFirst props at the same time.');\n    }\n  }\n\n  if (!context.jss.options.insertionPoint && injectFirst && typeof window !== 'undefined') {\n    if (!injectFirstNode) {\n      var head = document.head;\n      injectFirstNode = document.createComment('mui-inject-first');\n      head.insertBefore(injectFirstNode, head.firstChild);\n    }\n\n    context.jss = Object(jss__WEBPACK_IMPORTED_MODULE_6__[\"create\"])({\n      plugins: Object(_jssPreset__WEBPACK_IMPORTED_MODULE_7__[\"default\"])().plugins,\n      insertionPoint: injectFirstNode\n    });\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(StylesContext.Provider, {\n    value: context\n  }, children);\n}\n true ? StylesProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node.isRequired,\n\n  /**\n   * You can disable the generation of the styles with this option.\n   * It can be useful when traversing the React tree outside of the HTML\n   * rendering step on the server.\n   * Let's say you are using react-apollo to extract all\n   * the queries made by the interface server-side - you can significantly speed up the traversal with this prop.\n   */\n  disableGeneration: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * JSS's class name generator.\n   */\n  generateClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * By default, the styles are injected last in the <head> element of the page.\n   * As a result, they gain more specificity than any other style sheet.\n   * If you want to override Material-UI's styles, set this prop.\n   */\n  injectFirst: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool,\n\n  /**\n   * JSS's instance.\n   */\n  jss: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   */\n  serverGenerateClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * @ignore\n   *\n   * Beta feature.\n   *\n   * Cache for the sheets.\n   */\n  sheetsCache: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   *\n   * The sheetsManager is used to deduplicate style sheet injection in the page.\n   * It's deduplicating using the (theme, styles) couple.\n   * On the server, you should provide a new instance for each request.\n   */\n  sheetsManager: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n  /**\n   * @ignore\n   *\n   * Collect the sheets.\n   */\n  sheetsRegistry: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object\n} : undefined;\n\nif (true) {\n   true ? StylesProvider.propTypes = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_4__[\"exactProp\"])(StylesProvider.propTypes) : undefined;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js ***!
+  \**********************************************************************************/
+/*! exports provided: default, sheetsManager, StylesContext */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./StylesProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sheetsManager\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_0__[\"sheetsManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesContext\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_0__[\"StylesContext\"]; });\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js":
+/*!*****************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js ***!
+  \*****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _useTheme_ThemeContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../useTheme/ThemeContext */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n/* harmony import */ var _nested__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./nested */ \"./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js\");\n\n\n\n\n\n\n // To support composition of theme.\n\nfunction mergeOuterLocalTheme(outerTheme, localTheme) {\n  if (typeof localTheme === 'function') {\n    var mergedTheme = localTheme(outerTheme);\n\n    if (true) {\n      if (!mergedTheme) {\n        console.error(['Material-UI: You should return an object from your theme function, i.e.', '<ThemeProvider theme={() => ({})} />'].join('\\n'));\n      }\n    }\n\n    return mergedTheme;\n  }\n\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, outerTheme), localTheme);\n}\n/**\n * This component takes a `theme` prop.\n * It makes the `theme` available down the React tree thanks to React context.\n * This component should preferably be used at **the root of your component tree**.\n */\n\n\nfunction ThemeProvider(props) {\n  var children = props.children,\n      localTheme = props.theme;\n  var outerTheme = Object(_useTheme__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n\n  if (true) {\n    if (outerTheme === null && typeof localTheme === 'function') {\n      console.error(['Material-UI: You are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n    }\n  }\n\n  var theme = react__WEBPACK_IMPORTED_MODULE_1___default.a.useMemo(function () {\n    var output = outerTheme === null ? localTheme : mergeOuterLocalTheme(outerTheme, localTheme);\n\n    if (output != null) {\n      output[_nested__WEBPACK_IMPORTED_MODULE_6__[\"default\"]] = outerTheme !== null;\n    }\n\n    return output;\n  }, [localTheme, outerTheme]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_useTheme_ThemeContext__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Provider, {\n    value: theme\n  }, children);\n}\n\n true ? ThemeProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node.isRequired,\n\n  /**\n   * A theme object. You can provide a function to extend the outer theme.\n   */\n  theme: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func]).isRequired\n} : undefined;\n\nif (true) {\n   true ? ThemeProvider.propTypes = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_3__[\"exactProp\"])(ThemeProvider.propTypes) : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ThemeProvider);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/index.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/index.js ***!
+  \*********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ThemeProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ThemeProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _ThemeProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n/* harmony default export */ __webpack_exports__[\"default\"] = (hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__');\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js":
+/*!*************************************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js ***!
+  \*************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createGenerateClassName; });\n/* harmony import */ var _ThemeProvider_nested__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ThemeProvider/nested */ \"./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/nested.js\");\n\n/**\n * This is the list of the style rule name we use as drop in replacement for the built-in\n * pseudo classes (:checked, :disabled, :focused, etc.).\n *\n * Why do they exist in the first place?\n * These classes are used at a specificity of 2.\n * It allows them to override previously definied styles as well as\n * being untouched by simple user overrides.\n */\n\nvar pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected']; // Returns a function which generates unique class names based on counters.\n// When new generator function is created, rule counter is reset.\n// We need to reset the rule counter for SSR for each request.\n//\n// It's inspired by\n// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js\n\nfunction createGenerateClassName() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _options$disableGloba = options.disableGlobal,\n      disableGlobal = _options$disableGloba === void 0 ? false : _options$disableGloba,\n      _options$productionPr = options.productionPrefix,\n      productionPrefix = _options$productionPr === void 0 ? 'jss' : _options$productionPr,\n      _options$seed = options.seed,\n      seed = _options$seed === void 0 ? '' : _options$seed;\n  var seedPrefix = seed === '' ? '' : \"\".concat(seed, \"-\");\n  var ruleCounter = 0;\n\n  var getNextCounterId = function getNextCounterId() {\n    ruleCounter += 1;\n\n    if (true) {\n      if (ruleCounter >= 1e10) {\n        console.warn(['Material-UI: You might have a memory leak.', 'The ruleCounter is not supposed to grow that much.'].join(''));\n      }\n    }\n\n    return ruleCounter;\n  };\n\n  return function (rule, styleSheet) {\n    var name = styleSheet.options.name; // Is a global static MUI style?\n\n    if (name && name.indexOf('Mui') === 0 && !styleSheet.options.link && !disableGlobal) {\n      // We can use a shorthand class name, we never use the keys to style the components.\n      if (pseudoClasses.indexOf(rule.key) !== -1) {\n        return \"Mui-\".concat(rule.key);\n      }\n\n      var prefix = \"\".concat(seedPrefix).concat(name, \"-\").concat(rule.key);\n\n      if (!styleSheet.options.theme[_ThemeProvider_nested__WEBPACK_IMPORTED_MODULE_0__[\"default\"]] || seed !== '') {\n        return prefix;\n      }\n\n      return \"\".concat(prefix, \"-\").concat(getNextCounterId());\n    }\n\n    if (false) {}\n\n    var suffix = \"\".concat(rule.key, \"-\").concat(getNextCounterId()); // Help with debuggability.\n\n    if (styleSheet.options.classNamePrefix) {\n      return \"\".concat(seedPrefix).concat(styleSheet.options.classNamePrefix, \"-\").concat(suffix);\n    }\n\n    return \"\".concat(seedPrefix).concat(suffix);\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js":
+/*!*******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js ***!
+  \*******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createGenerateClassName */ \"./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _createGenerateClassName__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/createStyles/createStyles.js":
+/*!***************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/createStyles/createStyles.js ***!
+  \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createStyles; });\nfunction createStyles(styles) {\n  return styles;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/createStyles/createStyles.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/createStyles/index.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/createStyles/index.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _createStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/createStyles/createStyles.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _createStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/createStyles/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js":
+/*!***********************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js ***!
+  \***********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getStylesCreator; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _noopTheme__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./noopTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js\");\n\n\n\n\nfunction getStylesCreator(stylesOrCreator) {\n  var themingEnabled = typeof stylesOrCreator === 'function';\n\n  if (true) {\n    if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(stylesOrCreator) !== 'object' && !themingEnabled) {\n      console.error(['Material-UI: The `styles` argument provided is invalid.', 'You need to provide a function generating the styles or a styles object.'].join('\\n'));\n    }\n  }\n\n  return {\n    create: function create(theme, name) {\n      var styles;\n\n      try {\n        styles = themingEnabled ? stylesOrCreator(theme) : stylesOrCreator;\n      } catch (err) {\n        if (true) {\n          if (themingEnabled === true && theme === _noopTheme__WEBPACK_IMPORTED_MODULE_3__[\"default\"]) {\n            // TODO: prepend error message/name instead\n            console.error(['Material-UI: The `styles` argument provided is invalid.', 'You are providing a function without a theme in the context.', 'One of the parent elements needs to use a ThemeProvider.'].join('\\n'));\n          }\n        }\n\n        throw err;\n      }\n\n      if (!name || !theme.overrides || !theme.overrides[name]) {\n        return styles;\n      }\n\n      var overrides = theme.overrides[name];\n\n      var stylesWithOverrides = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, styles);\n\n      Object.keys(overrides).forEach(function (key) {\n        if (true) {\n          if (!stylesWithOverrides[key]) {\n            console.warn(['Material-UI: You are trying to override a style that does not exist.', \"Fix the `\".concat(key, \"` key of `theme.overrides.\").concat(name, \"`.\")].join('\\n'));\n          }\n        }\n\n        stylesWithOverrides[key] = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__[\"deepmerge\"])(stylesWithOverrides[key], overrides[key]);\n      });\n      return stylesWithOverrides;\n    },\n    options: {}\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/index.js":
+/*!************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/index.js ***!
+  \************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getStylesCreator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getStylesCreator */ \"./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _getStylesCreator__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js":
+/*!****************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js ***!
+  \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n// We use the same empty object to ref count the styles that don't need a theme object.\nvar noopTheme = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = (noopTheme);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js":
+/*!*****************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js ***!
+  \*****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getThemeProps; });\n/* eslint-disable no-restricted-syntax */\nfunction getThemeProps(params) {\n  var theme = params.theme,\n      name = params.name,\n      props = params.props;\n\n  if (!theme || !theme.props || !theme.props[name]) {\n    return props;\n  } // Resolve default props, code borrow from React source.\n  // https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L221\n\n\n  var defaultProps = theme.props[name];\n  var propName;\n\n  for (propName in defaultProps) {\n    if (props[propName] === undefined) {\n      props[propName] = defaultProps[propName];\n    }\n  }\n\n  return props;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js ***!
+  \*********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getThemeProps__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getThemeProps */ \"./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _getThemeProps__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/index.js":
+/*!*******************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/index.js ***!
+  \*******************************************************************/
+/*! exports provided: createGenerateClassName, createStyles, getThemeProps, jssPreset, makeStyles, mergeClasses, ServerStyleSheets, styled, StylesProvider, sheetsManager, StylesContext, ThemeProvider, useTheme, withStyles, withTheme, withThemeCreator */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createGenerateClassName */ \"./jaas-client/node_modules/@material-ui/styles/esm/createGenerateClassName/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createGenerateClassName\", function() { return _createGenerateClassName__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _createStyles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/createStyles/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createStyles\", function() { return _createStyles__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _getThemeProps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getThemeProps */ \"./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getThemeProps\", function() { return _getThemeProps__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _jssPreset__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./jssPreset */ \"./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"jssPreset\", function() { return _jssPreset__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./makeStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"makeStyles\", function() { return _makeStyles__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _mergeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./mergeClasses */ \"./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"mergeClasses\", function() { return _mergeClasses__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _ServerStyleSheets__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ServerStyleSheets */ \"./jaas-client/node_modules/@material-ui/styles/esm/ServerStyleSheets/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ServerStyleSheets\", function() { return _ServerStyleSheets__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _styled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styled */ \"./jaas-client/node_modules/@material-ui/styles/esm/styled/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"styled\", function() { return _styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./StylesProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesProvider\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sheetsManager\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_9__[\"sheetsManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesContext\", function() { return _StylesProvider__WEBPACK_IMPORTED_MODULE_9__[\"StylesContext\"]; });\n\n/* harmony import */ var _ThemeProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ThemeProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/ThemeProvider/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ThemeProvider\", function() { return _ThemeProvider__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useTheme\", function() { return _useTheme__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _withStyles__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./withStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/withStyles/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withStyles\", function() { return _withStyles__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* empty/unused harmony star reexport *//* harmony import */ var _withTheme__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./withTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/withTheme/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withTheme\", function() { return _withTheme__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withThemeCreator\", function() { return _withTheme__WEBPACK_IMPORTED_MODULE_13__[\"withThemeCreator\"]; });\n\n/** @license Material-UI v4.10.0\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/* eslint-disable import/export */\n\n/* Warning if there are several instances of @material-ui/styles */\n\nif ( true && typeof window !== 'undefined') {\n  _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"ponyfillGlobal\"]['__@material-ui/styles-init__'] = _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"ponyfillGlobal\"]['__@material-ui/styles-init__'] || 0;\n\n  if (_material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"ponyfillGlobal\"]['__@material-ui/styles-init__'] === 1) {\n    console.warn(['It looks like there are several instances of `@material-ui/styles` initialized in this application.', 'This may cause theme propagation issues, broken class names, ' + 'specificity issues, and makes your application bigger without a good reason.', '', 'See https://material-ui.com/r/styles-instance-warning for more info.'].join('\\n'));\n  }\n\n  _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"ponyfillGlobal\"]['__@material-ui/styles-init__'] += 1;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js ***!
+  \*****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _jssPreset__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jssPreset */ \"./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _jssPreset__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js ***!
+  \*********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return jssPreset; });\n/* harmony import */ var jss_plugin_rule_value_function__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jss-plugin-rule-value-function */ \"./jaas-client/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js\");\n/* harmony import */ var jss_plugin_global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss-plugin-global */ \"./jaas-client/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js\");\n/* harmony import */ var jss_plugin_nested__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jss-plugin-nested */ \"./jaas-client/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js\");\n/* harmony import */ var jss_plugin_camel_case__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jss-plugin-camel-case */ \"./jaas-client/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js\");\n/* harmony import */ var jss_plugin_default_unit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! jss-plugin-default-unit */ \"./jaas-client/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js\");\n/* harmony import */ var jss_plugin_vendor_prefixer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! jss-plugin-vendor-prefixer */ \"./jaas-client/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js\");\n/* harmony import */ var jss_plugin_props_sort__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! jss-plugin-props-sort */ \"./jaas-client/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js\");\n\n\n\n\n\n\n // Subset of jss-preset-default with only the plugins the Material-UI components are using.\n\nfunction jssPreset() {\n  return {\n    plugins: [Object(jss_plugin_rule_value_function__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(), Object(jss_plugin_global__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(), Object(jss_plugin_nested__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(), Object(jss_plugin_camel_case__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(), Object(jss_plugin_default_unit__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(), // Disable the vendor prefixer server-side, it does nothing.\n    // This way, we can get a performance boost.\n    // In the documentation, we are using `autoprefixer` to solve this problem.\n    typeof window === 'undefined' ? null : Object(jss_plugin_vendor_prefixer__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(), Object(jss_plugin_props_sort__WEBPACK_IMPORTED_MODULE_6__[\"default\"])()]\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js ***!
+  \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./makeStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _makeStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js":
+/*!*************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js ***!
+  \*************************************************************************************/
+/*! exports provided: increment */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"increment\", function() { return increment; });\n/* eslint-disable import/prefer-default-export */\n// Global index counter to preserve source order.\n// We create the style sheet during the creation of the component,\n// children are handled after the parents, so the order of style elements would be parent->child.\n// It is a problem though when a parent passes a className\n// which needs to override any child's styles.\n// StyleSheet of the child has a higher specificity, because of the source order.\n// So our solution is to render sheets them in the reverse order child->sheet, so\n// that parent has a higher specificity.\nvar indexCounter = -1e9;\nfunction increment() {\n  indexCounter += 1;\n\n  if (true) {\n    if (indexCounter >= 0) {\n      console.warn(['Material-UI: You might have a memory leak.', 'The indexCounter is not supposed to grow that much.'].join('\\n'));\n    }\n  }\n\n  return indexCounter;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js ***!
+  \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return makeStyles; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n/* harmony import */ var _mergeClasses__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../mergeClasses */ \"./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js\");\n/* harmony import */ var _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./multiKeyStore */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n/* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../StylesProvider */ \"./jaas-client/node_modules/@material-ui/styles/esm/StylesProvider/index.js\");\n/* harmony import */ var _indexCounter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./indexCounter */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js\");\n/* harmony import */ var _getStylesCreator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../getStylesCreator */ \"./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/index.js\");\n/* harmony import */ var _getStylesCreator_noopTheme__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../getStylesCreator/noopTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getClasses(_ref, classes, Component) {\n  var state = _ref.state,\n      stylesOptions = _ref.stylesOptions;\n\n  if (stylesOptions.disableGeneration) {\n    return classes || {};\n  }\n\n  if (!state.cacheClasses) {\n    state.cacheClasses = {\n      // Cache for the finalized classes value.\n      value: null,\n      // Cache for the last used classes prop pointer.\n      lastProp: null,\n      // Cache for the last used rendered classes pointer.\n      lastJSS: {}\n    };\n  } // Tracks if either the rendered classes or classes prop has changed,\n  // requiring the generation of a new finalized classes object.\n\n\n  var generate = false;\n\n  if (state.classes !== state.cacheClasses.lastJSS) {\n    state.cacheClasses.lastJSS = state.classes;\n    generate = true;\n  }\n\n  if (classes !== state.cacheClasses.lastProp) {\n    state.cacheClasses.lastProp = classes;\n    generate = true;\n  }\n\n  if (generate) {\n    state.cacheClasses.value = Object(_mergeClasses__WEBPACK_IMPORTED_MODULE_4__[\"default\"])({\n      baseClasses: state.cacheClasses.lastJSS,\n      newClasses: classes,\n      Component: Component\n    });\n  }\n\n  return state.cacheClasses.value;\n}\n\nfunction attach(_ref2, props) {\n  var state = _ref2.state,\n      theme = _ref2.theme,\n      stylesOptions = _ref2.stylesOptions,\n      stylesCreator = _ref2.stylesCreator,\n      name = _ref2.name;\n\n  if (stylesOptions.disableGeneration) {\n    return;\n  }\n\n  var sheetManager = _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].get(stylesOptions.sheetsManager, stylesCreator, theme);\n\n  if (!sheetManager) {\n    sheetManager = {\n      refs: 0,\n      staticSheet: null,\n      dynamicStyles: null\n    };\n    _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].set(stylesOptions.sheetsManager, stylesCreator, theme, sheetManager);\n  }\n\n  var options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, stylesCreator.options), stylesOptions), {}, {\n    theme: theme,\n    flip: typeof stylesOptions.flip === 'boolean' ? stylesOptions.flip : theme.direction === 'rtl'\n  });\n\n  options.generateId = options.serverGenerateClassName || options.generateClassName;\n  var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n  if (sheetManager.refs === 0) {\n    var staticSheet;\n\n    if (stylesOptions.sheetsCache) {\n      staticSheet = _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].get(stylesOptions.sheetsCache, stylesCreator, theme);\n    }\n\n    var styles = stylesCreator.create(theme, name);\n\n    if (!staticSheet) {\n      staticSheet = stylesOptions.jss.createStyleSheet(styles, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        link: false\n      }, options));\n      staticSheet.attach();\n\n      if (stylesOptions.sheetsCache) {\n        _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].set(stylesOptions.sheetsCache, stylesCreator, theme, staticSheet);\n      }\n    }\n\n    if (sheetsRegistry) {\n      sheetsRegistry.add(staticSheet);\n    }\n\n    sheetManager.staticSheet = staticSheet;\n    sheetManager.dynamicStyles = Object(jss__WEBPACK_IMPORTED_MODULE_3__[\"getDynamicStyles\"])(styles);\n  }\n\n  if (sheetManager.dynamicStyles) {\n    var dynamicSheet = stylesOptions.jss.createStyleSheet(sheetManager.dynamicStyles, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      link: true\n    }, options));\n    dynamicSheet.update(props);\n    dynamicSheet.attach();\n    state.dynamicSheet = dynamicSheet;\n    state.classes = Object(_mergeClasses__WEBPACK_IMPORTED_MODULE_4__[\"default\"])({\n      baseClasses: sheetManager.staticSheet.classes,\n      newClasses: dynamicSheet.classes\n    });\n\n    if (sheetsRegistry) {\n      sheetsRegistry.add(dynamicSheet);\n    }\n  } else {\n    state.classes = sheetManager.staticSheet.classes;\n  }\n\n  sheetManager.refs += 1;\n}\n\nfunction update(_ref3, props) {\n  var state = _ref3.state;\n\n  if (state.dynamicSheet) {\n    state.dynamicSheet.update(props);\n  }\n}\n\nfunction detach(_ref4) {\n  var state = _ref4.state,\n      theme = _ref4.theme,\n      stylesOptions = _ref4.stylesOptions,\n      stylesCreator = _ref4.stylesCreator;\n\n  if (stylesOptions.disableGeneration) {\n    return;\n  }\n\n  var sheetManager = _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].get(stylesOptions.sheetsManager, stylesCreator, theme);\n  sheetManager.refs -= 1;\n  var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n  if (sheetManager.refs === 0) {\n    _multiKeyStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].delete(stylesOptions.sheetsManager, stylesCreator, theme);\n    stylesOptions.jss.removeStyleSheet(sheetManager.staticSheet);\n\n    if (sheetsRegistry) {\n      sheetsRegistry.remove(sheetManager.staticSheet);\n    }\n  }\n\n  if (state.dynamicSheet) {\n    stylesOptions.jss.removeStyleSheet(state.dynamicSheet);\n\n    if (sheetsRegistry) {\n      sheetsRegistry.remove(state.dynamicSheet);\n    }\n  }\n}\n\nfunction useSynchronousEffect(func, values) {\n  var key = react__WEBPACK_IMPORTED_MODULE_2___default.a.useRef([]);\n  var output; // Store \"generation\" key. Just returns a new object every time\n\n  var currentKey = react__WEBPACK_IMPORTED_MODULE_2___default.a.useMemo(function () {\n    return {};\n  }, values); // eslint-disable-line react-hooks/exhaustive-deps\n  // \"the first render\", or \"memo dropped the value\"\n\n  if (key.current !== currentKey) {\n    key.current = currentKey;\n    output = func();\n  }\n\n  react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n    return function () {\n      if (output) {\n        output();\n      }\n    };\n  }, [currentKey] // eslint-disable-line react-hooks/exhaustive-deps\n  );\n}\n\nfunction makeStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var name = options.name,\n      classNamePrefixOption = options.classNamePrefix,\n      Component = options.Component,\n      _options$defaultTheme = options.defaultTheme,\n      defaultTheme = _options$defaultTheme === void 0 ? _getStylesCreator_noopTheme__WEBPACK_IMPORTED_MODULE_10__[\"default\"] : _options$defaultTheme,\n      stylesOptions2 = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(options, [\"name\", \"classNamePrefix\", \"Component\", \"defaultTheme\"]);\n\n  var stylesCreator = Object(_getStylesCreator__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(stylesOrCreator);\n  var classNamePrefix = name || classNamePrefixOption || 'makeStyles';\n  stylesCreator.options = {\n    index: Object(_indexCounter__WEBPACK_IMPORTED_MODULE_8__[\"increment\"])(),\n    name: name,\n    meta: classNamePrefix,\n    classNamePrefix: classNamePrefix\n  };\n\n  var useStyles = function useStyles() {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var theme = Object(_useTheme__WEBPACK_IMPORTED_MODULE_6__[\"default\"])() || defaultTheme;\n\n    var stylesOptions = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, react__WEBPACK_IMPORTED_MODULE_2___default.a.useContext(_StylesProvider__WEBPACK_IMPORTED_MODULE_7__[\"StylesContext\"])), stylesOptions2);\n\n    var instance = react__WEBPACK_IMPORTED_MODULE_2___default.a.useRef();\n    var shouldUpdate = react__WEBPACK_IMPORTED_MODULE_2___default.a.useRef();\n    useSynchronousEffect(function () {\n      var current = {\n        name: name,\n        state: {},\n        stylesCreator: stylesCreator,\n        stylesOptions: stylesOptions,\n        theme: theme\n      };\n      attach(current, props);\n      shouldUpdate.current = false;\n      instance.current = current;\n      return function () {\n        detach(current);\n      };\n    }, [theme, stylesCreator]);\n    react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n      if (shouldUpdate.current) {\n        update(instance.current, props);\n      }\n\n      shouldUpdate.current = true;\n    });\n    var classes = getClasses(instance.current, props.classes, Component);\n\n    if (true) {\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      react__WEBPACK_IMPORTED_MODULE_2___default.a.useDebugValue(classes);\n    }\n\n    return classes;\n  };\n\n  return useStyles;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js":
+/*!**************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js ***!
+  \**************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n// Used https://github.com/thinkloop/multi-key-cache as inspiration\nvar multiKeyStore = {\n  set: function set(cache, key1, key2, value) {\n    var subCache = cache.get(key1);\n\n    if (!subCache) {\n      subCache = new Map();\n      cache.set(key1, subCache);\n    }\n\n    subCache.set(key2, value);\n  },\n  get: function get(cache, key1, key2) {\n    var subCache = cache.get(key1);\n    return subCache ? subCache.get(key2) : undefined;\n  },\n  delete: function _delete(cache, key1, key2) {\n    var subCache = cache.get(key1);\n    subCache.delete(key2);\n  }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (multiKeyStore);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mergeClasses__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mergeClasses */ \"./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _mergeClasses__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js":
+/*!***************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js ***!
+  \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return mergeClasses; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\nfunction mergeClasses() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var baseClasses = options.baseClasses,\n      newClasses = options.newClasses,\n      Component = options.Component;\n\n  if (!newClasses) {\n    return baseClasses;\n  }\n\n  var nextClasses = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, baseClasses);\n\n  if (true) {\n    if (typeof newClasses === 'string') {\n      console.error([\"Material-UI: The value `\".concat(newClasses, \"` \") + \"provided to the classes prop of \".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_1__[\"getDisplayName\"])(Component), \" is incorrect.\"), 'You might want to use the className prop instead.'].join('\\n'));\n      return baseClasses;\n    }\n  }\n\n  Object.keys(newClasses).forEach(function (key) {\n    if (true) {\n      if (!baseClasses[key] && newClasses[key]) {\n        console.error([\"Material-UI: The key `\".concat(key, \"` \") + \"provided to the classes prop is not implemented in \".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_1__[\"getDisplayName\"])(Component), \".\"), \"You can only override one of the following: \".concat(Object.keys(baseClasses).join(','), \".\")].join('\\n'));\n      }\n\n      if (newClasses[key] && typeof newClasses[key] !== 'string') {\n        console.error([\"Material-UI: The key `\".concat(key, \"` \") + \"provided to the classes prop is not valid for \".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_1__[\"getDisplayName\"])(Component), \".\"), \"You need to provide a non empty string instead of: \".concat(newClasses[key], \".\")].join('\\n'));\n      }\n    }\n\n    if (newClasses[key]) {\n      nextClasses[key] = \"\".concat(baseClasses[key], \" \").concat(newClasses[key]);\n    }\n  });\n  return nextClasses;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/styled/index.js":
+/*!**************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/styled/index.js ***!
+  \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _styled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./styled */ \"./jaas-client/node_modules/@material-ui/styles/esm/styled/styled.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _styled__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/styled/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/styled/styled.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/styled/styled.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return styled; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ \"./jaas-client/node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! hoist-non-react-statics */ \"./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../makeStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js\");\n\n\n\n\n\n\n\n\n\nfunction omit(input, fields) {\n  var output = {};\n  Object.keys(input).forEach(function (prop) {\n    if (fields.indexOf(prop) === -1) {\n      output[prop] = input[prop];\n    }\n  });\n  return output;\n} // styled-components's API removes the mapping between components and styles.\n// Using components as a low-level styling construct can be simpler.\n\n\nfunction styled(Component) {\n  var componentCreator = function componentCreator(style) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var name = options.name,\n        stylesOptions = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(options, [\"name\"]);\n\n    if ( true && Component === undefined) {\n      throw new Error(['You are calling styled(Component)(style) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n    }\n\n    var classNamePrefix = name;\n\n    if (true) {\n      if (!name) {\n        // Provide a better DX outside production.\n        var displayName = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"getDisplayName\"])(Component);\n\n        if (displayName !== undefined) {\n          classNamePrefix = displayName;\n        }\n      }\n    }\n\n    var stylesOrCreator = typeof style === 'function' ? function (theme) {\n      return {\n        root: function root(props) {\n          return style(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n            theme: theme\n          }, props));\n        }\n      };\n    } : {\n      root: style\n    };\n    var useStyles = Object(_makeStyles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(stylesOrCreator, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      Component: Component,\n      name: name || Component.displayName,\n      classNamePrefix: classNamePrefix\n    }, stylesOptions));\n    var filterProps;\n    var propTypes = {};\n\n    if (style.filterProps) {\n      filterProps = style.filterProps;\n      delete style.filterProps;\n    }\n    /* eslint-disable react/forbid-foreign-prop-types */\n\n\n    if (style.propTypes) {\n      propTypes = style.propTypes;\n      delete style.propTypes;\n    }\n    /* eslint-enable react/forbid-foreign-prop-types */\n\n\n    var StyledComponent = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef(function StyledComponent(props, ref) {\n      var children = props.children,\n          classNameProp = props.className,\n          clone = props.clone,\n          ComponentProp = props.component,\n          other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"children\", \"className\", \"clone\", \"component\"]);\n\n      var classes = useStyles(props);\n      var className = Object(clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.root, classNameProp);\n      var spread = other;\n\n      if (filterProps) {\n        spread = omit(spread, filterProps);\n      }\n\n      if (clone) {\n        return react__WEBPACK_IMPORTED_MODULE_2___default.a.cloneElement(children, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n          className: Object(clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(children.props.className, className)\n        }, spread));\n      }\n\n      if (typeof children === 'function') {\n        return children(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n          className: className\n        }, spread));\n      }\n\n      var FinalComponent = ComponentProp || Component;\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(FinalComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        ref: ref,\n        className: className\n      }, spread), children);\n    });\n     true ? StyledComponent.propTypes = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      /**\n       * A render function or node.\n       */\n      children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]),\n\n      /**\n       * @ignore\n       */\n      className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n\n      /**\n       * If `true`, the component will recycle it's children HTML element.\n       * It's using `React.cloneElement` internally.\n       *\n       * This prop will be deprecated and removed in v5\n       */\n      clone: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, function (props) {\n        if (props.clone && props.component) {\n          return new Error('You can not use the clone and component prop at the same time.');\n        }\n\n        return null;\n      }),\n\n      /**\n       * The component used for the root node.\n       * Either a string to use a HTML element or a component.\n       */\n      component: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.elementType\n    }, propTypes) : undefined;\n\n    if (true) {\n      StyledComponent.displayName = \"Styled(\".concat(classNamePrefix, \")\");\n    }\n\n    hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6___default()(StyledComponent, Component);\n    return StyledComponent;\n  };\n\n  return componentCreator;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/styled/styled.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js ***!
+  \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nvar ThemeContext = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null);\n\nif (true) {\n  ThemeContext.displayName = 'ThemeContext';\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ThemeContext);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/useTheme.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _useTheme__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/useTheme/useTheme.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/useTheme/useTheme.js ***!
+  \*******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useTheme; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ThemeContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ThemeContext */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js\");\n\n\nfunction useTheme() {\n  var theme = react__WEBPACK_IMPORTED_MODULE_0___default.a.useContext(_ThemeContext__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n  if (true) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    react__WEBPACK_IMPORTED_MODULE_0___default.a.useDebugValue(theme);\n  }\n\n  return theme;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/useTheme/useTheme.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/withStyles/index.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/withStyles/index.js ***!
+  \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _withStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./withStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/withStyles/withStyles.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _withStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/withStyles/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/withStyles/withStyles.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/withStyles/withStyles.js ***!
+  \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! hoist-non-react-statics */ \"./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../makeStyles */ \"./jaas-client/node_modules/@material-ui/styles/esm/makeStyles/index.js\");\n/* harmony import */ var _getThemeProps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../getThemeProps */ \"./jaas-client/node_modules/@material-ui/styles/esm/getThemeProps/index.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n\n\n\n\n\n\n\n\n // Link a style sheet with a component.\n// It does not modify the component passed to it;\n// instead, it returns a new component, with a `classes` property.\n\nvar withStyles = function withStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function (Component) {\n    var defaultTheme = options.defaultTheme,\n        _options$withTheme = options.withTheme,\n        withTheme = _options$withTheme === void 0 ? false : _options$withTheme,\n        name = options.name,\n        stylesOptions = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(options, [\"defaultTheme\", \"withTheme\", \"name\"]);\n\n    if (true) {\n      if (Component === undefined) {\n        throw new Error(['You are calling withStyles(styles)(Component) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n      }\n    }\n\n    var classNamePrefix = name;\n\n    if (true) {\n      if (!name) {\n        // Provide a better DX outside production.\n        var displayName = Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"getDisplayName\"])(Component);\n\n        if (displayName !== undefined) {\n          classNamePrefix = displayName;\n        }\n      }\n    }\n\n    var useStyles = Object(_makeStyles__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(stylesOrCreator, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      defaultTheme: defaultTheme,\n      Component: Component,\n      name: name || Component.displayName,\n      classNamePrefix: classNamePrefix\n    }, stylesOptions));\n    var WithStyles = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef(function WithStyles(props, ref) {\n      var classesProp = props.classes,\n          innerRef = props.innerRef,\n          other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"classes\", \"innerRef\"]); // The wrapper receives only user supplied props, which could be a subset of\n      // the actual props Component might receive due to merging with defaultProps.\n      // So copying it here would give us the same result in the wrapper as well.\n\n\n      var classes = useStyles(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, Component.defaultProps), props));\n      var theme;\n      var more = other;\n\n      if (typeof name === 'string' || withTheme) {\n        // name and withTheme are invariant in the outer scope\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        theme = Object(_useTheme__WEBPACK_IMPORTED_MODULE_8__[\"default\"])() || defaultTheme;\n\n        if (name) {\n          more = Object(_getThemeProps__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({\n            theme: theme,\n            name: name,\n            props: other\n          });\n        } // Provide the theme to the wrapped component.\n        // So we don't have to use the `withTheme()` Higher-order Component.\n\n\n        if (withTheme && !more.theme) {\n          more.theme = theme;\n        }\n      }\n\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        ref: innerRef || ref,\n        classes: classes\n      }, more));\n    });\n     true ? WithStyles.propTypes = {\n      /**\n       * Override or extend the styles applied to the component.\n       */\n      classes: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n\n      /**\n       * Use that prop to pass a ref to the decorated component.\n       * @deprecated\n       */\n      innerRef: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object]), function (props) {\n        if (props.innerRef == null) {\n          return null;\n        }\n\n        return null; // return new Error(\n        //   'Material-UI: The `innerRef` prop is deprecated and will be removed in v5. ' +\n        //     'Refs are now automatically forwarded to the inner component.',\n        // );\n      })\n    } : undefined;\n\n    if (true) {\n      WithStyles.displayName = \"WithStyles(\".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"getDisplayName\"])(Component), \")\");\n    }\n\n    hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default()(WithStyles, Component);\n\n    if (true) {\n      // Exposed for test purposes.\n      WithStyles.Naked = Component;\n      WithStyles.options = options;\n      WithStyles.useStyles = useStyles;\n    }\n\n    return WithStyles;\n  };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (withStyles);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/withStyles/withStyles.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/withTheme/index.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/withTheme/index.js ***!
+  \*****************************************************************************/
+/*! exports provided: default, withThemeCreator */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _withTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./withTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/withTheme/withTheme.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _withTheme__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withThemeCreator\", function() { return _withTheme__WEBPACK_IMPORTED_MODULE_0__[\"withThemeCreator\"]; });\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/withTheme/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/styles/esm/withTheme/withTheme.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/styles/esm/withTheme/withTheme.js ***!
+  \*********************************************************************************/
+/*! exports provided: withThemeCreator, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"withThemeCreator\", function() { return withThemeCreator; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! hoist-non-react-statics */ \"./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../useTheme */ \"./jaas-client/node_modules/@material-ui/styles/esm/useTheme/index.js\");\n\n\n\n\n\n\n\nfunction withThemeCreator() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var defaultTheme = options.defaultTheme;\n\n  var withTheme = function withTheme(Component) {\n    if (true) {\n      if (Component === undefined) {\n        throw new Error(['You are calling withTheme(Component) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n      }\n    }\n\n    var WithTheme = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef(function WithTheme(props, ref) {\n      var innerRef = props.innerRef,\n          other = Object(_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, [\"innerRef\"]);\n\n      var theme = Object(_useTheme__WEBPACK_IMPORTED_MODULE_6__[\"default\"])() || defaultTheme;\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        theme: theme,\n        ref: innerRef || ref\n      }, other));\n    });\n     true ? WithTheme.propTypes = {\n      /**\n       * Use that prop to pass a ref to the decorated component.\n       * @deprecated\n       */\n      innerRef: Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"chainPropTypes\"])(prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object]), function (props) {\n        if (props.innerRef == null) {\n          return null;\n        }\n\n        return new Error('Material-UI: The `innerRef` prop is deprecated and will be removed in v5. ' + 'Refs are now automatically forwarded to the inner component.');\n      })\n    } : undefined;\n\n    if (true) {\n      WithTheme.displayName = \"WithTheme(\".concat(Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__[\"getDisplayName\"])(Component), \")\");\n    }\n\n    hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default()(WithTheme, Component);\n\n    if (true) {\n      // Exposed for test purposes.\n      WithTheme.Naked = Component;\n    }\n\n    return WithTheme;\n  };\n\n  return withTheme;\n} // Provide the theme object as a prop to the input component.\n// It's an alternative API to useTheme().\n// We encourage the usage of useTheme() where possible.\n\nvar withTheme = withThemeCreator();\n/* harmony default export */ __webpack_exports__[\"default\"] = (withTheme);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/styles/esm/withTheme/withTheme.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/borders.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/borders.js ***!
+  \*********************************************************************/
+/*! exports provided: border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderRadius, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"border\", function() { return border; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderTop\", function() { return borderTop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderRight\", function() { return borderRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderBottom\", function() { return borderBottom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderLeft\", function() { return borderLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderColor\", function() { return borderColor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"borderRadius\", function() { return borderRadius; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\n\nfunction getBorder(value) {\n  if (typeof value !== 'number') {\n    return value;\n  }\n\n  return \"\".concat(value, \"px solid\");\n}\n\nvar border = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'border',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderTop = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderTop',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderRight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderRight',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderBottom = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderBottom',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderLeft = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderLeft',\n  themeKey: 'borders',\n  transform: getBorder\n});\nvar borderColor = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderColor',\n  themeKey: 'palette'\n});\nvar borderRadius = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'borderRadius',\n  themeKey: 'shape'\n});\nvar borders = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderRadius);\n/* harmony default export */ __webpack_exports__[\"default\"] = (borders);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/borders.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js ***!
+  \*************************************************************************/
+/*! exports provided: handleBreakpoints, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"handleBreakpoints\", function() { return handleBreakpoints; });\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./merge */ \"./jaas-client/node_modules/@material-ui/system/esm/merge.js\");\n\n\n\n\n // The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\n\nvar values = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1280,\n  xl: 1920\n};\nvar defaultBreakpoints = {\n  // Sorted ASC by size. That's important.\n  // It can't be configured as it's used statically for propTypes.\n  keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n  up: function up(key) {\n    return \"@media (min-width:\".concat(values[key], \"px)\");\n  }\n};\nfunction handleBreakpoints(props, propValue, styleFromPropValue) {\n  if (true) {\n    if (!props.theme) {\n      console.error('Material-UI: You are calling a style function without a theme value.');\n    }\n  }\n\n  if (Array.isArray(propValue)) {\n    var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n    return propValue.reduce(function (acc, item, index) {\n      acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n      return acc;\n    }, {});\n  }\n\n  if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(propValue) === 'object') {\n    var _themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n\n    return Object.keys(propValue).reduce(function (acc, breakpoint) {\n      acc[_themeBreakpoints.up(breakpoint)] = styleFromPropValue(propValue[breakpoint]);\n      return acc;\n    }, {});\n  }\n\n  var output = styleFromPropValue(propValue);\n  return output;\n}\n\nfunction breakpoints(styleFunction) {\n  var newStyleFunction = function newStyleFunction(props) {\n    var base = styleFunction(props);\n    var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n    var extended = themeBreakpoints.keys.reduce(function (acc, key) {\n      if (props[key]) {\n        acc = acc || {};\n        acc[themeBreakpoints.up(key)] = styleFunction(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n          theme: props.theme\n        }, props[key]));\n      }\n\n      return acc;\n    }, null);\n    return Object(_merge__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(base, extended);\n  };\n\n  newStyleFunction.propTypes =  true ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, styleFunction.propTypes), {}, {\n    xs: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n    sm: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n    md: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n    lg: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object,\n    xl: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object\n  }) : undefined;\n  newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl'].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(styleFunction.filterProps));\n  return newStyleFunction;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (breakpoints);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/compose.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/compose.js ***!
+  \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./merge */ \"./jaas-client/node_modules/@material-ui/system/esm/merge.js\");\n\n\n\nfunction compose() {\n  for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {\n    styles[_key] = arguments[_key];\n  }\n\n  var fn = function fn(props) {\n    return styles.reduce(function (acc, style) {\n      var output = style(props);\n\n      if (output) {\n        return Object(_merge__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(acc, output);\n      }\n\n      return acc;\n    }, {});\n  }; // Alternative approach that doesn't yield any performance gain.\n  // const handlers = styles.reduce((acc, style) => {\n  //   style.filterProps.forEach(prop => {\n  //     acc[prop] = style;\n  //   });\n  //   return acc;\n  // }, {});\n  // const fn = props => {\n  //   return Object.keys(props).reduce((acc, prop) => {\n  //     if (handlers[prop]) {\n  //       return merge(acc, handlers[prop](props));\n  //     }\n  //     return acc;\n  //   }, {});\n  // };\n\n\n  fn.propTypes =  true ? styles.reduce(function (acc, style) {\n    return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(acc, style.propTypes);\n  }, {}) : undefined;\n  fn.filterProps = styles.reduce(function (acc, style) {\n    return acc.concat(style.filterProps);\n  }, []);\n  return fn;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (compose);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/compose.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/css.js":
+/*!*****************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/css.js ***!
+  \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./merge */ \"./jaas-client/node_modules/@material-ui/system/esm/merge.js\");\n\n\n\n\n\nfunction omit(input, fields) {\n  var output = {};\n  Object.keys(input).forEach(function (prop) {\n    if (fields.indexOf(prop) === -1) {\n      output[prop] = input[prop];\n    }\n  });\n  return output;\n}\n\nfunction css(styleFunction) {\n  var newStyleFunction = function newStyleFunction(props) {\n    var output = styleFunction(props);\n\n    if (props.css) {\n      return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, Object(_merge__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(output, styleFunction(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n        theme: props.theme\n      }, props.css)))), omit(props.css, [styleFunction.filterProps]));\n    }\n\n    return output;\n  };\n\n  newStyleFunction.propTypes =  true ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, styleFunction.propTypes), {}, {\n    css: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n  }) : undefined;\n  newStyleFunction.filterProps = ['css'].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(styleFunction.filterProps));\n  return newStyleFunction;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (css);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/css.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/display.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/display.js ***!
+  \*********************************************************************/
+/*! exports provided: displayPrint, displayRaw, overflow, textOverflow, visibility, whiteSpace, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"displayPrint\", function() { return displayPrint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"displayRaw\", function() { return displayRaw; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"overflow\", function() { return overflow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"textOverflow\", function() { return textOverflow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"visibility\", function() { return visibility; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whiteSpace\", function() { return whiteSpace; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar displayPrint = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'displayPrint',\n  cssProperty: false,\n  transform: function transform(value) {\n    return {\n      '@media print': {\n        display: value\n      }\n    };\n  }\n});\nvar displayRaw = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'display'\n});\nvar overflow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'overflow'\n});\nvar textOverflow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'textOverflow'\n});\nvar visibility = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'visibility'\n});\nvar whiteSpace = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'whiteSpace'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(displayPrint, displayRaw, overflow, textOverflow, visibility, whiteSpace));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/display.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/flexbox.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/flexbox.js ***!
+  \*********************************************************************/
+/*! exports provided: flexBasis, flexDirection, flexWrap, justifyContent, alignItems, alignContent, order, flex, flexGrow, flexShrink, alignSelf, justifyItems, justifySelf, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexBasis\", function() { return flexBasis; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexDirection\", function() { return flexDirection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexWrap\", function() { return flexWrap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"justifyContent\", function() { return justifyContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"alignItems\", function() { return alignItems; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"alignContent\", function() { return alignContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"order\", function() { return order; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flex\", function() { return flex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexGrow\", function() { return flexGrow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flexShrink\", function() { return flexShrink; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"alignSelf\", function() { return alignSelf; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"justifyItems\", function() { return justifyItems; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"justifySelf\", function() { return justifySelf; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar flexBasis = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexBasis'\n});\nvar flexDirection = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexDirection'\n});\nvar flexWrap = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexWrap'\n});\nvar justifyContent = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'justifyContent'\n});\nvar alignItems = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'alignItems'\n});\nvar alignContent = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'alignContent'\n});\nvar order = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'order'\n});\nvar flex = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flex'\n});\nvar flexGrow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexGrow'\n});\nvar flexShrink = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'flexShrink'\n});\nvar alignSelf = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'alignSelf'\n});\nvar justifyItems = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'justifyItems'\n});\nvar justifySelf = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'justifySelf'\n});\nvar flexbox = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(flexBasis, flexDirection, flexWrap, justifyContent, alignItems, alignContent, order, flex, flexGrow, flexShrink, alignSelf, justifyItems, justifySelf);\n/* harmony default export */ __webpack_exports__[\"default\"] = (flexbox);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/flexbox.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/grid.js":
+/*!******************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/grid.js ***!
+  \******************************************************************/
+/*! exports provided: gridGap, gridColumnGap, gridRowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridGap\", function() { return gridGap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridColumnGap\", function() { return gridColumnGap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridRowGap\", function() { return gridRowGap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridColumn\", function() { return gridColumn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridRow\", function() { return gridRow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridAutoFlow\", function() { return gridAutoFlow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridAutoColumns\", function() { return gridAutoColumns; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridAutoRows\", function() { return gridAutoRows; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateColumns\", function() { return gridTemplateColumns; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateRows\", function() { return gridTemplateRows; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateAreas\", function() { return gridTemplateAreas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gridArea\", function() { return gridArea; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar gridGap = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridGap'\n});\nvar gridColumnGap = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridColumnGap'\n});\nvar gridRowGap = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridRowGap'\n});\nvar gridColumn = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridColumn'\n});\nvar gridRow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridRow'\n});\nvar gridAutoFlow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridAutoFlow'\n});\nvar gridAutoColumns = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridAutoColumns'\n});\nvar gridAutoRows = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridAutoRows'\n});\nvar gridTemplateColumns = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridTemplateColumns'\n});\nvar gridTemplateRows = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridTemplateRows'\n});\nvar gridTemplateAreas = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridTemplateAreas'\n});\nvar gridArea = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'gridArea'\n});\nvar grid = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(gridGap, gridColumnGap, gridRowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\n/* harmony default export */ __webpack_exports__[\"default\"] = (grid);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/grid.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/index.js":
+/*!*******************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/index.js ***!
+  \*******************************************************************/
+/*! exports provided: borders, border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderRadius, breakpoints, compose, css, display, flexbox, flexBasis, flexDirection, flexWrap, justifyContent, alignItems, alignContent, order, flex, flexGrow, flexShrink, alignSelf, justifyItems, justifySelf, grid, gridGap, gridColumnGap, gridRowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea, palette, color, bgcolor, positions, position, zIndex, top, right, bottom, left, shadows, sizing, width, maxWidth, minWidth, height, maxHeight, minHeight, sizeWidth, sizeHeight, boxSizing, spacing, createUnarySpacing, style, typography, fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textAlign */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _borders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./borders */ \"./jaas-client/node_modules/@material-ui/system/esm/borders.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borders\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"border\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"border\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderTop\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderTop\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderRight\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderRight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderBottom\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderBottom\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderLeft\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderLeft\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderColor\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderColor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"borderRadius\", function() { return _borders__WEBPACK_IMPORTED_MODULE_0__[\"borderRadius\"]; });\n\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./breakpoints */ \"./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"breakpoints\", function() { return _breakpoints__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"compose\", function() { return _compose__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./css */ \"./jaas-client/node_modules/@material-ui/system/esm/css.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"css\", function() { return _css__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _display__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./display */ \"./jaas-client/node_modules/@material-ui/system/esm/display.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"display\", function() { return _display__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _flexbox__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./flexbox */ \"./jaas-client/node_modules/@material-ui/system/esm/flexbox.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexbox\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexBasis\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexBasis\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexDirection\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexDirection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexWrap\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexWrap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"justifyContent\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"justifyContent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"alignItems\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"alignItems\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"alignContent\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"alignContent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"order\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"order\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flex\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flex\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexGrow\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexGrow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flexShrink\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"flexShrink\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"alignSelf\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"alignSelf\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"justifyItems\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"justifyItems\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"justifySelf\", function() { return _flexbox__WEBPACK_IMPORTED_MODULE_5__[\"justifySelf\"]; });\n\n/* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./grid */ \"./jaas-client/node_modules/@material-ui/system/esm/grid.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"grid\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridGap\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridGap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridColumnGap\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridColumnGap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridRowGap\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridRowGap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridColumn\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridRow\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridAutoFlow\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridAutoFlow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridAutoColumns\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridAutoColumns\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridAutoRows\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridAutoRows\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateColumns\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridTemplateColumns\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateRows\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridTemplateRows\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridTemplateAreas\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridTemplateAreas\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gridArea\", function() { return _grid__WEBPACK_IMPORTED_MODULE_6__[\"gridArea\"]; });\n\n/* harmony import */ var _palette__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./palette */ \"./jaas-client/node_modules/@material-ui/system/esm/palette.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"palette\", function() { return _palette__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"color\", function() { return _palette__WEBPACK_IMPORTED_MODULE_7__[\"color\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bgcolor\", function() { return _palette__WEBPACK_IMPORTED_MODULE_7__[\"bgcolor\"]; });\n\n/* harmony import */ var _positions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./positions */ \"./jaas-client/node_modules/@material-ui/system/esm/positions.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"positions\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"position\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"position\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"zIndex\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"zIndex\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"top\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"top\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"right\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"right\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bottom\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"bottom\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"left\", function() { return _positions__WEBPACK_IMPORTED_MODULE_8__[\"left\"]; });\n\n/* harmony import */ var _shadows__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./shadows */ \"./jaas-client/node_modules/@material-ui/system/esm/shadows.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"shadows\", function() { return _shadows__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _sizing__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./sizing */ \"./jaas-client/node_modules/@material-ui/system/esm/sizing.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sizing\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"width\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"width\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"maxWidth\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"maxWidth\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"minWidth\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"minWidth\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"height\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"height\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"maxHeight\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"maxHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"minHeight\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"minHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sizeWidth\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"sizeWidth\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sizeHeight\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"sizeHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"boxSizing\", function() { return _sizing__WEBPACK_IMPORTED_MODULE_10__[\"boxSizing\"]; });\n\n/* harmony import */ var _spacing__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./spacing */ \"./jaas-client/node_modules/@material-ui/system/esm/spacing.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"spacing\", function() { return _spacing__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createUnarySpacing\", function() { return _spacing__WEBPACK_IMPORTED_MODULE_11__[\"createUnarySpacing\"]; });\n\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"style\", function() { return _style__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _typography__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./typography */ \"./jaas-client/node_modules/@material-ui/system/esm/typography.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"typography\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fontFamily\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"fontFamily\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fontSize\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"fontSize\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fontStyle\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"fontStyle\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fontWeight\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"fontWeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"letterSpacing\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"letterSpacing\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"lineHeight\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"lineHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"textAlign\", function() { return _typography__WEBPACK_IMPORTED_MODULE_13__[\"textAlign\"]; });\n\n/** @license Material-UI v4.9.14\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/memoize.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/memoize.js ***!
+  \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return memoize; });\nfunction memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) {\n      cache[arg] = fn(arg);\n    }\n\n    return cache[arg];\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/memoize.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/merge.js":
+/*!*******************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/merge.js ***!
+  \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./jaas-client/node_modules/@material-ui/utils/esm/index.js\");\n\n\nfunction merge(acc, item) {\n  if (!item) {\n    return acc;\n  }\n\n  return Object(_material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"deepmerge\"])(acc, item, {\n    clone: false // No need to clone deep, it's way faster.\n\n  });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (merge);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/merge.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/palette.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/palette.js ***!
+  \*********************************************************************/
+/*! exports provided: color, bgcolor, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"color\", function() { return color; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bgcolor\", function() { return bgcolor; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar color = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'color',\n  themeKey: 'palette'\n});\nvar bgcolor = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'bgcolor',\n  cssProperty: 'backgroundColor',\n  themeKey: 'palette'\n});\nvar palette = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(color, bgcolor);\n/* harmony default export */ __webpack_exports__[\"default\"] = (palette);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/palette.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/positions.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/positions.js ***!
+  \***********************************************************************/
+/*! exports provided: position, zIndex, top, right, bottom, left, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"position\", function() { return position; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"zIndex\", function() { return zIndex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"top\", function() { return top; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"right\", function() { return right; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bottom\", function() { return bottom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"left\", function() { return left; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar position = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'position'\n});\nvar zIndex = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'zIndex',\n  themeKey: 'zIndex'\n});\nvar top = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'top'\n});\nvar right = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'right'\n});\nvar bottom = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'bottom'\n});\nvar left = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'left'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(position, zIndex, top, right, bottom, left));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/positions.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n\nvar responsivePropType =  true ? prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.array]) : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (responsivePropType);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/shadows.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/shadows.js ***!
+  \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n\nvar boxShadow = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'boxShadow',\n  themeKey: 'shadows'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (boxShadow);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/shadows.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/sizing.js":
+/*!********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/sizing.js ***!
+  \********************************************************************/
+/*! exports provided: width, maxWidth, minWidth, height, maxHeight, minHeight, sizeWidth, sizeHeight, boxSizing, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"width\", function() { return width; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"maxWidth\", function() { return maxWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minWidth\", function() { return minWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"height\", function() { return height; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"maxHeight\", function() { return maxHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minHeight\", function() { return minHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sizeWidth\", function() { return sizeWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sizeHeight\", function() { return sizeHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"boxSizing\", function() { return boxSizing; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\n\nfunction transform(value) {\n  return value <= 1 ? \"\".concat(value * 100, \"%\") : value;\n}\n\nvar width = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'width',\n  transform: transform\n});\nvar maxWidth = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'maxWidth',\n  transform: transform\n});\nvar minWidth = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'minWidth',\n  transform: transform\n});\nvar height = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'height',\n  transform: transform\n});\nvar maxHeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'maxHeight',\n  transform: transform\n});\nvar minHeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'minHeight',\n  transform: transform\n});\nvar sizeWidth = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'size',\n  cssProperty: 'width',\n  transform: transform\n});\nvar sizeHeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'size',\n  cssProperty: 'height',\n  transform: transform\n});\nvar boxSizing = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'boxSizing'\n});\nvar sizing = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\n/* harmony default export */ __webpack_exports__[\"default\"] = (sizing);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/sizing.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/spacing.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/spacing.js ***!
+  \*********************************************************************/
+/*! exports provided: createUnarySpacing, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createUnarySpacing\", function() { return createUnarySpacing; });\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _responsivePropType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./responsivePropType */ \"./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js\");\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./breakpoints */ \"./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js\");\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./merge */ \"./jaas-client/node_modules/@material-ui/system/esm/merge.js\");\n/* harmony import */ var _memoize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./memoize */ \"./jaas-client/node_modules/@material-ui/system/esm/memoize.js\");\n\n\n\n\n\nvar properties = {\n  m: 'margin',\n  p: 'padding'\n};\nvar directions = {\n  t: 'Top',\n  r: 'Right',\n  b: 'Bottom',\n  l: 'Left',\n  x: ['Left', 'Right'],\n  y: ['Top', 'Bottom']\n};\nvar aliases = {\n  marginX: 'mx',\n  marginY: 'my',\n  paddingX: 'px',\n  paddingY: 'py'\n}; // memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\n\nvar getCssProperties = Object(_memoize__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(function (prop) {\n  // It's not a shorthand notation.\n  if (prop.length > 2) {\n    if (aliases[prop]) {\n      prop = aliases[prop];\n    } else {\n      return [prop];\n    }\n  }\n\n  var _prop$split = prop.split(''),\n      _prop$split2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_prop$split, 2),\n      a = _prop$split2[0],\n      b = _prop$split2[1];\n\n  var property = properties[a];\n  var direction = directions[b] || '';\n  return Array.isArray(direction) ? direction.map(function (dir) {\n    return property + dir;\n  }) : [property + direction];\n});\nvar spacingKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY'];\nfunction createUnarySpacing(theme) {\n  var themeSpacing = theme.spacing || 8;\n\n  if (typeof themeSpacing === 'number') {\n    return function (abs) {\n      if (true) {\n        if (typeof abs !== 'number') {\n          console.error(\"Material-UI: Expected spacing argument to be a number, got \".concat(abs, \".\"));\n        }\n      }\n\n      return themeSpacing * abs;\n    };\n  }\n\n  if (Array.isArray(themeSpacing)) {\n    return function (abs) {\n      if (true) {\n        if (abs > themeSpacing.length - 1) {\n          console.error([\"Material-UI: The value provided (\".concat(abs, \") overflows.\"), \"The supported values are: \".concat(JSON.stringify(themeSpacing), \".\"), \"\".concat(abs, \" > \").concat(themeSpacing.length - 1, \", you need to add the missing values.\")].join('\\n'));\n        }\n      }\n\n      return themeSpacing[abs];\n    };\n  }\n\n  if (typeof themeSpacing === 'function') {\n    return themeSpacing;\n  }\n\n  if (true) {\n    console.error([\"Material-UI: The `theme.spacing` value (\".concat(themeSpacing, \") is invalid.\"), 'It should be a number, an array or a function.'].join('\\n'));\n  }\n\n  return function () {\n    return undefined;\n  };\n}\n\nfunction getValue(transformer, propValue) {\n  if (typeof propValue === 'string') {\n    return propValue;\n  }\n\n  var abs = Math.abs(propValue);\n  var transformed = transformer(abs);\n\n  if (propValue >= 0) {\n    return transformed;\n  }\n\n  if (typeof transformed === 'number') {\n    return -transformed;\n  }\n\n  return \"-\".concat(transformed);\n}\n\nfunction getStyleFromPropValue(cssProperties, transformer) {\n  return function (propValue) {\n    return cssProperties.reduce(function (acc, cssProperty) {\n      acc[cssProperty] = getValue(transformer, propValue);\n      return acc;\n    }, {});\n  };\n}\n\nfunction spacing(props) {\n  var theme = props.theme;\n  var transformer = createUnarySpacing(theme);\n  return Object.keys(props).map(function (prop) {\n    // Using a hash computation over an array iteration could be faster, but with only 28 items,\n    // it's doesn't worth the bundle size.\n    if (spacingKeys.indexOf(prop) === -1) {\n      return null;\n    }\n\n    var cssProperties = getCssProperties(prop);\n    var styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n    var propValue = props[prop];\n    return Object(_breakpoints__WEBPACK_IMPORTED_MODULE_2__[\"handleBreakpoints\"])(props, propValue, styleFromPropValue);\n  }).reduce(_merge__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {});\n}\n\nspacing.propTypes =  true ? spacingKeys.reduce(function (obj, key) {\n  obj[key] = _responsivePropType__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n  return obj;\n}, {}) : undefined;\nspacing.filterProps = spacingKeys;\n/* harmony default export */ __webpack_exports__[\"default\"] = (spacing);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/spacing.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/style.js":
+/*!*******************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/style.js ***!
+  \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _responsivePropType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./responsivePropType */ \"./jaas-client/node_modules/@material-ui/system/esm/responsivePropType.js\");\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./breakpoints */ \"./jaas-client/node_modules/@material-ui/system/esm/breakpoints.js\");\n\n\n\n\nfunction getPath(obj, path) {\n  if (!path || typeof path !== 'string') {\n    return null;\n  }\n\n  return path.split('.').reduce(function (acc, item) {\n    return acc && acc[item] ? acc[item] : null;\n  }, obj);\n}\n\nfunction style(options) {\n  var prop = options.prop,\n      _options$cssProperty = options.cssProperty,\n      cssProperty = _options$cssProperty === void 0 ? options.prop : _options$cssProperty,\n      themeKey = options.themeKey,\n      transform = options.transform;\n\n  var fn = function fn(props) {\n    if (props[prop] == null) {\n      return null;\n    }\n\n    var propValue = props[prop];\n    var theme = props.theme;\n    var themeMapping = getPath(theme, themeKey) || {};\n\n    var styleFromPropValue = function styleFromPropValue(propValueFinal) {\n      var value;\n\n      if (typeof themeMapping === 'function') {\n        value = themeMapping(propValueFinal);\n      } else if (Array.isArray(themeMapping)) {\n        value = themeMapping[propValueFinal] || propValueFinal;\n      } else {\n        value = getPath(themeMapping, propValueFinal) || propValueFinal;\n\n        if (transform) {\n          value = transform(value);\n        }\n      }\n\n      if (cssProperty === false) {\n        return value;\n      }\n\n      return Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, cssProperty, value);\n    };\n\n    return Object(_breakpoints__WEBPACK_IMPORTED_MODULE_2__[\"handleBreakpoints\"])(props, propValue, styleFromPropValue);\n  };\n\n  fn.propTypes =  true ? Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, prop, _responsivePropType__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) : undefined;\n  fn.filterProps = [prop];\n  return fn;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (style);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/style.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/system/esm/typography.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/system/esm/typography.js ***!
+  \************************************************************************/
+/*! exports provided: fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textAlign, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fontFamily\", function() { return fontFamily; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fontSize\", function() { return fontSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fontStyle\", function() { return fontStyle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fontWeight\", function() { return fontWeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"letterSpacing\", function() { return letterSpacing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lineHeight\", function() { return lineHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"textAlign\", function() { return textAlign; });\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style */ \"./jaas-client/node_modules/@material-ui/system/esm/style.js\");\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose */ \"./jaas-client/node_modules/@material-ui/system/esm/compose.js\");\n\n\nvar fontFamily = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'fontFamily',\n  themeKey: 'typography'\n});\nvar fontSize = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'fontSize',\n  themeKey: 'typography'\n});\nvar fontStyle = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'fontStyle',\n  themeKey: 'typography'\n});\nvar fontWeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'fontWeight',\n  themeKey: 'typography'\n});\nvar letterSpacing = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'letterSpacing'\n});\nvar lineHeight = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'lineHeight'\n});\nvar textAlign = Object(_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  prop: 'textAlign'\n});\nvar typography = Object(_compose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textAlign);\n/* harmony default export */ __webpack_exports__[\"default\"] = (typography);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/system/esm/typography.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/HTMLElementType.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/HTMLElementType.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return HTMLElementType; });\nfunction HTMLElementType(props, propName, componentName, location, propFullName) {\n  if (false) {}\n\n  var propValue = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (propValue == null) {\n    return null;\n  }\n\n  if (propValue && propValue.nodeType !== 1) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an HTMLElement.\");\n  }\n\n  return null;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/HTMLElementType.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return chainPropTypes; });\nfunction chainPropTypes(propType1, propType2) {\n  if (false) {}\n\n  return function validate() {\n    return propType1.apply(void 0, arguments) || propType2.apply(void 0, arguments);\n  };\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/deepmerge.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/deepmerge.js ***!
+  \**********************************************************************/
+/*! exports provided: isPlainObject, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPlainObject\", function() { return isPlainObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return deepmerge; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n\n\nfunction isPlainObject(item) {\n  return item && Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(item) === 'object' && item.constructor === Object;\n}\nfunction deepmerge(target, source) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n    clone: true\n  };\n  var output = options.clone ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, target) : target;\n\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(function (key) {\n      // Avoid prototype pollution\n      if (key === '__proto__') {\n        return;\n      }\n\n      if (isPlainObject(source[key]) && key in target) {\n        output[key] = deepmerge(target[key], source[key], options);\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n\n  return output;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/deepmerge.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/elementAcceptingRef.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/elementAcceptingRef.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _chainPropTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chainPropTypes */ \"./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js\");\n\n\n\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  var _elementType$prototyp = elementType.prototype,\n      prototype = _elementType$prototyp === void 0 ? {} : _elementType$prototyp;\n  return Boolean(prototype.isReactComponent);\n}\n\nfunction acceptingRef(props, propName, componentName, location, propFullName) {\n  var element = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (element == null) {\n    return null;\n  }\n\n  var warningHint;\n  var elementType = element.type;\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n\n  if (typeof elementType === 'function' && !isClassComponent(elementType)) {\n    warningHint = 'Did you accidentally use a plain function component for an element instead?';\n  }\n\n  if (warningHint !== undefined) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an element that can hold a ref. \".concat(warningHint, \" \") + 'For more information see https://material-ui.com/r/caveat-with-refs-guide');\n  }\n\n  return null;\n}\n\nvar elementAcceptingRef = Object(_chainPropTypes__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.element, acceptingRef);\nelementAcceptingRef.isRequired = Object(_chainPropTypes__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.element.isRequired, acceptingRef);\n/* harmony default export */ __webpack_exports__[\"default\"] = (elementAcceptingRef);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/elementAcceptingRef.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js":
+/*!************************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js ***!
+  \************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _chainPropTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chainPropTypes */ \"./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js\");\n\n\n\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  var _elementType$prototyp = elementType.prototype,\n      prototype = _elementType$prototyp === void 0 ? {} : _elementType$prototyp;\n  return Boolean(prototype.isReactComponent);\n}\n\nfunction elementTypeAcceptingRef(props, propName, componentName, location, propFullName) {\n  var propValue = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (propValue == null) {\n    return null;\n  }\n\n  var warningHint;\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n\n  if (typeof propValue === 'function' && !isClassComponent(propValue)) {\n    warningHint = 'Did you accidentally provide a plain function component instead?';\n  }\n\n  if (warningHint !== undefined) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an element type that can hold a ref. \".concat(warningHint, \" \") + 'For more information see https://material-ui.com/r/caveat-with-refs-guide');\n  }\n\n  return null;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_chainPropTypes__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(prop_types__WEBPACK_IMPORTED_MODULE_0__[\"elementType\"], elementTypeAcceptingRef));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/exactProp.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/exactProp.js ***!
+  \**********************************************************************/
+/*! exports provided: specialProperty, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"specialProperty\", function() { return specialProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return exactProp; });\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n\n\n// This module is based on https://github.com/airbnb/prop-types-exact repository.\n// However, in order to reduce the number of dependencies and to remove some extra safe checks\n// the module was forked.\n// Only exported for test purposes.\nvar specialProperty = \"exact-prop: \\u200B\";\nfunction exactProp(propTypes) {\n  if (false) {}\n\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, propTypes, Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, specialProperty, function (props) {\n    var unsupportedProps = Object.keys(props).filter(function (prop) {\n      return !propTypes.hasOwnProperty(prop);\n    });\n\n    if (unsupportedProps.length > 0) {\n      return new Error(\"The following props are not supported: \".concat(unsupportedProps.map(function (prop) {\n        return \"`\".concat(prop, \"`\");\n      }).join(', '), \". Please remove them.\"));\n    }\n\n    return null;\n  }));\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/exactProp.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return formatMuiErrorMessage; });\n/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@material-ui/utils/macros/MuiError.macro` instead.\n * @param {number} code\n */\nfunction formatMuiErrorMessage(code) {\n  // Apply babel-plugin-transform-template-literals in loose mode\n  // loose mode is safe iff we're concatenating primitives\n  // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n\n  /* eslint-disable prefer-template */\n  var url = 'https://material-ui.com/production-error/?code=' + code;\n\n  for (var i = 1; i < arguments.length; i += 1) {\n    // rest params over-transpile for this case\n    // eslint-disable-next-line prefer-rest-params\n    url += '&args[]=' + encodeURIComponent(arguments[i]);\n  }\n\n  return 'Minified Material-UI error #' + code + '; visit ' + url + ' for the full message.';\n  /* eslint-enable prefer-template */\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/getDisplayName.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/getDisplayName.js ***!
+  \***************************************************************************/
+/*! exports provided: getFunctionName, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getFunctionName\", function() { return getFunctionName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getDisplayName; });\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_1__);\n\n // Simplified polyfill for IE 11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\n\nvar fnNameMatchRegex = /^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\nfunction getFunctionName(fn) {\n  var match = \"\".concat(fn).match(fnNameMatchRegex);\n  var name = match && match[1];\n  return name || '';\n}\n/**\n * @param {function} Component\n * @param {string} fallback\n * @returns {string | undefined}\n */\n\nfunction getFunctionComponentName(Component) {\n  var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  return Component.displayName || Component.name || getFunctionName(Component) || fallback;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var functionName = getFunctionComponentName(innerType);\n  return outerType.displayName || (functionName !== '' ? \"\".concat(wrapperName, \"(\").concat(functionName, \")\") : wrapperName);\n}\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName with added IE 11 support\n *\n * @param {React.ReactType} Component\n * @returns {string | undefined}\n */\n\n\nfunction getDisplayName(Component) {\n  if (Component == null) {\n    return undefined;\n  }\n\n  if (typeof Component === 'string') {\n    return Component;\n  }\n\n  if (typeof Component === 'function') {\n    return getFunctionComponentName(Component, 'Component');\n  }\n\n  if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Component) === 'object') {\n    switch (Component.$$typeof) {\n      case react_is__WEBPACK_IMPORTED_MODULE_1__[\"ForwardRef\"]:\n        return getWrappedName(Component, Component.render, 'ForwardRef');\n\n      case react_is__WEBPACK_IMPORTED_MODULE_1__[\"Memo\"]:\n        return getWrappedName(Component, Component.type, 'memo');\n\n      default:\n        return undefined;\n    }\n  }\n\n  return undefined;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/getDisplayName.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/index.js":
+/*!******************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/index.js ***!
+  \******************************************************************/
+/*! exports provided: chainPropTypes, deepmerge, elementAcceptingRef, elementTypeAcceptingRef, exactProp, formatMuiErrorMessage, getDisplayName, HTMLElementType, ponyfillGlobal, refType */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chainPropTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chainPropTypes */ \"./jaas-client/node_modules/@material-ui/utils/esm/chainPropTypes.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"chainPropTypes\", function() { return _chainPropTypes__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _deepmerge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deepmerge */ \"./jaas-client/node_modules/@material-ui/utils/esm/deepmerge.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"deepmerge\", function() { return _deepmerge__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _elementAcceptingRef__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./elementAcceptingRef */ \"./jaas-client/node_modules/@material-ui/utils/esm/elementAcceptingRef.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"elementAcceptingRef\", function() { return _elementAcceptingRef__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _elementTypeAcceptingRef__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./elementTypeAcceptingRef */ \"./jaas-client/node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"elementTypeAcceptingRef\", function() { return _elementTypeAcceptingRef__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _exactProp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./exactProp */ \"./jaas-client/node_modules/@material-ui/utils/esm/exactProp.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"exactProp\", function() { return _exactProp__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _formatMuiErrorMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatMuiErrorMessage */ \"./jaas-client/node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"formatMuiErrorMessage\", function() { return _formatMuiErrorMessage__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _getDisplayName__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDisplayName */ \"./jaas-client/node_modules/@material-ui/utils/esm/getDisplayName.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getDisplayName\", function() { return _getDisplayName__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _HTMLElementType__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./HTMLElementType */ \"./jaas-client/node_modules/@material-ui/utils/esm/HTMLElementType.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HTMLElementType\", function() { return _HTMLElementType__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _ponyfillGlobal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ponyfillGlobal */ \"./jaas-client/node_modules/@material-ui/utils/esm/ponyfillGlobal.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ponyfillGlobal\", function() { return _ponyfillGlobal__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _refType__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./refType */ \"./jaas-client/node_modules/@material-ui/utils/esm/refType.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"refType\", function() { return _refType__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/** @license Material-UI v4.10.2\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/ponyfillGlobal.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/ponyfillGlobal.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* eslint-disable */\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n/* harmony default export */ __webpack_exports__[\"default\"] = (typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')());\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/ponyfillGlobal.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/@material-ui/utils/esm/refType.js":
+/*!********************************************************************!*\
+  !*** ./jaas-client/node_modules/@material-ui/utils/esm/refType.js ***!
+  \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n\nvar refType = prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (refType);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/@material-ui/utils/esm/refType.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/after/index.js":
+/*!*************************************************!*\
+  !*** ./jaas-client/node_modules/after/index.js ***!
+  \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = after\n\nfunction after(count, callback, err_cb) {\n    var bail = false\n    err_cb = err_cb || noop\n    proxy.count = count\n\n    return (count === 0) ? callback() : proxy\n\n    function proxy(err, result) {\n        if (proxy.count <= 0) {\n            throw new Error('after called too many times')\n        }\n        --proxy.count\n\n        // after first error, rest are passed to err_cb\n        if (err) {\n            bail = true\n            callback(err)\n            // future error callbacks will go to error handler\n            callback = err_cb\n        } else if (proxy.count === 0 && !bail) {\n            callback(null, result)\n        }\n    }\n}\n\nfunction noop() {}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/after/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/arraybuffer.slice/index.js":
+/*!*************************************************************!*\
+  !*** ./jaas-client/node_modules/arraybuffer.slice/index.js ***!
+  \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n  var bytes = arraybuffer.byteLength;\n  start = start || 0;\n  end = end || bytes;\n\n  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n  if (start < 0) { start += bytes; }\n  if (end < 0) { end += bytes; }\n  if (end > bytes) { end = bytes; }\n\n  if (start >= bytes || start >= end || bytes === 0) {\n    return new ArrayBuffer(0);\n  }\n\n  var abv = new Uint8Array(arraybuffer);\n  var result = new Uint8Array(end - start);\n  for (var i = start, ii = 0; i < end; i++, ii++) {\n    result[ii] = abv[i];\n  }\n  return result.buffer;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/arraybuffer.slice/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/backo2/index.js":
+/*!**************************************************!*\
+  !*** ./jaas-client/node_modules/backo2/index.js ***!
+  \**************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/backo2/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js ***!
+  \*******************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(){\n  \"use strict\";\n\n  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n  // Use a lookup table to find the index.\n  var lookup = new Uint8Array(256);\n  for (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n  }\n\n  exports.encode = function(arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer),\n    i, len = bytes.length, base64 = \"\";\n\n    for (i = 0; i < len; i+=3) {\n      base64 += chars[bytes[i] >> 2];\n      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n      base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if ((len % 3) === 2) {\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\n    } else if (len % 3 === 1) {\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\n    }\n\n    return base64;\n  };\n\n  exports.decode =  function(base64) {\n    var bufferLength = base64.length * 0.75,\n    len = base64.length, i, p = 0,\n    encoded1, encoded2, encoded3, encoded4;\n\n    if (base64[base64.length - 1] === \"=\") {\n      bufferLength--;\n      if (base64[base64.length - 2] === \"=\") {\n        bufferLength--;\n      }\n    }\n\n    var arraybuffer = new ArrayBuffer(bufferLength),\n    bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i+=4) {\n      encoded1 = lookup[base64.charCodeAt(i)];\n      encoded2 = lookup[base64.charCodeAt(i+1)];\n      encoded3 = lookup[base64.charCodeAt(i+2)];\n      encoded4 = lookup[base64.charCodeAt(i+3)];\n\n      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n  };\n})();\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/blob/index.js":
+/*!************************************************!*\
+  !*** ./jaas-client/node_modules/blob/index.js ***!
+  \************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/blob/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/clsx/dist/clsx.m.js":
+/*!******************************************************!*\
+  !*** ./jaas-client/node_modules/clsx/dist/clsx.m.js ***!
+  \******************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nfunction toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n});\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/clsx/dist/clsx.m.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/component-bind/index.js":
+/*!**********************************************************!*\
+  !*** ./jaas-client/node_modules/component-bind/index.js ***!
+  \**********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/component-bind/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/component-emitter/index.js":
+/*!*************************************************************!*\
+  !*** ./jaas-client/node_modules/component-emitter/index.js ***!
+  \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (true) {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/component-emitter/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/component-inherit/index.js":
+/*!*************************************************************!*\
+  !*** ./jaas-client/node_modules/component-inherit/index.js ***!
+  \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("\nmodule.exports = function(a, b){\n  var fn = function(){};\n  fn.prototype = b.prototype;\n  a.prototype = new fn;\n  a.prototype.constructor = a;\n};\n\n//# sourceURL=webpack:///./jaas-client/node_modules/component-inherit/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/css-vendor/dist/css-vendor.esm.js":
+/*!********************************************************************!*\
+  !*** ./jaas-client/node_modules/css-vendor/dist/css-vendor.esm.js ***!
+  \********************************************************************/
+/*! exports provided: prefix, supportedKeyframes, supportedProperty, supportedValue */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prefix\", function() { return prefix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportedKeyframes\", function() { return supportedKeyframes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportedProperty\", function() { return supportedProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportedValue\", function() { return supportedValue; });\n/* harmony import */ var is_in_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-in-browser */ \"./jaas-client/node_modules/is-in-browser/dist/module.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n\n\n\n// Export javascript style and css style vendor prefixes.\nvar js = '';\nvar css = '';\nvar vendor = '';\nvar browser = '';\nvar isTouch = is_in_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && 'ontouchstart' in document.documentElement; // We should not do anything if required serverside.\n\nif (is_in_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n  // Order matters. We need to check Webkit the last one because\n  // other vendors use to add Webkit prefixes to some properties\n  var jsCssMap = {\n    Moz: '-moz-',\n    ms: '-ms-',\n    O: '-o-',\n    Webkit: '-webkit-'\n  };\n\n  var _document$createEleme = document.createElement('p'),\n      style = _document$createEleme.style;\n\n  var testProp = 'Transform';\n\n  for (var key in jsCssMap) {\n    if (key + testProp in style) {\n      js = key;\n      css = jsCssMap[key];\n      break;\n    }\n  } // Correctly detect the Edge browser.\n\n\n  if (js === 'Webkit' && 'msHyphens' in style) {\n    js = 'ms';\n    css = jsCssMap.ms;\n    browser = 'edge';\n  } // Correctly detect the Safari browser.\n\n\n  if (js === 'Webkit' && '-apple-trailing-word' in style) {\n    vendor = 'apple';\n  }\n}\n/**\n * Vendor prefix string for the current browser.\n *\n * @type {{js: String, css: String, vendor: String, browser: String}}\n * @api public\n */\n\n\nvar prefix = {\n  js: js,\n  css: css,\n  vendor: vendor,\n  browser: browser,\n  isTouch: isTouch\n};\n\n/**\n * Test if a keyframe at-rule should be prefixed or not\n *\n * @param {String} vendor prefix string for the current browser.\n * @return {String}\n * @api public\n */\n\nfunction supportedKeyframes(key) {\n  // Keyframes is already prefixed. e.g. key = '@-webkit-keyframes a'\n  if (key[1] === '-') return key; // No need to prefix IE/Edge. Older browsers will ignore unsupported rules.\n  // https://caniuse.com/#search=keyframes\n\n  if (prefix.js === 'ms') return key;\n  return \"@\" + prefix.css + \"keyframes\" + key.substr(10);\n}\n\n// https://caniuse.com/#search=appearance\n\nvar appearence = {\n  noPrefill: ['appearance'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'appearance') return false;\n    if (prefix.js === 'ms') return \"-webkit-\" + prop;\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=color-adjust\n\nvar colorAdjust = {\n  noPrefill: ['color-adjust'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'color-adjust') return false;\n    if (prefix.js === 'Webkit') return prefix.css + \"print-\" + prop;\n    return prop;\n  }\n};\n\nvar regExp = /[-\\s]+(.)?/g;\n/**\n * Replaces the letter with the capital letter\n *\n * @param {String} match\n * @param {String} c\n * @return {String}\n * @api private\n */\n\nfunction toUpper(match, c) {\n  return c ? c.toUpperCase() : '';\n}\n/**\n * Convert dash separated strings to camel-cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\n\nfunction camelize(str) {\n  return str.replace(regExp, toUpper);\n}\n\n/**\n * Convert dash separated strings to pascal cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction pascalize(str) {\n  return camelize(\"-\" + str);\n}\n\n// but we can use a longhand property instead.\n// https://caniuse.com/#search=mask\n\nvar mask = {\n  noPrefill: ['mask'],\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^mask/.test(prop)) return false;\n\n    if (prefix.js === 'Webkit') {\n      var longhand = 'mask-image';\n\n      if (camelize(longhand) in style) {\n        return prop;\n      }\n\n      if (prefix.js + pascalize(longhand) in style) {\n        return prefix.css + prop;\n      }\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=text-orientation\n\nvar textOrientation = {\n  noPrefill: ['text-orientation'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'text-orientation') return false;\n\n    if (prefix.vendor === 'apple' && !prefix.isTouch) {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=transform\n\nvar transform = {\n  noPrefill: ['transform'],\n  supportedProperty: function supportedProperty(prop, style, options) {\n    if (prop !== 'transform') return false;\n\n    if (options.transform) {\n      return prop;\n    }\n\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=transition\n\nvar transition = {\n  noPrefill: ['transition'],\n  supportedProperty: function supportedProperty(prop, style, options) {\n    if (prop !== 'transition') return false;\n\n    if (options.transition) {\n      return prop;\n    }\n\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=writing-mode\n\nvar writingMode = {\n  noPrefill: ['writing-mode'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'writing-mode') return false;\n\n    if (prefix.js === 'Webkit' || prefix.js === 'ms' && prefix.browser !== 'edge') {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=user-select\n\nvar userSelect = {\n  noPrefill: ['user-select'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'user-select') return false;\n\n    if (prefix.js === 'Moz' || prefix.js === 'ms' || prefix.vendor === 'apple') {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=multicolumn\n// https://github.com/postcss/autoprefixer/issues/491\n// https://github.com/postcss/autoprefixer/issues/177\n\nvar breakPropsOld = {\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^break-/.test(prop)) return false;\n\n    if (prefix.js === 'Webkit') {\n      var jsProp = \"WebkitColumn\" + pascalize(prop);\n      return jsProp in style ? prefix.css + \"column-\" + prop : false;\n    }\n\n    if (prefix.js === 'Moz') {\n      var _jsProp = \"page\" + pascalize(prop);\n\n      return _jsProp in style ? \"page-\" + prop : false;\n    }\n\n    return false;\n  }\n};\n\n// See https://github.com/postcss/autoprefixer/issues/324.\n\nvar inlineLogicalOld = {\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^(border|margin|padding)-inline/.test(prop)) return false;\n    if (prefix.js === 'Moz') return prop;\n    var newProp = prop.replace('-inline', '');\n    return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n  }\n};\n\n// Camelization is required because we can't test using.\n// CSS syntax for e.g. in FF.\n\nvar unprefixed = {\n  supportedProperty: function supportedProperty(prop, style) {\n    return camelize(prop) in style ? prop : false;\n  }\n};\n\nvar prefixed = {\n  supportedProperty: function supportedProperty(prop, style) {\n    var pascalized = pascalize(prop); // Return custom CSS variable without prefixing.\n\n    if (prop[0] === '-') return prop; // Return already prefixed value without prefixing.\n\n    if (prop[0] === '-' && prop[1] === '-') return prop;\n    if (prefix.js + pascalized in style) return prefix.css + prop; // Try webkit fallback.\n\n    if (prefix.js !== 'Webkit' && \"Webkit\" + pascalized in style) return \"-webkit-\" + prop;\n    return false;\n  }\n};\n\n// https://caniuse.com/#search=scroll-snap\n\nvar scrollSnap = {\n  supportedProperty: function supportedProperty(prop) {\n    if (prop.substring(0, 11) !== 'scroll-snap') return false;\n\n    if (prefix.js === 'ms') {\n      return \"\" + prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=overscroll-behavior\n\nvar overscrollBehavior = {\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'overscroll-behavior') return false;\n\n    if (prefix.js === 'ms') {\n      return prefix.css + \"scroll-chaining\";\n    }\n\n    return prop;\n  }\n};\n\nvar propMap = {\n  'flex-grow': 'flex-positive',\n  'flex-shrink': 'flex-negative',\n  'flex-basis': 'flex-preferred-size',\n  'justify-content': 'flex-pack',\n  order: 'flex-order',\n  'align-items': 'flex-align',\n  'align-content': 'flex-line-pack' // 'align-self' is handled by 'align-self' plugin.\n\n}; // Support old flex spec from 2012.\n\nvar flex2012 = {\n  supportedProperty: function supportedProperty(prop, style) {\n    var newProp = propMap[prop];\n    if (!newProp) return false;\n    return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n  }\n};\n\nvar propMap$1 = {\n  flex: 'box-flex',\n  'flex-grow': 'box-flex',\n  'flex-direction': ['box-orient', 'box-direction'],\n  order: 'box-ordinal-group',\n  'align-items': 'box-align',\n  'flex-flow': ['box-orient', 'box-direction'],\n  'justify-content': 'box-pack'\n};\nvar propKeys = Object.keys(propMap$1);\n\nvar prefixCss = function prefixCss(p) {\n  return prefix.css + p;\n}; // Support old flex spec from 2009.\n\n\nvar flex2009 = {\n  supportedProperty: function supportedProperty(prop, style, _ref) {\n    var multiple = _ref.multiple;\n\n    if (propKeys.indexOf(prop) > -1) {\n      var newProp = propMap$1[prop];\n\n      if (!Array.isArray(newProp)) {\n        return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n      }\n\n      if (!multiple) return false;\n\n      for (var i = 0; i < newProp.length; i++) {\n        if (!(prefix.js + pascalize(newProp[0]) in style)) {\n          return false;\n        }\n      }\n\n      return newProp.map(prefixCss);\n    }\n\n    return false;\n  }\n};\n\n// plugins = [\n//   ...plugins,\n//    breakPropsOld,\n//    inlineLogicalOld,\n//    unprefixed,\n//    prefixed,\n//    scrollSnap,\n//    flex2012,\n//    flex2009\n// ]\n// Plugins without 'noPrefill' value, going last.\n// 'flex-*' plugins should be at the bottom.\n// 'flex2009' going after 'flex2012'.\n// 'prefixed' going after 'unprefixed'\n\nvar plugins = [appearence, colorAdjust, mask, textOrientation, transform, transition, writingMode, userSelect, breakPropsOld, inlineLogicalOld, unprefixed, prefixed, scrollSnap, overscrollBehavior, flex2012, flex2009];\nvar propertyDetectors = plugins.filter(function (p) {\n  return p.supportedProperty;\n}).map(function (p) {\n  return p.supportedProperty;\n});\nvar noPrefill = plugins.filter(function (p) {\n  return p.noPrefill;\n}).reduce(function (a, p) {\n  a.push.apply(a, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(p.noPrefill));\n  return a;\n}, []);\n\nvar el;\nvar cache = {};\n\nif (is_in_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n  el = document.createElement('p'); // We test every property on vendor prefix requirement.\n  // Once tested, result is cached. It gives us up to 70% perf boost.\n  // http://jsperf.com/element-style-object-access-vs-plain-object\n  //\n  // Prefill cache with known css properties to reduce amount of\n  // properties we need to feature test at runtime.\n  // http://davidwalsh.name/vendor-prefix\n\n  var computed = window.getComputedStyle(document.documentElement, '');\n\n  for (var key$1 in computed) {\n    // eslint-disable-next-line no-restricted-globals\n    if (!isNaN(key$1)) cache[computed[key$1]] = computed[key$1];\n  } // Properties that cannot be correctly detected using the\n  // cache prefill method.\n\n\n  noPrefill.forEach(function (x) {\n    return delete cache[x];\n  });\n}\n/**\n * Test if a property is supported, returns supported property with vendor\n * prefix if required. Returns `false` if not supported.\n *\n * @param {String} prop dash separated\n * @param {Object} [options]\n * @return {String|Boolean}\n * @api public\n */\n\n\nfunction supportedProperty(prop, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  // For server-side rendering.\n  if (!el) return prop; // Remove cache for benchmark tests or return property from the cache.\n\n  if ( true && cache[prop] != null) {\n    return cache[prop];\n  } // Check if 'transition' or 'transform' natively supported in browser.\n\n\n  if (prop === 'transition' || prop === 'transform') {\n    options[prop] = prop in el.style;\n  } // Find a plugin for current prefix property.\n\n\n  for (var i = 0; i < propertyDetectors.length; i++) {\n    cache[prop] = propertyDetectors[i](prop, el.style, options); // Break loop, if value found.\n\n    if (cache[prop]) break;\n  } // Reset styles for current property.\n  // Firefox can even throw an error for invalid properties, e.g., \"0\".\n\n\n  try {\n    el.style[prop] = '';\n  } catch (err) {\n    return false;\n  }\n\n  return cache[prop];\n}\n\nvar cache$1 = {};\nvar transitionProperties = {\n  transition: 1,\n  'transition-property': 1,\n  '-webkit-transition': 1,\n  '-webkit-transition-property': 1\n};\nvar transPropsRegExp = /(^\\s*[\\w-]+)|, (\\s*[\\w-]+)(?![^()]*\\))/g;\nvar el$1;\n/**\n * Returns prefixed value transition/transform if needed.\n *\n * @param {String} match\n * @param {String} p1\n * @param {String} p2\n * @return {String}\n * @api private\n */\n\nfunction prefixTransitionCallback(match, p1, p2) {\n  if (p1 === 'var') return 'var';\n  if (p1 === 'all') return 'all';\n  if (p2 === 'all') return ', all';\n  var prefixedValue = p1 ? supportedProperty(p1) : \", \" + supportedProperty(p2);\n  if (!prefixedValue) return p1 || p2;\n  return prefixedValue;\n}\n\nif (is_in_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) el$1 = document.createElement('p');\n/**\n * Returns prefixed value if needed. Returns `false` if value is not supported.\n *\n * @param {String} property\n * @param {String} value\n * @return {String|Boolean}\n * @api public\n */\n\nfunction supportedValue(property, value) {\n  // For server-side rendering.\n  var prefixedValue = value;\n  if (!el$1 || property === 'content') return value; // It is a string or a number as a string like '1'.\n  // We want only prefixable values here.\n  // eslint-disable-next-line no-restricted-globals\n\n  if (typeof prefixedValue !== 'string' || !isNaN(parseInt(prefixedValue, 10))) {\n    return prefixedValue;\n  } // Create cache key for current value.\n\n\n  var cacheKey = property + prefixedValue; // Remove cache for benchmark tests or return value from cache.\n\n  if ( true && cache$1[cacheKey] != null) {\n    return cache$1[cacheKey];\n  } // IE can even throw an error in some cases, for e.g. style.content = 'bar'.\n\n\n  try {\n    // Test value as it is.\n    el$1.style[property] = prefixedValue;\n  } catch (err) {\n    // Return false if value not supported.\n    cache$1[cacheKey] = false;\n    return false;\n  } // If 'transition' or 'transition-property' property.\n\n\n  if (transitionProperties[property]) {\n    prefixedValue = prefixedValue.replace(transPropsRegExp, prefixTransitionCallback);\n  } else if (el$1.style[property] === '') {\n    // Value with a vendor prefix.\n    prefixedValue = prefix.css + prefixedValue; // Hardcode test to convert \"flex\" to \"-ms-flexbox\" for IE10.\n\n    if (prefixedValue === '-ms-flex') el$1.style[property] = '-ms-flexbox'; // Test prefixed value.\n\n    el$1.style[property] = prefixedValue; // Return false if value not supported.\n\n    if (el$1.style[property] === '') {\n      cache$1[cacheKey] = false;\n      return false;\n    }\n  } // Reset styles for current property.\n\n\n  el$1.style[property] = ''; // Write current value to cache.\n\n  cache$1[cacheKey] = prefixedValue;\n  return cache$1[cacheKey];\n}\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/css-vendor/dist/css-vendor.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/debug/src/browser.js":
+/*!*******************************************************!*\
+  !*** ./jaas-client/node_modules/debug/src/browser.js ***!
+  \*******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/* WEBPACK VAR INJECTION */(function(process) {/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\nfunction log(...args) {\n\t// This hackery is required for IE8/9, where\n\t// the `console.log` function doesn't have 'apply'\n\treturn typeof console === 'object' &&\n\t\tconsole.log &&\n\t\tconsole.log(...args);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"./jaas-client/node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/debug/src/browser.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/debug/src/common.js":
+/*!******************************************************!*\
+  !*** ./jaas-client/node_modules/debug/src/common.js ***!
+  \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = __webpack_require__(/*! ms */ \"./jaas-client/node_modules/ms/index.js\");\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* Active `debug` instances.\n\t*/\n\tcreateDebug.instances = [];\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = selectColor(namespace);\n\t\tdebug.destroy = destroy;\n\t\tdebug.extend = extend;\n\t\t// Debug.formatArgs = formatArgs;\n\t\t// debug.rawLog = rawLog;\n\n\t\t// env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\tcreateDebug.instances.push(debug);\n\n\t\treturn debug;\n\t}\n\n\tfunction destroy() {\n\t\tconst index = createDebug.instances.indexOf(this);\n\t\tif (index !== -1) {\n\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\tconst instance = createDebug.instances[i];\n\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/debug/src/common.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/dom-helpers/esm/addClass.js":
+/*!**************************************************************!*\
+  !*** ./jaas-client/node_modules/dom-helpers/esm/addClass.js ***!
+  \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return addClass; });\n/* harmony import */ var _hasClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hasClass */ \"./jaas-client/node_modules/dom-helpers/esm/hasClass.js\");\n\nfunction addClass(element, className) {\n  if (element.classList) element.classList.add(className);else if (!Object(_hasClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/dom-helpers/esm/addClass.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/dom-helpers/esm/hasClass.js":
+/*!**************************************************************!*\
+  !*** ./jaas-client/node_modules/dom-helpers/esm/hasClass.js ***!
+  \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return hasClass; });\nfunction hasClass(element, className) {\n  if (element.classList) return !!className && element.classList.contains(className);\n  return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/dom-helpers/esm/hasClass.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/dom-helpers/esm/removeClass.js":
+/*!*****************************************************************!*\
+  !*** ./jaas-client/node_modules/dom-helpers/esm/removeClass.js ***!
+  \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return removeClass; });\nfunction replaceClassName(origClass, classToRemove) {\n  return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nfunction removeClass(element, className) {\n  if (element.classList) {\n    element.classList.remove(className);\n  } else if (typeof element.className === 'string') {\n    ;\n    element.className = replaceClassName(element.className, className);\n  } else {\n    element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n  }\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/dom-helpers/esm/removeClass.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js ***!
+  \*****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/index.js":
+/*!****************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/index.js ***!
+  \****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\nmodule.exports = __webpack_require__(/*! ./socket */ \"./jaas-client/node_modules/engine.io-client/lib/socket.js\");\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/socket.js":
+/*!*****************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/socket.js ***!
+  \*****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/**\n * Module dependencies.\n */\n\nvar transports = __webpack_require__(/*! ./transports/index */ \"./jaas-client/node_modules/engine.io-client/lib/transports/index.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/component-emitter/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('engine.io-client:socket');\nvar index = __webpack_require__(/*! indexof */ \"./jaas-client/node_modules/indexof/index.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\nvar parseuri = __webpack_require__(/*! parseuri */ \"./jaas-client/node_modules/parseuri/index.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./jaas-client/node_modules/parseqs/index.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n  opts = opts || {};\n\n  if (uri && 'object' === typeof uri) {\n    opts = uri;\n    uri = null;\n  }\n\n  if (uri) {\n    uri = parseuri(uri);\n    opts.hostname = uri.host;\n    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n    opts.port = uri.port;\n    if (uri.query) opts.query = uri.query;\n  } else if (opts.host) {\n    opts.hostname = parseuri(opts.host).host;\n  }\n\n  this.secure = null != opts.secure ? opts.secure\n    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\n  if (opts.hostname && !opts.port) {\n    // if no port is specified manually, use the protocol default\n    opts.port = this.secure ? '443' : '80';\n  }\n\n  this.agent = opts.agent || false;\n  this.hostname = opts.hostname ||\n    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && location.port\n      ? location.port\n      : (this.secure ? 443 : 80));\n  this.query = opts.query || {};\n  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n  this.upgrade = false !== opts.upgrade;\n  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n  this.forceJSONP = !!opts.forceJSONP;\n  this.jsonp = false !== opts.jsonp;\n  this.forceBase64 = !!opts.forceBase64;\n  this.enablesXDR = !!opts.enablesXDR;\n  this.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\n  this.readyState = '';\n  this.writeBuffer = [];\n  this.prevBufferLen = 0;\n  this.policyPort = opts.policyPort || 843;\n  this.rememberUpgrade = opts.rememberUpgrade || false;\n  this.binaryType = null;\n  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n    this.perMessageDeflate.threshold = 1024;\n  }\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx || null;\n  this.key = opts.key || null;\n  this.passphrase = opts.passphrase || null;\n  this.cert = opts.cert || null;\n  this.ca = opts.ca || null;\n  this.ciphers = opts.ciphers || null;\n  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\n    }\n  }\n\n  // set on handshake\n  this.id = null;\n  this.upgrades = null;\n  this.pingInterval = null;\n  this.pingTimeout = null;\n\n  // set on heartbeat\n  this.pingIntervalTimer = null;\n  this.pingTimeoutTimer = null;\n\n  this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = __webpack_require__(/*! ./transport */ \"./jaas-client/node_modules/engine.io-client/lib/transport.js\");\nSocket.transports = __webpack_require__(/*! ./transports/index */ \"./jaas-client/node_modules/engine.io-client/lib/transports/index.js\");\nSocket.parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n  debug('creating transport \"%s\"', name);\n  var query = clone(this.query);\n\n  // append engine.io protocol identifier\n  query.EIO = parser.protocol;\n\n  // transport name\n  query.transport = name;\n\n  // per-transport options\n  var options = this.transportOptions[name] || {};\n\n  // session id if we already have one\n  if (this.id) query.sid = this.id;\n\n  var transport = new transports[name]({\n    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\n  });\n\n  return transport;\n};\n\nfunction clone (obj) {\n  var o = {};\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      o[i] = obj[i];\n    }\n  }\n  return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n  var transport;\n  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n    transport = 'websocket';\n  } else if (0 === this.transports.length) {\n    // Emit error on next tick so it can be listened to\n    var self = this;\n    setTimeout(function () {\n      self.emit('error', 'No transports available');\n    }, 0);\n    return;\n  } else {\n    transport = this.transports[0];\n  }\n  this.readyState = 'opening';\n\n  // Retry with the next transport if the transport is disabled (jsonp: false)\n  try {\n    transport = this.createTransport(transport);\n  } catch (e) {\n    this.transports.shift();\n    this.open();\n    return;\n  }\n\n  transport.open();\n  this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n  debug('setting transport %s', transport.name);\n  var self = this;\n\n  if (this.transport) {\n    debug('clearing existing transport %s', this.transport.name);\n    this.transport.removeAllListeners();\n  }\n\n  // set up transport\n  this.transport = transport;\n\n  // set up transport listeners\n  transport\n  .on('drain', function () {\n    self.onDrain();\n  })\n  .on('packet', function (packet) {\n    self.onPacket(packet);\n  })\n  .on('error', function (e) {\n    self.onError(e);\n  })\n  .on('close', function () {\n    self.onClose('transport close');\n  });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n  debug('probing transport \"%s\"', name);\n  var transport = this.createTransport(name, { probe: 1 });\n  var failed = false;\n  var self = this;\n\n  Socket.priorWebsocketSuccess = false;\n\n  function onTransportOpen () {\n    if (self.onlyBinaryUpgrades) {\n      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n      failed = failed || upgradeLosesBinary;\n    }\n    if (failed) return;\n\n    debug('probe transport \"%s\" opened', name);\n    transport.send([{ type: 'ping', data: 'probe' }]);\n    transport.once('packet', function (msg) {\n      if (failed) return;\n      if ('pong' === msg.type && 'probe' === msg.data) {\n        debug('probe transport \"%s\" pong', name);\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n        debug('pausing current transport \"%s\"', self.transport.name);\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n          debug('changing transport and sending upgrade packet');\n\n          cleanup();\n\n          self.setTransport(transport);\n          transport.send([{ type: 'upgrade' }]);\n          self.emit('upgrade', transport);\n          transport = null;\n          self.upgrading = false;\n          self.flush();\n        });\n      } else {\n        debug('probe transport \"%s\" failed', name);\n        var err = new Error('probe error');\n        err.transport = transport.name;\n        self.emit('upgradeError', err);\n      }\n    });\n  }\n\n  function freezeTransport () {\n    if (failed) return;\n\n    // Any callback called by transport should be ignored since now\n    failed = true;\n\n    cleanup();\n\n    transport.close();\n    transport = null;\n  }\n\n  // Handle any error that happens while probing\n  function onerror (err) {\n    var error = new Error('probe error: ' + err);\n    error.transport = transport.name;\n\n    freezeTransport();\n\n    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n    self.emit('upgradeError', error);\n  }\n\n  function onTransportClose () {\n    onerror('transport closed');\n  }\n\n  // When the socket is closed while we're probing\n  function onclose () {\n    onerror('socket closed');\n  }\n\n  // When the socket is upgraded while we're probing\n  function onupgrade (to) {\n    if (transport && to.name !== transport.name) {\n      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n      freezeTransport();\n    }\n  }\n\n  // Remove all listeners on the transport and on self\n  function cleanup () {\n    transport.removeListener('open', onTransportOpen);\n    transport.removeListener('error', onerror);\n    transport.removeListener('close', onTransportClose);\n    self.removeListener('close', onclose);\n    self.removeListener('upgrading', onupgrade);\n  }\n\n  transport.once('open', onTransportOpen);\n  transport.once('error', onerror);\n  transport.once('close', onTransportClose);\n\n  this.once('close', onclose);\n  this.once('upgrading', onupgrade);\n\n  transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n  debug('socket open');\n  this.readyState = 'open';\n  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n  this.emit('open');\n  this.flush();\n\n  // we check for `readyState` in case an `open`\n  // listener already closed the socket\n  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n    debug('starting upgrade probes');\n    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n      this.probe(this.upgrades[i]);\n    }\n  }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n  if ('opening' === this.readyState || 'open' === this.readyState ||\n      'closing' === this.readyState) {\n    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n    this.emit('packet', packet);\n\n    // Socket is live - any packet counts\n    this.emit('heartbeat');\n\n    switch (packet.type) {\n      case 'open':\n        this.onHandshake(JSON.parse(packet.data));\n        break;\n\n      case 'pong':\n        this.setPing();\n        this.emit('pong');\n        break;\n\n      case 'error':\n        var err = new Error('server error');\n        err.code = packet.data;\n        this.onError(err);\n        break;\n\n      case 'message':\n        this.emit('data', packet.data);\n        this.emit('message', packet.data);\n        break;\n    }\n  } else {\n    debug('packet received with socket readyState \"%s\"', this.readyState);\n  }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n  this.emit('handshake', data);\n  this.id = data.sid;\n  this.transport.query.sid = data.sid;\n  this.upgrades = this.filterUpgrades(data.upgrades);\n  this.pingInterval = data.pingInterval;\n  this.pingTimeout = data.pingTimeout;\n  this.onOpen();\n  // In case open handler closes socket\n  if ('closed' === this.readyState) return;\n  this.setPing();\n\n  // Prolong liveness of socket on heartbeat\n  this.removeListener('heartbeat', this.onHeartbeat);\n  this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n  clearTimeout(this.pingTimeoutTimer);\n  var self = this;\n  self.pingTimeoutTimer = setTimeout(function () {\n    if ('closed' === self.readyState) return;\n    self.onClose('ping timeout');\n  }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n  var self = this;\n  clearTimeout(self.pingIntervalTimer);\n  self.pingIntervalTimer = setTimeout(function () {\n    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n    self.ping();\n    self.onHeartbeat(self.pingTimeout);\n  }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n  var self = this;\n  this.sendPacket('ping', function () {\n    self.emit('ping');\n  });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n  this.writeBuffer.splice(0, this.prevBufferLen);\n\n  // setting prevBufferLen = 0 is very important\n  // for example, when upgrading, upgrade packet is sent over,\n  // and a nonzero prevBufferLen could cause problems on `drain`\n  this.prevBufferLen = 0;\n\n  if (0 === this.writeBuffer.length) {\n    this.emit('drain');\n  } else {\n    this.flush();\n  }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n  if ('closed' !== this.readyState && this.transport.writable &&\n    !this.upgrading && this.writeBuffer.length) {\n    debug('flushing %d packets in socket', this.writeBuffer.length);\n    this.transport.send(this.writeBuffer);\n    // keep track of current length of writeBuffer\n    // splice writeBuffer and callbackBuffer on `drain`\n    this.prevBufferLen = this.writeBuffer.length;\n    this.emit('flush');\n  }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n  this.sendPacket('message', msg, options, fn);\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n  if ('function' === typeof data) {\n    fn = data;\n    data = undefined;\n  }\n\n  if ('function' === typeof options) {\n    fn = options;\n    options = null;\n  }\n\n  if ('closing' === this.readyState || 'closed' === this.readyState) {\n    return;\n  }\n\n  options = options || {};\n  options.compress = false !== options.compress;\n\n  var packet = {\n    type: type,\n    data: data,\n    options: options\n  };\n  this.emit('packetCreate', packet);\n  this.writeBuffer.push(packet);\n  if (fn) this.once('flush', fn);\n  this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.readyState = 'closing';\n\n    var self = this;\n\n    if (this.writeBuffer.length) {\n      this.once('drain', function () {\n        if (this.upgrading) {\n          waitForUpgrade();\n        } else {\n          close();\n        }\n      });\n    } else if (this.upgrading) {\n      waitForUpgrade();\n    } else {\n      close();\n    }\n  }\n\n  function close () {\n    self.onClose('forced close');\n    debug('socket closing - telling transport to close');\n    self.transport.close();\n  }\n\n  function cleanupAndClose () {\n    self.removeListener('upgrade', cleanupAndClose);\n    self.removeListener('upgradeError', cleanupAndClose);\n    close();\n  }\n\n  function waitForUpgrade () {\n    // wait for upgrade to finish since we can't send packets while pausing a transport\n    self.once('upgrade', cleanupAndClose);\n    self.once('upgradeError', cleanupAndClose);\n  }\n\n  return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n  debug('socket error %j', err);\n  Socket.priorWebsocketSuccess = false;\n  this.emit('error', err);\n  this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n    debug('socket close with reason: \"%s\"', reason);\n    var self = this;\n\n    // clear timers\n    clearTimeout(this.pingIntervalTimer);\n    clearTimeout(this.pingTimeoutTimer);\n\n    // stop event from firing again for transport\n    this.transport.removeAllListeners('close');\n\n    // ensure transport won't stay open\n    this.transport.close();\n\n    // ignore further transport communication\n    this.transport.removeAllListeners();\n\n    // set ready state\n    this.readyState = 'closed';\n\n    // clear session id\n    this.id = null;\n\n    // emit close event\n    this.emit('close', reason, desc);\n\n    // clean buffers after, so users can still\n    // grab the buffers on `close` event\n    self.writeBuffer = [];\n    self.prevBufferLen = 0;\n  }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n  var filteredUpgrades = [];\n  for (var i = 0, j = upgrades.length; i < j; i++) {\n    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n  }\n  return filteredUpgrades;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/socket.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/transport.js":
+/*!********************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/transport.js ***!
+  \********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/**\n * Module dependencies.\n */\n\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/component-emitter/index.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n  this.path = opts.path;\n  this.hostname = opts.hostname;\n  this.port = opts.port;\n  this.secure = opts.secure;\n  this.query = opts.query;\n  this.timestampParam = opts.timestampParam;\n  this.timestampRequests = opts.timestampRequests;\n  this.readyState = '';\n  this.agent = opts.agent || false;\n  this.socket = opts.socket;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n  var err = new Error(msg);\n  err.type = 'TransportError';\n  err.description = desc;\n  this.emit('error', err);\n  return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n  if ('closed' === this.readyState || '' === this.readyState) {\n    this.readyState = 'opening';\n    this.doOpen();\n  }\n\n  return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.doClose();\n    this.onClose();\n  }\n\n  return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n  if ('open' === this.readyState) {\n    this.write(packets);\n  } else {\n    throw new Error('Transport not open');\n  }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n  this.readyState = 'open';\n  this.writable = true;\n  this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n  var packet = parser.decodePacket(data, this.socket.binaryType);\n  this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n  this.readyState = 'closed';\n  this.emit('close');\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transport.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/index.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/index.js ***!
+  \***************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = __webpack_require__(/*! xmlhttprequest-ssl */ \"./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js\");\nvar XHR = __webpack_require__(/*! ./polling-xhr */ \"./jaas-client/node_modules/engine.io-client/lib/transports/polling-xhr.js\");\nvar JSONP = __webpack_require__(/*! ./polling-jsonp */ \"./jaas-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js\");\nvar websocket = __webpack_require__(/*! ./websocket */ \"./jaas-client/node_modules/engine.io-client/lib/transports/websocket.js\");\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n  var xhr;\n  var xd = false;\n  var xs = false;\n  var jsonp = false !== opts.jsonp;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    xd = opts.hostname !== location.hostname || port !== opts.port;\n    xs = opts.secure !== isSSL;\n  }\n\n  opts.xdomain = xd;\n  opts.xscheme = xs;\n  xhr = new XMLHttpRequest(opts);\n\n  if ('open' in xhr && !opts.forceJSONP) {\n    return new XHR(opts);\n  } else {\n    if (!jsonp) throw new Error('JSONP disabled');\n    return new JSONP(opts);\n  }\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js ***!
+  \***********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/**\n * Module requirements.\n */\n\nvar Polling = __webpack_require__(/*! ./polling */ \"./jaas-client/node_modules/engine.io-client/lib/transports/polling.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./jaas-client/node_modules/component-inherit/index.js\");\nvar globalThis = __webpack_require__(/*! ../globalThis */ \"./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n  Polling.call(this, opts);\n\n  this.query = this.query || {};\n\n  // define global callbacks array if not present\n  // we do this here (lazily) to avoid unneeded global pollution\n  if (!callbacks) {\n    // we need to consider multiple engines in the same page\n    callbacks = globalThis.___eio = (globalThis.___eio || []);\n  }\n\n  // callback identifier\n  this.index = callbacks.length;\n\n  // add callback to jsonp global\n  var self = this;\n  callbacks.push(function (msg) {\n    self.onData(msg);\n  });\n\n  // append to query string\n  this.query.j = this.index;\n\n  // prevent spurious errors from being emitted when the window is unloaded\n  if (typeof addEventListener === 'function') {\n    addEventListener('beforeunload', function () {\n      if (self.script) self.script.onerror = empty;\n    }, false);\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  if (this.form) {\n    this.form.parentNode.removeChild(this.form);\n    this.form = null;\n    this.iframe = null;\n  }\n\n  Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n  var self = this;\n  var script = document.createElement('script');\n\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  script.async = true;\n  script.src = this.uri();\n  script.onerror = function (e) {\n    self.onError('jsonp poll error', e);\n  };\n\n  var insertAt = document.getElementsByTagName('script')[0];\n  if (insertAt) {\n    insertAt.parentNode.insertBefore(script, insertAt);\n  } else {\n    (document.head || document.body).appendChild(script);\n  }\n  this.script = script;\n\n  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n  if (isUAgecko) {\n    setTimeout(function () {\n      var iframe = document.createElement('iframe');\n      document.body.appendChild(iframe);\n      document.body.removeChild(iframe);\n    }, 100);\n  }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n  var self = this;\n\n  if (!this.form) {\n    var form = document.createElement('form');\n    var area = document.createElement('textarea');\n    var id = this.iframeId = 'eio_iframe_' + this.index;\n    var iframe;\n\n    form.className = 'socketio';\n    form.style.position = 'absolute';\n    form.style.top = '-1000px';\n    form.style.left = '-1000px';\n    form.target = id;\n    form.method = 'POST';\n    form.setAttribute('accept-charset', 'utf-8');\n    area.name = 'd';\n    form.appendChild(area);\n    document.body.appendChild(form);\n\n    this.form = form;\n    this.area = area;\n  }\n\n  this.form.action = this.uri();\n\n  function complete () {\n    initIframe();\n    fn();\n  }\n\n  function initIframe () {\n    if (self.iframe) {\n      try {\n        self.form.removeChild(self.iframe);\n      } catch (e) {\n        self.onError('jsonp polling iframe removal error', e);\n      }\n    }\n\n    try {\n      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n      iframe = document.createElement(html);\n    } catch (e) {\n      iframe = document.createElement('iframe');\n      iframe.name = self.iframeId;\n      iframe.src = 'javascript:0';\n    }\n\n    iframe.id = self.iframeId;\n\n    self.form.appendChild(iframe);\n    self.iframe = iframe;\n  }\n\n  initIframe();\n\n  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n  data = data.replace(rEscapedNewline, '\\\\\\n');\n  this.area.value = data.replace(rNewline, '\\\\n');\n\n  try {\n    this.form.submit();\n  } catch (e) {}\n\n  if (this.iframe.attachEvent) {\n    this.iframe.onreadystatechange = function () {\n      if (self.iframe.readyState === 'complete') {\n        complete();\n      }\n    };\n  } else {\n    this.iframe.onload = complete;\n  }\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/polling-xhr.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/polling-xhr.js ***!
+  \*********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = __webpack_require__(/*! xmlhttprequest-ssl */ \"./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js\");\nvar Polling = __webpack_require__(/*! ./polling */ \"./jaas-client/node_modules/engine.io-client/lib/transports/polling.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/component-emitter/index.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./jaas-client/node_modules/component-inherit/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('engine.io-client:polling-xhr');\nvar globalThis = __webpack_require__(/*! ../globalThis */ \"./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n  Polling.call(this, opts);\n  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n  opts = opts || {};\n  opts.uri = this.uri();\n  opts.xd = this.xd;\n  opts.xs = this.xs;\n  opts.agent = this.agent || false;\n  opts.supportsBinary = this.supportsBinary;\n  opts.enablesXDR = this.enablesXDR;\n  opts.withCredentials = this.withCredentials;\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  opts.requestTimeout = this.requestTimeout;\n\n  // other options for Node.js client\n  opts.extraHeaders = this.extraHeaders;\n\n  return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n  var isBinary = typeof data !== 'string' && data !== undefined;\n  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n  var self = this;\n  req.on('success', fn);\n  req.on('error', function (err) {\n    self.onError('xhr post error', err);\n  });\n  this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n  debug('xhr poll');\n  var req = this.request();\n  var self = this;\n  req.on('data', function (data) {\n    self.onData(data);\n  });\n  req.on('error', function (err) {\n    self.onError('xhr poll error', err);\n  });\n  this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n  this.method = opts.method || 'GET';\n  this.uri = opts.uri;\n  this.xd = !!opts.xd;\n  this.xs = !!opts.xs;\n  this.async = false !== opts.async;\n  this.data = undefined !== opts.data ? opts.data : null;\n  this.agent = opts.agent;\n  this.isBinary = opts.isBinary;\n  this.supportsBinary = opts.supportsBinary;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n\n  this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  var xhr = this.xhr = new XMLHttpRequest(opts);\n  var self = this;\n\n  try {\n    debug('xhr open %s: %s', this.method, this.uri);\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n        for (var i in this.extraHeaders) {\n          if (this.extraHeaders.hasOwnProperty(i)) {\n            xhr.setRequestHeader(i, this.extraHeaders[i]);\n          }\n        }\n      }\n    } catch (e) {}\n\n    if ('POST' === this.method) {\n      try {\n        if (this.isBinary) {\n          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n        } else {\n          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n        }\n      } catch (e) {}\n    }\n\n    try {\n      xhr.setRequestHeader('Accept', '*/*');\n    } catch (e) {}\n\n    // ie6 check\n    if ('withCredentials' in xhr) {\n      xhr.withCredentials = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\n    }\n\n    if (this.hasXDR()) {\n      xhr.onload = function () {\n        self.onLoad();\n      };\n      xhr.onerror = function () {\n        self.onError(xhr.responseText);\n      };\n    } else {\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\n        if (4 !== xhr.readyState) return;\n        if (200 === xhr.status || 1223 === xhr.status) {\n          self.onLoad();\n        } else {\n          // make sure the `error` event handler that's user-set\n          // does not throw in the same tick and gets caught here\n          setTimeout(function () {\n            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n    debug('xhr data %s', this.data);\n    xhr.send(this.data);\n  } catch (e) {\n    // Need to defer since .create() is called directly fhrom the constructor\n    // and thus the 'error' event can only be only bound *after* this exception\n    // occurs.  Therefore, also, we cannot throw here at all.\n    setTimeout(function () {\n      self.onError(e);\n    }, 0);\n    return;\n  }\n\n  if (typeof document !== 'undefined') {\n    this.index = Request.requestsCount++;\n    Request.requests[this.index] = this;\n  }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n  this.emit('success');\n  this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n  this.emit('data', data);\n  this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n  this.emit('error', err);\n  this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n  if ('undefined' === typeof this.xhr || null === this.xhr) {\n    return;\n  }\n  // xmlhttprequest\n  if (this.hasXDR()) {\n    this.xhr.onload = this.xhr.onerror = empty;\n  } else {\n    this.xhr.onreadystatechange = empty;\n  }\n\n  if (fromError) {\n    try {\n      this.xhr.abort();\n    } catch (e) {}\n  }\n\n  if (typeof document !== 'undefined') {\n    delete Request.requests[this.index];\n  }\n\n  this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n  var data;\n  try {\n    var contentType;\n    try {\n      contentType = this.xhr.getResponseHeader('Content-Type');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\n    }\n  } catch (e) {\n    this.onError(e);\n  }\n  if (null != data) {\n    this.onData(data);\n  }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n  this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, unloadHandler, false);\n  }\n}\n\nfunction unloadHandler () {\n  for (var i in Request.requests) {\n    if (Request.requests.hasOwnProperty(i)) {\n      Request.requests[i].abort();\n    }\n  }\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/polling-xhr.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/polling.js":
+/*!*****************************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/polling.js ***!
+  \*****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/**\n * Module dependencies.\n */\n\nvar Transport = __webpack_require__(/*! ../transport */ \"./jaas-client/node_modules/engine.io-client/lib/transport.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./jaas-client/node_modules/parseqs/index.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./jaas-client/node_modules/component-inherit/index.js\");\nvar yeast = __webpack_require__(/*! yeast */ \"./jaas-client/node_modules/yeast/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n  var XMLHttpRequest = __webpack_require__(/*! xmlhttprequest-ssl */ \"./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js\");\n  var xhr = new XMLHttpRequest({ xdomain: false });\n  return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (!hasXHR2 || forceBase64) {\n    this.supportsBinary = false;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n  this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n  var self = this;\n\n  this.readyState = 'pausing';\n\n  function pause () {\n    debug('paused');\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n      debug('we are currently polling - waiting to pause');\n      total++;\n      this.once('pollComplete', function () {\n        debug('pre-pause polling complete');\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n      debug('we are currently writing - waiting to pause');\n      total++;\n      this.once('drain', function () {\n        debug('pre-pause writing complete');\n        --total || pause();\n      });\n    }\n  } else {\n    pause();\n  }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n  debug('polling');\n  this.polling = true;\n  this.doPoll();\n  this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n  var self = this;\n  debug('polling got data %s', data);\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState) {\n      self.onOpen();\n    }\n\n    // if its a close packet, we close the ongoing requests\n    if ('close' === packet.type) {\n      self.onClose();\n      return false;\n    }\n\n    // otherwise bypass onData and handle the message\n    self.onPacket(packet);\n  };\n\n  // decode payload\n  parser.decodePayload(data, this.socket.binaryType, callback);\n\n  // if an event did not trigger closing\n  if ('closed' !== this.readyState) {\n    // if we got data we're not polling\n    this.polling = false;\n    this.emit('pollComplete');\n\n    if ('open' === this.readyState) {\n      this.poll();\n    } else {\n      debug('ignoring poll - transport state \"%s\"', this.readyState);\n    }\n  }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n  var self = this;\n\n  function close () {\n    debug('writing close packet');\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n    debug('transport open - closing');\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n    debug('transport not open - deferring close');\n    this.once('open', close);\n  }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n  var callbackfn = function () {\n    self.writable = true;\n    self.emit('drain');\n  };\n\n  parser.encodePayload(packets, this.supportsBinary, function (data) {\n    self.doWrite(data, callbackfn);\n  });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'https' : 'http';\n  var port = '';\n\n  // cache busting is forced\n  if (false !== this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  if (!this.supportsBinary && !query.sid) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // avoid port if default for schema\n  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n     ('http' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/polling.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/transports/websocket.js":
+/*!*******************************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/transports/websocket.js ***!
+  \*******************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/* WEBPACK VAR INJECTION */(function(Buffer) {/**\n * Module dependencies.\n */\n\nvar Transport = __webpack_require__(/*! ../transport */ \"./jaas-client/node_modules/engine.io-client/lib/transport.js\");\nvar parser = __webpack_require__(/*! engine.io-parser */ \"./jaas-client/node_modules/engine.io-parser/lib/browser.js\");\nvar parseqs = __webpack_require__(/*! parseqs */ \"./jaas-client/node_modules/parseqs/index.js\");\nvar inherit = __webpack_require__(/*! component-inherit */ \"./jaas-client/node_modules/component-inherit/index.js\");\nvar yeast = __webpack_require__(/*! yeast */ \"./jaas-client/node_modules/yeast/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = __webpack_require__(/*! ws */ 0);\n  } catch (e) { }\n}\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (forceBase64) {\n    this.supportsBinary = false;\n  }\n  this.perMessageDeflate = opts.perMessageDeflate;\n  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n  if (!this.check()) {\n    // let probe timeout\n    return;\n  }\n\n  var uri = this.uri();\n  var protocols = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\n\n    // SSL options for Node.js client\n    opts.pfx = this.pfx;\n    opts.key = this.key;\n    opts.passphrase = this.passphrase;\n    opts.cert = this.cert;\n    opts.ca = this.ca;\n    opts.ciphers = this.ciphers;\n    opts.rejectUnauthorized = this.rejectUnauthorized;\n  }\n\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(uri, protocols, opts);\n  } catch (err) {\n    return this.emit('error', err);\n  }\n\n  if (this.ws.binaryType === undefined) {\n    this.supportsBinary = false;\n  }\n\n  if (this.ws.supports && this.ws.supports.binary) {\n    this.supportsBinary = true;\n    this.ws.binaryType = 'nodebuffer';\n  } else {\n    this.ws.binaryType = 'arraybuffer';\n  }\n\n  this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n  var self = this;\n\n  this.ws.onopen = function () {\n    self.onOpen();\n  };\n  this.ws.onclose = function () {\n    self.onClose();\n  };\n  this.ws.onmessage = function (ev) {\n    self.onData(ev.data);\n  };\n  this.ws.onerror = function (e) {\n    self.onError('websocket error', e);\n  };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n\n  // encodePacket efficient as it uses WS framing\n  // no need for encodePayload\n  var total = packets.length;\n  for (var i = 0, l = total; i < l; i++) {\n    (function (packet) {\n      parser.encodePacket(packet, self.supportsBinary, function (data) {\n        if (!self.usingBrowserWebSocket) {\n          // always create a new object (GH-437)\n          var opts = {};\n          if (packet.options) {\n            opts.compress = packet.options.compress;\n          }\n\n          if (self.perMessageDeflate) {\n            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n            if (len < self.perMessageDeflate.threshold) {\n              opts.compress = false;\n            }\n          }\n        }\n\n        // Sometimes the websocket has already been closed but the browser didn't\n        // have a chance of informing us about it yet, in that case send will\n        // throw an error\n        try {\n          if (self.usingBrowserWebSocket) {\n            // TypeError is thrown when passing the second argument on Safari\n            self.ws.send(data);\n          } else {\n            self.ws.send(data, opts);\n          }\n        } catch (e) {\n          debug('websocket closed before onclose event');\n        }\n\n        --total || done();\n      });\n    })(packets[i]);\n  }\n\n  function done () {\n    self.emit('flush');\n\n    // fake drain\n    // defer to next tick to allow Socket to clear writeBuffer\n    setTimeout(function () {\n      self.writable = true;\n      self.emit('drain');\n    }, 0);\n  }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n  Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n  if (typeof this.ws !== 'undefined') {\n    this.ws.close();\n  }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'wss' : 'ws';\n  var port = '';\n\n  // avoid port if default for schema\n  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // append timestamp to URI\n  if (this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  // communicate binary support capabilities\n  if (!this.supportsBinary) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../node_modules/buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/transports/websocket.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js ***!
+  \*************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("// browser shim for xmlhttprequest module\n\nvar hasCORS = __webpack_require__(/*! has-cors */ \"./jaas-client/node_modules/has-cors/index.js\");\nvar globalThis = __webpack_require__(/*! ./globalThis */ \"./jaas-client/node_modules/engine.io-client/lib/globalThis.browser.js\");\n\nmodule.exports = function (opts) {\n  var xdomain = opts.xdomain;\n\n  // scheme must be same when usign XDomainRequest\n  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n  var xscheme = opts.xscheme;\n\n  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n  // https://github.com/Automattic/engine.io-client/pull/217\n  var enablesXDR = opts.enablesXDR;\n\n  // XMLHttpRequest can be disabled on IE\n  try {\n    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n      return new XMLHttpRequest();\n    }\n  } catch (e) { }\n\n  // Use XDomainRequest for IE8 if enablesXDR is true\n  // because loading bar keeps flashing when using jsonp-polling\n  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n  try {\n    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n      return new XDomainRequest();\n    }\n  } catch (e) { }\n\n  if (!xdomain) {\n    try {\n      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-client/lib/xmlhttprequest.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-parser/lib/browser.js":
+/*!******************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-parser/lib/browser.js ***!
+  \******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/**\n * Module dependencies.\n */\n\nvar keys = __webpack_require__(/*! ./keys */ \"./jaas-client/node_modules/engine.io-parser/lib/keys.js\");\nvar hasBinary = __webpack_require__(/*! has-binary2 */ \"./jaas-client/node_modules/has-binary2/index.js\");\nvar sliceBuffer = __webpack_require__(/*! arraybuffer.slice */ \"./jaas-client/node_modules/arraybuffer.slice/index.js\");\nvar after = __webpack_require__(/*! after */ \"./jaas-client/node_modules/after/index.js\");\nvar utf8 = __webpack_require__(/*! ./utf8 */ \"./jaas-client/node_modules/engine.io-parser/lib/utf8.js\");\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = __webpack_require__(/*! base64-arraybuffer */ \"./jaas-client/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js\");\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n    open:     0    // non-ws\n  , close:    1    // non-ws\n  , ping:     2\n  , pong:     3\n  , message:  4\n  , upgrade:  5\n  , noop:     6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = __webpack_require__(/*! blob */ \"./jaas-client/node_modules/blob/index.js\");\n\n/**\n * Encodes a packet.\n *\n *     <packet type id> [ <data> ]\n *\n * Example:\n *\n *     5hello world\n *     3\n *     4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\n    callback = utf8encode;\n    utf8encode = null;\n  }\n\n  var data = (packet.data === undefined)\n    ? undefined\n    : packet.data.buffer || packet.data;\n\n  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n    return encodeBlob(packet, supportsBinary, callback);\n  }\n\n  // might be an object with { base64: true, data: dataAsBase64String }\n  if (data && data.base64) {\n    return encodeBase64Object(packet, callback);\n  }\n\n  // Sending data as a utf-8 string\n  var encoded = packets[packet.type];\n\n  // data fragment is optional\n  if (undefined !== packet.data) {\n    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n  }\n\n  return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n  // packet data is an object { base64: true, data: dataAsBase64String }\n  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n  return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var data = packet.data;\n  var contentArray = new Uint8Array(data);\n  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n  resultBuffer[0] = packets[packet.type];\n  for (var i = 0; i < contentArray.length; i++) {\n    resultBuffer[i+1] = contentArray[i];\n  }\n\n  return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var fr = new FileReader();\n  fr.onload = function() {\n    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n  };\n  return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  if (dontSendBlobs) {\n    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n  }\n\n  var length = new Uint8Array(1);\n  length[0] = packets[packet.type];\n  var blob = new Blob([length.buffer, packet.data]);\n\n  return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n  var message = 'b' + exports.packets[packet.type];\n  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n    var fr = new FileReader();\n    fr.onload = function() {\n      var b64 = fr.result.split(',')[1];\n      callback(message + b64);\n    };\n    return fr.readAsDataURL(packet.data);\n  }\n\n  var b64data;\n  try {\n    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n  } catch (e) {\n    // iPhone Safari doesn't let you apply with typed arrays\n    var typed = new Uint8Array(packet.data);\n    var basic = new Array(typed.length);\n    for (var i = 0; i < typed.length; i++) {\n      basic[i] = typed[i];\n    }\n    b64data = String.fromCharCode.apply(null, basic);\n  }\n  message += btoa(b64data);\n  return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n  if (data === undefined) {\n    return err;\n  }\n  // String data\n  if (typeof data === 'string') {\n    if (data.charAt(0) === 'b') {\n      return exports.decodeBase64Packet(data.substr(1), binaryType);\n    }\n\n    if (utf8decode) {\n      data = tryDecode(data);\n      if (data === false) {\n        return err;\n      }\n    }\n    var type = data.charAt(0);\n\n    if (Number(type) != type || !packetslist[type]) {\n      return err;\n    }\n\n    if (data.length > 1) {\n      return { type: packetslist[type], data: data.substring(1) };\n    } else {\n      return { type: packetslist[type] };\n    }\n  }\n\n  var asArray = new Uint8Array(data);\n  var type = asArray[0];\n  var rest = sliceBuffer(data, 1);\n  if (Blob && binaryType === 'blob') {\n    rest = new Blob([rest]);\n  }\n  return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n  try {\n    data = utf8.decode(data, { strict: false });\n  } catch (e) {\n    return false;\n  }\n  return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n  var type = packetslist[msg.charAt(0)];\n  if (!base64encoder) {\n    return { type: type, data: { base64: true, data: msg.substr(1) } };\n  }\n\n  var data = base64encoder.decode(msg.substr(1));\n\n  if (binaryType === 'blob' && Blob) {\n    data = new Blob([data]);\n  }\n\n  return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n *     <length>:data\n *\n * Example:\n *\n *     11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = null;\n  }\n\n  var isBinary = hasBinary(packets);\n\n  if (supportsBinary && isBinary) {\n    if (Blob && !dontSendBlobs) {\n      return exports.encodePayloadAsBlob(packets, callback);\n    }\n\n    return exports.encodePayloadAsArrayBuffer(packets, callback);\n  }\n\n  if (!packets.length) {\n    return callback('0:');\n  }\n\n  function setLengthHeader(message) {\n    return message.length + ':' + message;\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n      doneCallback(null, setLengthHeader(message));\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(results.join(''));\n  });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n  var result = new Array(ary.length);\n  var next = after(ary.length, done);\n\n  var eachWithIndex = function(i, el, cb) {\n    each(el, function(error, msg) {\n      result[i] = msg;\n      cb(error, result);\n    });\n  };\n\n  for (var i = 0; i < ary.length; i++) {\n    eachWithIndex(i, ary[i], next);\n  }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n  if (typeof data !== 'string') {\n    return exports.decodePayloadAsBinary(data, binaryType, callback);\n  }\n\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var packet;\n  if (data === '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n  var length = '', n, msg;\n\n  for (var i = 0, l = data.length; i < l; i++) {\n    var chr = data.charAt(i);\n\n    if (chr !== ':') {\n      length += chr;\n      continue;\n    }\n\n    if (length === '' || (length != (n = Number(length)))) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    msg = data.substr(i + 1, n);\n\n    if (length != msg.length) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    if (msg.length) {\n      packet = exports.decodePacket(msg, binaryType, false);\n\n      if (err.type === packet.type && err.data === packet.data) {\n        // parser error in individual packet - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      var ret = callback(packet, i + n, l);\n      if (false === ret) return;\n    }\n\n    // advance cursor\n    i += n;\n    length = '';\n  }\n\n  if (length !== '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n  if (!packets.length) {\n    return callback(new ArrayBuffer(0));\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(data) {\n      return doneCallback(null, data);\n    });\n  }\n\n  map(packets, encodeOne, function(err, encodedPackets) {\n    var totalLength = encodedPackets.reduce(function(acc, p) {\n      var len;\n      if (typeof p === 'string'){\n        len = p.length;\n      } else {\n        len = p.byteLength;\n      }\n      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n    }, 0);\n\n    var resultArray = new Uint8Array(totalLength);\n\n    var bufferIndex = 0;\n    encodedPackets.forEach(function(p) {\n      var isString = typeof p === 'string';\n      var ab = p;\n      if (isString) {\n        var view = new Uint8Array(p.length);\n        for (var i = 0; i < p.length; i++) {\n          view[i] = p.charCodeAt(i);\n        }\n        ab = view.buffer;\n      }\n\n      if (isString) { // not true binary\n        resultArray[bufferIndex++] = 0;\n      } else { // true binary\n        resultArray[bufferIndex++] = 1;\n      }\n\n      var lenStr = ab.byteLength.toString();\n      for (var i = 0; i < lenStr.length; i++) {\n        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n      }\n      resultArray[bufferIndex++] = 255;\n\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < view.length; i++) {\n        resultArray[bufferIndex++] = view[i];\n      }\n    });\n\n    return callback(resultArray.buffer);\n  });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(encoded) {\n      var binaryIdentifier = new Uint8Array(1);\n      binaryIdentifier[0] = 1;\n      if (typeof encoded === 'string') {\n        var view = new Uint8Array(encoded.length);\n        for (var i = 0; i < encoded.length; i++) {\n          view[i] = encoded.charCodeAt(i);\n        }\n        encoded = view.buffer;\n        binaryIdentifier[0] = 0;\n      }\n\n      var len = (encoded instanceof ArrayBuffer)\n        ? encoded.byteLength\n        : encoded.size;\n\n      var lenStr = len.toString();\n      var lengthAry = new Uint8Array(lenStr.length + 1);\n      for (var i = 0; i < lenStr.length; i++) {\n        lengthAry[i] = parseInt(lenStr[i]);\n      }\n      lengthAry[lenStr.length] = 255;\n\n      if (Blob) {\n        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n        doneCallback(null, blob);\n      }\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(new Blob(results));\n  });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var bufferTail = data;\n  var buffers = [];\n\n  while (bufferTail.byteLength > 0) {\n    var tailArray = new Uint8Array(bufferTail);\n    var isString = tailArray[0] === 0;\n    var msgLength = '';\n\n    for (var i = 1; ; i++) {\n      if (tailArray[i] === 255) break;\n\n      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\n\n    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n    msgLength = parseInt(msgLength);\n\n    var msg = sliceBuffer(bufferTail, 0, msgLength);\n    if (isString) {\n      try {\n        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n      } catch (e) {\n        // iPhone Safari doesn't let you apply to typed arrays\n        var typed = new Uint8Array(msg);\n        msg = '';\n        for (var i = 0; i < typed.length; i++) {\n          msg += String.fromCharCode(typed[i]);\n        }\n      }\n    }\n\n    buffers.push(msg);\n    bufferTail = sliceBuffer(bufferTail, msgLength);\n  }\n\n  var total = buffers.length;\n  buffers.forEach(function(buffer, i) {\n    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n  });\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-parser/lib/browser.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-parser/lib/keys.js":
+/*!***************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-parser/lib/keys.js ***!
+  \***************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n  var arr = [];\n  var has = Object.prototype.hasOwnProperty;\n\n  for (var i in obj) {\n    if (has.call(obj, i)) {\n      arr.push(i);\n    }\n  }\n  return arr;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-parser/lib/keys.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/engine.io-parser/lib/utf8.js":
+/*!***************************************************************!*\
+  !*** ./jaas-client/node_modules/engine.io-parser/lib/utf8.js ***!
+  \***************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/engine.io-parser/lib/utf8.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/has-binary2/index.js":
+/*!*******************************************************!*\
+  !*** ./jaas-client/node_modules/has-binary2/index.js ***!
+  \*******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/* WEBPACK VAR INJECTION */(function(Buffer) {/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = __webpack_require__(/*! isarray */ \"./jaas-client/node_modules/has-binary2/node_modules/isarray/index.js\");\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\n  }\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/has-binary2/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/has-binary2/node_modules/isarray/index.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/has-binary2/node_modules/isarray/index.js ***!
+  \****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/has-binary2/node_modules/isarray/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/has-cors/index.js":
+/*!****************************************************!*\
+  !*** ./jaas-client/node_modules/has-cors/index.js ***!
+  \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n    'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n  // if XMLHttp support is disabled in IE then it will throw\n  // when trying to create\n  module.exports = false;\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/has-cors/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/history/esm/history.js":
+/*!*********************************************************!*\
+  !*** ./jaas-client/node_modules/history/esm/history.js ***!
+  \*********************************************************/
+/*! exports provided: createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createBrowserHistory\", function() { return createBrowserHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createHashHistory\", function() { return createHashHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createMemoryHistory\", function() { return createMemoryHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createLocation\", function() { return createLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"locationsAreEqual\", function() { return locationsAreEqual; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parsePath\", function() { return parsePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createPath\", function() { return createPath; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var resolve_pathname__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! resolve-pathname */ \"./jaas-client/node_modules/resolve-pathname/esm/resolve-pathname.js\");\n/* harmony import */ var value_equal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! value-equal */ \"./jaas-client/node_modules/value-equal/esm/value-equal.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-invariant */ \"./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n\n\n\n\n\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n  return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n  var hashIndex = pathname.indexOf('#');\n\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n}\nfunction createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n  var path = pathname || '/';\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n  return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n  var location;\n\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = parsePath(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, path);\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = Object(resolve_pathname__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n}\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && Object(value_equal__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n  var prompt = null;\n\n  function setPrompt(nextPrompt) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(prompt == null, 'A history supports only one prompt at a time') : undefined;\n    prompt = nextPrompt;\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  }\n\n  function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n           true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : undefined;\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  }\n\n  var listeners = [];\n\n  function appendListener(fn) {\n    var isActive = true;\n\n    function listener() {\n      if (isActive) fn.apply(void 0, arguments);\n    }\n\n    listeners.push(listener);\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function notifyListeners() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(void 0, args);\n    });\n  }\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n  callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = window.navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n  return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false, 'Browser history needs a DOM') : undefined : void 0;\n  var globalHistory = window.history;\n  var canUseHistory = supportsHistory();\n  var needsHashChangeListener = !supportsPopStateOnHashChange();\n  var _props = props,\n      _props$forceRefresh = _props.forceRefresh,\n      forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n  function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n    var path = pathname + search + hash;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : undefined;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path, state, key);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if (isExtraneousPopstateEvent(event)) return;\n    handlePop(getDOMLocation(event.state));\n  }\n\n  function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  }\n\n  var forceNextPop = false;\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  }\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key]; // Public interface\n\n  function createHref(location) {\n    return basename + createPath(location);\n  }\n\n  function push(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.pushState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex + 1);\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n         true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : undefined;\n        window.location.href = href;\n      }\n    });\n  }\n\n  function replace(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.replaceState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n         true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : undefined;\n        window.location.replace(href);\n      }\n    });\n  }\n\n  function go(n) {\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n  hashbang: {\n    encodePath: function encodePath(path) {\n      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n    },\n    decodePath: function decodePath(path) {\n      return path.charAt(0) === '!' ? path.substr(1) : path;\n    }\n  },\n  noslash: {\n    encodePath: stripLeadingSlash,\n    decodePath: addLeadingSlash\n  },\n  slash: {\n    encodePath: addLeadingSlash,\n    decodePath: addLeadingSlash\n  }\n};\n\nfunction stripHash(url) {\n  var hashIndex = url.indexOf('#');\n  return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var hashIndex = href.indexOf('#');\n  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n  window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false, 'Hash history needs a DOM') : undefined : void 0;\n  var globalHistory = window.history;\n  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n  var _props = props,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$hashType = _props.hashType,\n      hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var _HashPathCoders$hashT = HashPathCoders[hashType],\n      encodePath = _HashPathCoders$hashT.encodePath,\n      decodePath = _HashPathCoders$hashT.decodePath;\n\n  function getDOMLocation() {\n    var path = decodePath(getHashPath());\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : undefined;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  var forceNextPop = false;\n  var ignorePath = null;\n\n  function locationsAreEqual$$1(a, b) {\n    return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n  }\n\n  function handleHashChange() {\n    var path = getHashPath();\n    var encodedPath = encodePath(path);\n\n    if (path !== encodedPath) {\n      // Ensure we always have a properly-encoded hash.\n      replaceHashPath(encodedPath);\n    } else {\n      var location = getDOMLocation();\n      var prevLocation = history.location;\n      if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n      ignorePath = null;\n      handlePop(location);\n    }\n  }\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of paths we've seen in sessionStorage.\n    // Instead, we just default to 0 for paths we don't know.\n\n    var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  } // Ensure the hash is encoded properly before doing anything else.\n\n\n  var path = getHashPath();\n  var encodedPath = encodePath(path);\n  if (path !== encodedPath) replaceHashPath(encodedPath);\n  var initialLocation = getDOMLocation();\n  var allPaths = [createPath(initialLocation)]; // Public interface\n\n  function createHref(location) {\n    var baseTag = document.querySelector('base');\n    var href = '';\n\n    if (baseTag && baseTag.getAttribute('href')) {\n      href = stripHash(window.location.href);\n    }\n\n    return href + '#' + encodePath(basename + createPath(location));\n  }\n\n  function push(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Hash history cannot push state; it is ignored') : undefined;\n    var action = 'PUSH';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a PUSH, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        pushHashPath(encodedPath);\n        var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n        var nextPaths = allPaths.slice(0, prevIndex + 1);\n        nextPaths.push(path);\n        allPaths = nextPaths;\n        setState({\n          action: action,\n          location: location\n        });\n      } else {\n         true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : undefined;\n        setState();\n      }\n    });\n  }\n\n  function replace(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Hash history cannot replace state; it is ignored') : undefined;\n    var action = 'REPLACE';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        replaceHashPath(encodedPath);\n      }\n\n      var prevIndex = allPaths.indexOf(createPath(history.location));\n      if (prevIndex !== -1) allPaths[prevIndex] = path;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : undefined;\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(HashChangeEvent$1, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(HashChangeEvent$1, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  var _props = props,\n      getUserConfirmation = _props.getUserConfirmation,\n      _props$initialEntries = _props.initialEntries,\n      initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n      _props$initialIndex = _props.initialIndex,\n      initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n    history.length = history.entries.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var index = clamp(initialIndex, 0, initialEntries.length - 1);\n  var entries = initialEntries.map(function (entry) {\n    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n  }); // Public interface\n\n  var createHref = createPath;\n\n  function push(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var prevIndex = history.index;\n      var nextIndex = prevIndex + 1;\n      var nextEntries = history.entries.slice(0);\n\n      if (nextEntries.length > nextIndex) {\n        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n      } else {\n        nextEntries.push(location);\n      }\n\n      setState({\n        action: action,\n        location: location,\n        index: nextIndex,\n        entries: nextEntries\n      });\n    });\n  }\n\n  function replace(path, state) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      history.entries[history.index] = location;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n    var action = 'POP';\n    var location = history.entries[nextIndex];\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (ok) {\n        setState({\n          action: action,\n          location: location,\n          index: nextIndex\n        });\n      } else {\n        // Mimic the behavior of DOM histories by\n        // causing a render after a cancelled POP.\n        setState();\n      }\n    });\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function canGo(n) {\n    var nextIndex = history.index + n;\n    return nextIndex >= 0 && nextIndex < history.entries.length;\n  }\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    return transitionManager.setPrompt(prompt);\n  }\n\n  function listen(listener) {\n    return transitionManager.appendListener(listener);\n  }\n\n  var history = {\n    length: entries.length,\n    action: 'POP',\n    location: entries[index],\n    index: index,\n    entries: entries,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    canGo: canGo,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/history/esm/history.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js":
+/*!**********************************************************************************************!*\
+  !*** ./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js ***!
+  \**********************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nvar reactIs = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/hyphenate-style-name/index.js":
+/*!****************************************************************!*\
+  !*** ./jaas-client/node_modules/hyphenate-style-name/index.js ***!
+  \****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hyphenateStyleName);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/hyphenate-style-name/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/indexof/index.js":
+/*!***************************************************!*\
+  !*** ./jaas-client/node_modules/indexof/index.js ***!
+  \***************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n\n//# sourceURL=webpack:///./jaas-client/node_modules/indexof/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/is-in-browser/dist/module.js":
+/*!***************************************************************!*\
+  !*** ./jaas-client/node_modules/is-in-browser/dist/module.js ***!
+  \***************************************************************/
+/*! exports provided: isBrowser, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isBrowser\", function() { return isBrowser; });\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar isBrowser = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' && document.nodeType === 9;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isBrowser);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/is-in-browser/dist/module.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/isarray/index.js":
+/*!***************************************************!*\
+  !*** ./jaas-client/node_modules/isarray/index.js ***!
+  \***************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/isarray/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js":
+/*!******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js ***!
+  \******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var hyphenate_style_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! hyphenate-style-name */ \"./jaas-client/node_modules/hyphenate-style-name/index.js\");\n\n\n/**\n * Convert camel cased property names to dash separated.\n *\n * @param {Object} style\n * @return {Object}\n */\n\nfunction convertCase(style) {\n  var converted = {};\n\n  for (var prop in style) {\n    var key = prop.indexOf('--') === 0 ? prop : Object(hyphenate_style_name__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(prop);\n    converted[key] = style[prop];\n  }\n\n  if (style.fallbacks) {\n    if (Array.isArray(style.fallbacks)) converted.fallbacks = style.fallbacks.map(convertCase);else converted.fallbacks = convertCase(style.fallbacks);\n  }\n\n  return converted;\n}\n/**\n * Allow camel cased property names by converting them back to dasherized.\n *\n * @param {Rule} rule\n */\n\n\nfunction camelCase() {\n  function onProcessStyle(style) {\n    if (Array.isArray(style)) {\n      // Handle rules like @font-face, which can have multiple styles in an array\n      for (var index = 0; index < style.length; index++) {\n        style[index] = convertCase(style[index]);\n      }\n\n      return style;\n    }\n\n    return convertCase(style);\n  }\n\n  function onChangeValue(value, prop, rule) {\n    if (prop.indexOf('--') === 0) {\n      return value;\n    }\n\n    var hyphenatedProp = Object(hyphenate_style_name__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(prop); // There was no camel case in place\n\n    if (prop === hyphenatedProp) return value;\n    rule.prop(hyphenatedProp, value); // Core will ignore that property value we set the proper one above.\n\n    return null;\n  }\n\n  return {\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (camelCase);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js":
+/*!**********************************************************************************************!*\
+  !*** ./jaas-client/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js ***!
+  \**********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n\n\nvar px = jss__WEBPACK_IMPORTED_MODULE_0__[\"hasCSSTOMSupport\"] && CSS ? CSS.px : 'px';\nvar ms = jss__WEBPACK_IMPORTED_MODULE_0__[\"hasCSSTOMSupport\"] && CSS ? CSS.ms : 'ms';\nvar percent = jss__WEBPACK_IMPORTED_MODULE_0__[\"hasCSSTOMSupport\"] && CSS ? CSS.percent : '%';\n/**\n * Generated jss-plugin-default-unit CSS property units\n *\n * @type object\n */\n\nvar defaultUnits = {\n  // Animation properties\n  'animation-delay': ms,\n  'animation-duration': ms,\n  // Background properties\n  'background-position': px,\n  'background-position-x': px,\n  'background-position-y': px,\n  'background-size': px,\n  // Border Properties\n  border: px,\n  'border-bottom': px,\n  'border-bottom-left-radius': px,\n  'border-bottom-right-radius': px,\n  'border-bottom-width': px,\n  'border-left': px,\n  'border-left-width': px,\n  'border-radius': px,\n  'border-right': px,\n  'border-right-width': px,\n  'border-top': px,\n  'border-top-left-radius': px,\n  'border-top-right-radius': px,\n  'border-top-width': px,\n  'border-width': px,\n  // Margin properties\n  margin: px,\n  'margin-bottom': px,\n  'margin-left': px,\n  'margin-right': px,\n  'margin-top': px,\n  // Padding properties\n  padding: px,\n  'padding-bottom': px,\n  'padding-left': px,\n  'padding-right': px,\n  'padding-top': px,\n  // Mask properties\n  'mask-position-x': px,\n  'mask-position-y': px,\n  'mask-size': px,\n  // Width and height properties\n  height: px,\n  width: px,\n  'min-height': px,\n  'max-height': px,\n  'min-width': px,\n  'max-width': px,\n  // Position properties\n  bottom: px,\n  left: px,\n  top: px,\n  right: px,\n  // Shadow properties\n  'box-shadow': px,\n  'text-shadow': px,\n  // Column properties\n  'column-gap': px,\n  'column-rule': px,\n  'column-rule-width': px,\n  'column-width': px,\n  // Font and text properties\n  'font-size': px,\n  'font-size-delta': px,\n  'letter-spacing': px,\n  'text-indent': px,\n  'text-stroke': px,\n  'text-stroke-width': px,\n  'word-spacing': px,\n  // Motion properties\n  motion: px,\n  'motion-offset': px,\n  // Outline properties\n  outline: px,\n  'outline-offset': px,\n  'outline-width': px,\n  // Perspective properties\n  perspective: px,\n  'perspective-origin-x': percent,\n  'perspective-origin-y': percent,\n  // Transform properties\n  'transform-origin': percent,\n  'transform-origin-x': percent,\n  'transform-origin-y': percent,\n  'transform-origin-z': percent,\n  // Transition properties\n  'transition-delay': ms,\n  'transition-duration': ms,\n  // Alignment properties\n  'vertical-align': px,\n  'flex-basis': px,\n  // Some random properties\n  'shape-margin': px,\n  size: px,\n  // Grid properties\n  grid: px,\n  'grid-gap': px,\n  'grid-row-gap': px,\n  'grid-column-gap': px,\n  'grid-template-rows': px,\n  'grid-template-columns': px,\n  'grid-auto-rows': px,\n  'grid-auto-columns': px,\n  // Not existing properties.\n  // Used to avoid issues with jss-plugin-expand integration.\n  'box-shadow-x': px,\n  'box-shadow-y': px,\n  'box-shadow-blur': px,\n  'box-shadow-spread': px,\n  'font-line-height': px,\n  'text-shadow-x': px,\n  'text-shadow-y': px,\n  'text-shadow-blur': px\n};\n\n/**\n * Clones the object and adds a camel cased property version.\n */\nfunction addCamelCasedVersion(obj) {\n  var regExp = /(-[a-z])/g;\n\n  var replace = function replace(str) {\n    return str[1].toUpperCase();\n  };\n\n  var newObj = {};\n\n  for (var _key in obj) {\n    newObj[_key] = obj[_key];\n    newObj[_key.replace(regExp, replace)] = obj[_key];\n  }\n\n  return newObj;\n}\n\nvar units = addCamelCasedVersion(defaultUnits);\n/**\n * Recursive deep style passing function\n */\n\nfunction iterate(prop, value, options) {\n  if (!value) return value;\n\n  if (Array.isArray(value)) {\n    for (var i = 0; i < value.length; i++) {\n      value[i] = iterate(prop, value[i], options);\n    }\n  } else if (typeof value === 'object') {\n    if (prop === 'fallbacks') {\n      for (var innerProp in value) {\n        value[innerProp] = iterate(innerProp, value[innerProp], options);\n      }\n    } else {\n      for (var _innerProp in value) {\n        value[_innerProp] = iterate(prop + \"-\" + _innerProp, value[_innerProp], options);\n      }\n    }\n  } else if (typeof value === 'number') {\n    var unit = options[prop] || units[prop];\n\n    if (unit) {\n      return typeof unit === 'function' ? unit(value).toString() : \"\" + value + unit;\n    }\n\n    return value.toString();\n  }\n\n  return value;\n}\n/**\n * Add unit to numeric values.\n */\n\n\nfunction defaultUnit(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var camelCasedOptions = addCamelCasedVersion(options);\n\n  function onProcessStyle(style, rule) {\n    if (rule.type !== 'style') return style;\n\n    for (var prop in style) {\n      style[prop] = iterate(prop, style[prop], camelCasedOptions);\n    }\n\n    return style;\n  }\n\n  function onChangeValue(value, prop) {\n    return iterate(prop, value, camelCasedOptions);\n  }\n\n  return {\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (defaultUnit);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n\n\n\nvar at = '@global';\nvar atPrefix = '@global ';\n\nvar GlobalContainerRule =\n/*#__PURE__*/\nfunction () {\n  function GlobalContainerRule(key, styles, options) {\n    this.type = 'global';\n    this.at = at;\n    this.rules = void 0;\n    this.options = void 0;\n    this.key = void 0;\n    this.isProcessed = false;\n    this.key = key;\n    this.options = options;\n    this.rules = new jss__WEBPACK_IMPORTED_MODULE_1__[\"RuleList\"](Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      parent: this\n    }));\n\n    for (var selector in styles) {\n      this.rules.add(selector, styles[selector]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Get a rule.\n   */\n\n\n  var _proto = GlobalContainerRule.prototype;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Create and register rule, run plugins.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, style, options) {\n    var rule = this.rules.add(name, style, options);\n    this.options.jss.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString() {\n    return this.rules.toString();\n  };\n\n  return GlobalContainerRule;\n}();\n\nvar GlobalPrefixedRule =\n/*#__PURE__*/\nfunction () {\n  function GlobalPrefixedRule(key, style, options) {\n    this.type = 'global';\n    this.at = at;\n    this.options = void 0;\n    this.rule = void 0;\n    this.isProcessed = false;\n    this.key = void 0;\n    this.key = key;\n    this.options = options;\n    var selector = key.substr(atPrefix.length);\n    this.rule = options.jss.createRule(selector, style, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      parent: this\n    }));\n  }\n\n  var _proto2 = GlobalPrefixedRule.prototype;\n\n  _proto2.toString = function toString(options) {\n    return this.rule ? this.rule.toString(options) : '';\n  };\n\n  return GlobalPrefixedRule;\n}();\n\nvar separatorRegExp = /\\s*,\\s*/g;\n\nfunction addScope(selector, scope) {\n  var parts = selector.split(separatorRegExp);\n  var scoped = '';\n\n  for (var i = 0; i < parts.length; i++) {\n    scoped += scope + \" \" + parts[i].trim();\n    if (parts[i + 1]) scoped += ', ';\n  }\n\n  return scoped;\n}\n\nfunction handleNestedGlobalContainerRule(rule) {\n  var options = rule.options,\n      style = rule.style;\n  var rules = style ? style[at] : null;\n  if (!rules) return;\n\n  for (var name in rules) {\n    options.sheet.addRule(name, rules[name], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      selector: addScope(name, rule.selector)\n    }));\n  }\n\n  delete style[at];\n}\n\nfunction handlePrefixedGlobalRule(rule) {\n  var options = rule.options,\n      style = rule.style;\n\n  for (var prop in style) {\n    if (prop[0] !== '@' || prop.substr(0, at.length) !== at) continue;\n    var selector = addScope(prop.substr(at.length), rule.selector);\n    options.sheet.addRule(selector, style[prop], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      selector: selector\n    }));\n    delete style[prop];\n  }\n}\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\n\n\nfunction jssGlobal() {\n  function onCreateRule(name, styles, options) {\n    if (!name) return null;\n\n    if (name === at) {\n      return new GlobalContainerRule(name, styles, options);\n    }\n\n    if (name[0] === '@' && name.substr(0, atPrefix.length) === atPrefix) {\n      return new GlobalPrefixedRule(name, styles, options);\n    }\n\n    var parent = options.parent;\n\n    if (parent) {\n      if (parent.type === 'global' || parent.options.parent && parent.options.parent.type === 'global') {\n        options.scoped = false;\n      }\n    }\n\n    if (options.scoped === false) {\n      options.selector = name;\n    }\n\n    return null;\n  }\n\n  function onProcessRule(rule) {\n    if (rule.type !== 'style') return;\n    handleNestedGlobalContainerRule(rule);\n    handlePrefixedGlobalRule(rule);\n  }\n\n  return {\n    onCreateRule: onCreateRule,\n    onProcessRule: onProcessRule\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (jssGlobal);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n\n\n\nvar separatorRegExp = /\\s*,\\s*/g;\nvar parentRegExp = /&/g;\nvar refRegExp = /\\$([\\w-]+)/g;\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\n\nfunction jssNested() {\n  // Get a function to be used for $ref replacement.\n  function getReplaceRef(container, sheet) {\n    return function (match, key) {\n      var rule = container.getRule(key) || sheet && sheet.getRule(key);\n\n      if (rule) {\n        rule = rule;\n        return rule.selector;\n      }\n\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(false, \"[JSS] Could not find the referenced rule \\\"\" + key + \"\\\" in \\\"\" + (container.options.meta || container.toString()) + \"\\\".\") : undefined;\n      return key;\n    };\n  }\n\n  function replaceParentRefs(nestedProp, parentProp) {\n    var parentSelectors = parentProp.split(separatorRegExp);\n    var nestedSelectors = nestedProp.split(separatorRegExp);\n    var result = '';\n\n    for (var i = 0; i < parentSelectors.length; i++) {\n      var parent = parentSelectors[i];\n\n      for (var j = 0; j < nestedSelectors.length; j++) {\n        var nested = nestedSelectors[j];\n        if (result) result += ', '; // Replace all & by the parent or prefix & with the parent.\n\n        result += nested.indexOf('&') !== -1 ? nested.replace(parentRegExp, parent) : parent + \" \" + nested;\n      }\n    }\n\n    return result;\n  }\n\n  function getOptions(rule, container, prevOptions) {\n    // Options has been already created, now we only increase index.\n    if (prevOptions) return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, prevOptions, {\n      index: prevOptions.index + 1\n    });\n    var nestingLevel = rule.options.nestingLevel;\n    nestingLevel = nestingLevel === undefined ? 1 : nestingLevel + 1;\n\n    var options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, rule.options, {\n      nestingLevel: nestingLevel,\n      index: container.indexOf(rule) + 1 // We don't need the parent name to be set options for chlid.\n\n    });\n\n    delete options.name;\n    return options;\n  }\n\n  function onProcessStyle(style, rule, sheet) {\n    if (rule.type !== 'style') return style;\n    var styleRule = rule;\n    var container = styleRule.options.parent;\n    var options;\n    var replaceRef;\n\n    for (var prop in style) {\n      var isNested = prop.indexOf('&') !== -1;\n      var isNestedConditional = prop[0] === '@';\n      if (!isNested && !isNestedConditional) continue;\n      options = getOptions(styleRule, container, options);\n\n      if (isNested) {\n        var selector = replaceParentRefs(prop, styleRule.selector); // Lazily create the ref replacer function just once for\n        // all nested rules within the sheet.\n\n        if (!replaceRef) replaceRef = getReplaceRef(container, sheet); // Replace all $refs.\n\n        selector = selector.replace(refRegExp, replaceRef);\n        container.addRule(selector, style[prop], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n          selector: selector\n        }));\n      } else if (isNestedConditional) {\n        // Place conditional right after the parent rule to ensure right ordering.\n        container.addRule(prop, {}, options) // Flow expects more options but they aren't required\n        // And flow doesn't know this will always be a StyleRule which has the addRule method\n        // $FlowFixMe\n        .addRule(styleRule.key, style[prop], {\n          selector: styleRule.selector\n        });\n      }\n\n      delete style[prop];\n    }\n\n    return style;\n  }\n\n  return {\n    onProcessStyle: onProcessStyle\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (jssNested);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js":
+/*!******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js ***!
+  \******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Sort props by length.\n */\nfunction jssPropsSort() {\n  var sort = function sort(prop0, prop1) {\n    if (prop0.length === prop1.length) {\n      return prop0 > prop1 ? 1 : -1;\n    }\n\n    return prop0.length - prop1.length;\n  };\n\n  return {\n    onProcessStyle: function onProcessStyle(style, rule) {\n      if (rule.type !== 'style') return style;\n      var newStyle = {};\n      var props = Object.keys(style).sort(sort);\n\n      for (var i = 0; i < props.length; i++) {\n        newStyle[props[i]] = style[props[i]];\n      }\n\n      return newStyle;\n    }\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (jssPropsSort);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js":
+/*!************************************************************************************************************!*\
+  !*** ./jaas-client/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js ***!
+  \************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n\n\n\nvar now = Date.now();\nvar fnValuesNs = \"fnValues\" + now;\nvar fnRuleNs = \"fnStyle\" + ++now;\nfunction functionPlugin() {\n  return {\n    onCreateRule: function onCreateRule(name, decl, options) {\n      if (typeof decl !== 'function') return null;\n      var rule = Object(jss__WEBPACK_IMPORTED_MODULE_1__[\"createRule\"])(name, {}, options);\n      rule[fnRuleNs] = decl;\n      return rule;\n    },\n    onProcessStyle: function onProcessStyle(style, rule) {\n      // We need to extract function values from the declaration, so that we can keep core unaware of them.\n      // We need to do that only once.\n      // We don't need to extract functions on each style update, since this can happen only once.\n      // We don't support function values inside of function rules.\n      if (fnValuesNs in rule || fnRuleNs in rule) return style;\n      var fnValues = {};\n\n      for (var prop in style) {\n        var value = style[prop];\n        if (typeof value !== 'function') continue;\n        delete style[prop];\n        fnValues[prop] = value;\n      } // $FlowFixMe\n\n\n      rule[fnValuesNs] = fnValues;\n      return style;\n    },\n    onUpdate: function onUpdate(data, rule, sheet, options) {\n      var styleRule = rule;\n      var fnRule = styleRule[fnRuleNs]; // If we have a style function, the entire rule is dynamic and style object\n      // will be returned from that function.\n\n      if (fnRule) {\n        // Empty object will remove all currently defined props\n        // in case function rule returns a falsy value.\n        styleRule.style = fnRule(data) || {};\n\n        if (true) {\n          for (var prop in styleRule.style) {\n            if (typeof styleRule.style[prop] === 'function') {\n               true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(false, '[JSS] Function values inside function rules are not supported.') : undefined;\n              break;\n            }\n          }\n        }\n      }\n\n      var fnValues = styleRule[fnValuesNs]; // If we have a fn values map, it is a rule with function values.\n\n      if (fnValues) {\n        for (var _prop in fnValues) {\n          styleRule.prop(_prop, fnValues[_prop](data), options);\n        }\n      }\n    }\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (functionPlugin);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js":
+/*!****************************************************************************************************!*\
+  !*** ./jaas-client/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js ***!
+  \****************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var css_vendor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! css-vendor */ \"./jaas-client/node_modules/css-vendor/dist/css-vendor.esm.js\");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss */ \"./jaas-client/node_modules/jss/dist/jss.esm.js\");\n\n\n\n/**\n * Add vendor prefix to a property name when needed.\n *\n * @api public\n */\n\nfunction jssVendorPrefixer() {\n  function onProcessRule(rule) {\n    if (rule.type === 'keyframes') {\n      var atRule = rule;\n      atRule.at = Object(css_vendor__WEBPACK_IMPORTED_MODULE_0__[\"supportedKeyframes\"])(atRule.at);\n    }\n  }\n\n  function prefixStyle(style) {\n    for (var prop in style) {\n      var value = style[prop];\n\n      if (prop === 'fallbacks' && Array.isArray(value)) {\n        style[prop] = value.map(prefixStyle);\n        continue;\n      }\n\n      var changeProp = false;\n      var supportedProp = Object(css_vendor__WEBPACK_IMPORTED_MODULE_0__[\"supportedProperty\"])(prop);\n      if (supportedProp && supportedProp !== prop) changeProp = true;\n      var changeValue = false;\n      var supportedValue$1 = Object(css_vendor__WEBPACK_IMPORTED_MODULE_0__[\"supportedValue\"])(supportedProp, Object(jss__WEBPACK_IMPORTED_MODULE_1__[\"toCssValue\"])(value));\n      if (supportedValue$1 && supportedValue$1 !== value) changeValue = true;\n\n      if (changeProp || changeValue) {\n        if (changeProp) delete style[prop];\n        style[supportedProp || prop] = supportedValue$1 || value;\n      }\n    }\n\n    return style;\n  }\n\n  function onProcessStyle(style, rule) {\n    if (rule.type !== 'style') return style;\n    return prefixStyle(style);\n  }\n\n  function onChangeValue(value, prop) {\n    return Object(css_vendor__WEBPACK_IMPORTED_MODULE_0__[\"supportedValue\"])(prop, Object(jss__WEBPACK_IMPORTED_MODULE_1__[\"toCssValue\"])(value)) || value;\n  }\n\n  return {\n    onProcessRule: onProcessRule,\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (jssVendorPrefixer);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/jss/dist/jss.esm.js":
+/*!******************************************************!*\
+  !*** ./jaas-client/node_modules/jss/dist/jss.esm.js ***!
+  \******************************************************/
+/*! exports provided: default, RuleList, SheetsManager, SheetsRegistry, create, createGenerateId, createRule, getDynamicStyles, hasCSSTOMSupport, sheets, toCssValue */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RuleList\", function() { return RuleList; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SheetsManager\", function() { return SheetsManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SheetsRegistry\", function() { return SheetsRegistry; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"create\", function() { return create; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createGenerateId\", function() { return createGenerateId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createRule\", function() { return createRule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getDynamicStyles\", function() { return getDynamicStyles; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hasCSSTOMSupport\", function() { return hasCSSTOMSupport; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sheets\", function() { return sheets; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"toCssValue\", function() { return toCssValue; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var is_in_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! is-in-browser */ \"./jaas-client/node_modules/is-in-browser/dist/module.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n\n\n\n\n\n\n\n\nvar plainObjectConstrurctor = {}.constructor;\nfunction cloneStyle(style) {\n  if (style == null || typeof style !== 'object') return style;\n  if (Array.isArray(style)) return style.map(cloneStyle);\n  if (style.constructor !== plainObjectConstrurctor) return style;\n  var newStyle = {};\n\n  for (var name in style) {\n    newStyle[name] = cloneStyle(style[name]);\n  }\n\n  return newStyle;\n}\n\n/**\n * Create a rule instance.\n */\n\nfunction createRule(name, decl, options) {\n  if (name === void 0) {\n    name = 'unnamed';\n  }\n\n  var jss = options.jss;\n  var declCopy = cloneStyle(decl);\n  var rule = jss.plugins.onCreateRule(name, declCopy, options);\n  if (rule) return rule; // It is an at-rule and it has no instance.\n\n  if (name[0] === '@') {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Unknown rule \" + name) : undefined;\n  }\n\n  return null;\n}\n\nvar join = function join(value, by) {\n  var result = '';\n\n  for (var i = 0; i < value.length; i++) {\n    // Remove !important from the value, it will be readded later.\n    if (value[i] === '!important') break;\n    if (result) result += by;\n    result += value[i];\n  }\n\n  return result;\n};\n/**\n * Converts array values to string.\n *\n * `margin: [['5px', '10px']]` > `margin: 5px 10px;`\n * `border: ['1px', '2px']` > `border: 1px, 2px;`\n * `margin: [['5px', '10px'], '!important']` > `margin: 5px 10px !important;`\n * `color: ['red', !important]` > `color: red !important;`\n */\n\n\nfunction toCssValue(value, ignoreImportant) {\n  if (ignoreImportant === void 0) {\n    ignoreImportant = false;\n  }\n\n  if (!Array.isArray(value)) return value;\n  var cssValue = ''; // Support space separated values via `[['5px', '10px']]`.\n\n  if (Array.isArray(value[0])) {\n    for (var i = 0; i < value.length; i++) {\n      if (value[i] === '!important') break;\n      if (cssValue) cssValue += ', ';\n      cssValue += join(value[i], ' ');\n    }\n  } else cssValue = join(value, ', '); // Add !important, because it was ignored.\n\n\n  if (!ignoreImportant && value[value.length - 1] === '!important') {\n    cssValue += ' !important';\n  }\n\n  return cssValue;\n}\n\n/**\n * Indent a string.\n * http://jsperf.com/array-join-vs-for\n */\nfunction indentStr(str, indent) {\n  var result = '';\n\n  for (var index = 0; index < indent; index++) {\n    result += '  ';\n  }\n\n  return result + str;\n}\n/**\n * Converts a Rule to CSS string.\n */\n\n\nfunction toCss(selector, style, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var result = '';\n  if (!style) return result;\n  var _options = options,\n      _options$indent = _options.indent,\n      indent = _options$indent === void 0 ? 0 : _options$indent;\n  var fallbacks = style.fallbacks;\n  if (selector) indent++; // Apply fallbacks first.\n\n  if (fallbacks) {\n    // Array syntax {fallbacks: [{prop: value}]}\n    if (Array.isArray(fallbacks)) {\n      for (var index = 0; index < fallbacks.length; index++) {\n        var fallback = fallbacks[index];\n\n        for (var prop in fallback) {\n          var value = fallback[prop];\n\n          if (value != null) {\n            if (result) result += '\\n';\n            result += \"\" + indentStr(prop + \": \" + toCssValue(value) + \";\", indent);\n          }\n        }\n      }\n    } else {\n      // Object syntax {fallbacks: {prop: value}}\n      for (var _prop in fallbacks) {\n        var _value = fallbacks[_prop];\n\n        if (_value != null) {\n          if (result) result += '\\n';\n          result += \"\" + indentStr(_prop + \": \" + toCssValue(_value) + \";\", indent);\n        }\n      }\n    }\n  }\n\n  for (var _prop2 in style) {\n    var _value2 = style[_prop2];\n\n    if (_value2 != null && _prop2 !== 'fallbacks') {\n      if (result) result += '\\n';\n      result += \"\" + indentStr(_prop2 + \": \" + toCssValue(_value2) + \";\", indent);\n    }\n  } // Allow empty style in this case, because properties will be added dynamically.\n\n\n  if (!result && !options.allowEmpty) return result; // When rule is being stringified before selector was defined.\n\n  if (!selector) return result;\n  indent--;\n  if (result) result = \"\\n\" + result + \"\\n\";\n  return indentStr(selector + \" {\" + result, indent) + indentStr('}', indent);\n}\n\nvar escapeRegex = /([[\\].#*$><+~=|^:(),\"'`\\s])/g;\nvar nativeEscape = typeof CSS !== 'undefined' && CSS.escape;\nvar escape = (function (str) {\n  return nativeEscape ? nativeEscape(str) : str.replace(escapeRegex, '\\\\$1');\n});\n\nvar BaseStyleRule =\n/*#__PURE__*/\nfunction () {\n  function BaseStyleRule(key, style, options) {\n    this.type = 'style';\n    this.key = void 0;\n    this.isProcessed = false;\n    this.style = void 0;\n    this.renderer = void 0;\n    this.renderable = void 0;\n    this.options = void 0;\n    var sheet = options.sheet,\n        Renderer = options.Renderer;\n    this.key = key;\n    this.options = options;\n    this.style = style;\n    if (sheet) this.renderer = sheet.renderer;else if (Renderer) this.renderer = new Renderer();\n  }\n  /**\n   * Get or set a style property.\n   */\n\n\n  var _proto = BaseStyleRule.prototype;\n\n  _proto.prop = function prop(name, value, options) {\n    // It's a getter.\n    if (value === undefined) return this.style[name]; // Don't do anything if the value has not changed.\n\n    var force = options ? options.force : false;\n    if (!force && this.style[name] === value) return this;\n    var newValue = value;\n\n    if (!options || options.process !== false) {\n      newValue = this.options.jss.plugins.onChangeValue(value, name, this);\n    }\n\n    var isEmpty = newValue == null || newValue === false;\n    var isDefined = name in this.style; // Value is empty and wasn't defined before.\n\n    if (isEmpty && !isDefined && !force) return this; // We are going to remove this value.\n\n    var remove = isEmpty && isDefined;\n    if (remove) delete this.style[name];else this.style[name] = newValue; // Renderable is defined if StyleSheet option `link` is true.\n\n    if (this.renderable && this.renderer) {\n      if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, newValue);\n      return this;\n    }\n\n    var sheet = this.options.sheet;\n\n    if (sheet && sheet.attached) {\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, '[JSS] Rule is not linked. Missing sheet option \"link: true\".') : undefined;\n    }\n\n    return this;\n  };\n\n  return BaseStyleRule;\n}();\nvar StyleRule =\n/*#__PURE__*/\nfunction (_BaseStyleRule) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(StyleRule, _BaseStyleRule);\n\n  function StyleRule(key, style, options) {\n    var _this;\n\n    _this = _BaseStyleRule.call(this, key, style, options) || this;\n    _this.selectorText = void 0;\n    _this.id = void 0;\n    _this.renderable = void 0;\n    var selector = options.selector,\n        scoped = options.scoped,\n        sheet = options.sheet,\n        generateId = options.generateId;\n\n    if (selector) {\n      _this.selectorText = selector;\n    } else if (scoped !== false) {\n      _this.id = generateId(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(_this)), sheet);\n      _this.selectorText = \".\" + escape(_this.id);\n    }\n\n    return _this;\n  }\n  /**\n   * Set selector string.\n   * Attention: use this with caution. Most browsers didn't implement\n   * selectorText setter, so this may result in rerendering of entire Style Sheet.\n   */\n\n\n  var _proto2 = StyleRule.prototype;\n\n  /**\n   * Apply rule to an element inline.\n   */\n  _proto2.applyTo = function applyTo(renderable) {\n    var renderer = this.renderer;\n\n    if (renderer) {\n      var json = this.toJSON();\n\n      for (var prop in json) {\n        renderer.setProperty(renderable, prop, json[prop]);\n      }\n    }\n\n    return this;\n  }\n  /**\n   * Returns JSON representation of the rule.\n   * Fallbacks are not supported.\n   * Useful for inline styles.\n   */\n  ;\n\n  _proto2.toJSON = function toJSON() {\n    var json = {};\n\n    for (var prop in this.style) {\n      var value = this.style[prop];\n      if (typeof value !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = toCssValue(value);\n    }\n\n    return json;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto2.toString = function toString(options) {\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n    var opts = link ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      allowEmpty: true\n    }) : options;\n    return toCss(this.selectorText, this.style, opts);\n  };\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(StyleRule, [{\n    key: \"selector\",\n    set: function set(selector) {\n      if (selector === this.selectorText) return;\n      this.selectorText = selector;\n      var renderer = this.renderer,\n          renderable = this.renderable;\n      if (!renderable || !renderer) return;\n      var hasChanged = renderer.setSelector(renderable, selector); // If selector setter is not implemented, rerender the rule.\n\n      if (!hasChanged) {\n        renderer.replaceRule(renderable, this);\n      }\n    }\n    /**\n     * Get selector string.\n     */\n    ,\n    get: function get() {\n      return this.selectorText;\n    }\n  }]);\n\n  return StyleRule;\n}(BaseStyleRule);\nvar pluginStyleRule = {\n  onCreateRule: function onCreateRule(name, style, options) {\n    if (name[0] === '@' || options.parent && options.parent.type === 'keyframes') {\n      return null;\n    }\n\n    return new StyleRule(name, style, options);\n  }\n};\n\nvar defaultToStringOptions = {\n  indent: 1,\n  children: true\n};\nvar atRegExp = /@([\\w-]+)/;\n/**\n * Conditional rule for @media, @supports\n */\n\nvar ConditionalRule =\n/*#__PURE__*/\nfunction () {\n  function ConditionalRule(key, styles, options) {\n    this.type = 'conditional';\n    this.at = void 0;\n    this.key = void 0;\n    this.query = void 0;\n    this.rules = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key; // Key might contain a unique suffix in case the `name` passed by user was duplicate.\n\n    this.query = options.name;\n    var atMatch = key.match(atRegExp);\n    this.at = atMatch ? atMatch[1] : 'unknown';\n    this.options = options;\n    this.rules = new RuleList(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      parent: this\n    }));\n\n    for (var name in styles) {\n      this.rules.add(name, styles[name]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Get a rule.\n   */\n\n\n  var _proto = ConditionalRule.prototype;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Create and register rule, run plugins.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, style, options) {\n    var rule = this.rules.add(name, style, options);\n    if (!rule) return null;\n    this.options.jss.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    if (options === void 0) {\n      options = defaultToStringOptions;\n    }\n\n    if (options.indent == null) options.indent = defaultToStringOptions.indent;\n    if (options.children == null) options.children = defaultToStringOptions.children;\n\n    if (options.children === false) {\n      return this.query + \" {}\";\n    }\n\n    var children = this.rules.toString(options);\n    return children ? this.query + \" {\\n\" + children + \"\\n}\" : '';\n  };\n\n  return ConditionalRule;\n}();\nvar keyRegExp = /@media|@supports\\s+/;\nvar pluginConditionalRule = {\n  onCreateRule: function onCreateRule(key, styles, options) {\n    return keyRegExp.test(key) ? new ConditionalRule(key, styles, options) : null;\n  }\n};\n\nvar defaultToStringOptions$1 = {\n  indent: 1,\n  children: true\n};\nvar nameRegExp = /@keyframes\\s+([\\w-]+)/;\n/**\n * Rule for @keyframes\n */\n\nvar KeyframesRule =\n/*#__PURE__*/\nfunction () {\n  function KeyframesRule(key, frames, options) {\n    this.type = 'keyframes';\n    this.at = '@keyframes';\n    this.key = void 0;\n    this.name = void 0;\n    this.id = void 0;\n    this.rules = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    var nameMatch = key.match(nameRegExp);\n\n    if (nameMatch && nameMatch[1]) {\n      this.name = nameMatch[1];\n    } else {\n      this.name = 'noname';\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Bad keyframes name \" + key) : undefined;\n    }\n\n    this.key = this.type + \"-\" + this.name;\n    this.options = options;\n    var scoped = options.scoped,\n        sheet = options.sheet,\n        generateId = options.generateId;\n    this.id = scoped === false ? this.name : escape(generateId(this, sheet));\n    this.rules = new RuleList(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      parent: this\n    }));\n\n    for (var name in frames) {\n      this.rules.add(name, frames[name], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n        parent: this\n      }));\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = KeyframesRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (options === void 0) {\n      options = defaultToStringOptions$1;\n    }\n\n    if (options.indent == null) options.indent = defaultToStringOptions$1.indent;\n    if (options.children == null) options.children = defaultToStringOptions$1.children;\n\n    if (options.children === false) {\n      return this.at + \" \" + this.id + \" {}\";\n    }\n\n    var children = this.rules.toString(options);\n    if (children) children = \"\\n\" + children + \"\\n\";\n    return this.at + \" \" + this.id + \" {\" + children + \"}\";\n  };\n\n  return KeyframesRule;\n}();\nvar keyRegExp$1 = /@keyframes\\s+/;\nvar refRegExp = /\\$([\\w-]+)/g;\n\nvar findReferencedKeyframe = function findReferencedKeyframe(val, keyframes) {\n  if (typeof val === 'string') {\n    return val.replace(refRegExp, function (match, name) {\n      if (name in keyframes) {\n        return keyframes[name];\n      }\n\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Referenced keyframes rule \\\"\" + name + \"\\\" is not defined.\") : undefined;\n      return match;\n    });\n  }\n\n  return val;\n};\n/**\n * Replace the reference for a animation name.\n */\n\n\nvar replaceRef = function replaceRef(style, prop, keyframes) {\n  var value = style[prop];\n  var refKeyframe = findReferencedKeyframe(value, keyframes);\n\n  if (refKeyframe !== value) {\n    style[prop] = refKeyframe;\n  }\n};\n\nvar plugin = {\n  onCreateRule: function onCreateRule(key, frames, options) {\n    return typeof key === 'string' && keyRegExp$1.test(key) ? new KeyframesRule(key, frames, options) : null;\n  },\n  // Animation name ref replacer.\n  onProcessStyle: function onProcessStyle(style, rule, sheet) {\n    if (rule.type !== 'style' || !sheet) return style;\n    if ('animation-name' in style) replaceRef(style, 'animation-name', sheet.keyframes);\n    if ('animation' in style) replaceRef(style, 'animation', sheet.keyframes);\n    return style;\n  },\n  onChangeValue: function onChangeValue(val, prop, rule) {\n    var sheet = rule.options.sheet;\n\n    if (!sheet) {\n      return val;\n    }\n\n    switch (prop) {\n      case 'animation':\n        return findReferencedKeyframe(val, sheet.keyframes);\n\n      case 'animation-name':\n        return findReferencedKeyframe(val, sheet.keyframes);\n\n      default:\n        return val;\n    }\n  }\n};\n\nvar KeyframeRule =\n/*#__PURE__*/\nfunction (_BaseStyleRule) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(KeyframeRule, _BaseStyleRule);\n\n  function KeyframeRule() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _BaseStyleRule.call.apply(_BaseStyleRule, [this].concat(args)) || this;\n    _this.renderable = void 0;\n    return _this;\n  }\n\n  var _proto = KeyframeRule.prototype;\n\n  /**\n   * Generates a CSS string.\n   */\n  _proto.toString = function toString(options) {\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n    var opts = link ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      allowEmpty: true\n    }) : options;\n    return toCss(this.key, this.style, opts);\n  };\n\n  return KeyframeRule;\n}(BaseStyleRule);\nvar pluginKeyframeRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    if (options.parent && options.parent.type === 'keyframes') {\n      return new KeyframeRule(key, style, options);\n    }\n\n    return null;\n  }\n};\n\nvar FontFaceRule =\n/*#__PURE__*/\nfunction () {\n  function FontFaceRule(key, style, options) {\n    this.type = 'font-face';\n    this.at = '@font-face';\n    this.key = void 0;\n    this.style = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.style = style;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = FontFaceRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (Array.isArray(this.style)) {\n      var str = '';\n\n      for (var index = 0; index < this.style.length; index++) {\n        str += toCss(this.at, this.style[index]);\n        if (this.style[index + 1]) str += '\\n';\n      }\n\n      return str;\n    }\n\n    return toCss(this.at, this.style, options);\n  };\n\n  return FontFaceRule;\n}();\nvar keyRegExp$2 = /@font-face/;\nvar pluginFontFaceRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    return keyRegExp$2.test(key) ? new FontFaceRule(key, style, options) : null;\n  }\n};\n\nvar ViewportRule =\n/*#__PURE__*/\nfunction () {\n  function ViewportRule(key, style, options) {\n    this.type = 'viewport';\n    this.at = '@viewport';\n    this.key = void 0;\n    this.style = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.style = style;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = ViewportRule.prototype;\n\n  _proto.toString = function toString(options) {\n    return toCss(this.key, this.style, options);\n  };\n\n  return ViewportRule;\n}();\nvar pluginViewportRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    return key === '@viewport' || key === '@-ms-viewport' ? new ViewportRule(key, style, options) : null;\n  }\n};\n\nvar SimpleRule =\n/*#__PURE__*/\nfunction () {\n  function SimpleRule(key, value, options) {\n    this.type = 'simple';\n    this.key = void 0;\n    this.value = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.value = value;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  // eslint-disable-next-line no-unused-vars\n\n\n  var _proto = SimpleRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (Array.isArray(this.value)) {\n      var str = '';\n\n      for (var index = 0; index < this.value.length; index++) {\n        str += this.key + \" \" + this.value[index] + \";\";\n        if (this.value[index + 1]) str += '\\n';\n      }\n\n      return str;\n    }\n\n    return this.key + \" \" + this.value + \";\";\n  };\n\n  return SimpleRule;\n}();\nvar keysMap = {\n  '@charset': true,\n  '@import': true,\n  '@namespace': true\n};\nvar pluginSimpleRule = {\n  onCreateRule: function onCreateRule(key, value, options) {\n    return key in keysMap ? new SimpleRule(key, value, options) : null;\n  }\n};\n\nvar plugins = [pluginStyleRule, pluginConditionalRule, plugin, pluginKeyframeRule, pluginFontFaceRule, pluginViewportRule, pluginSimpleRule];\n\nvar defaultUpdateOptions = {\n  process: true\n};\nvar forceUpdateOptions = {\n  force: true,\n  process: true\n  /**\n   * Contains rules objects and allows adding/removing etc.\n   * Is used for e.g. by `StyleSheet` or `ConditionalRule`.\n   */\n\n};\n\nvar RuleList =\n/*#__PURE__*/\nfunction () {\n  // Rules registry for access by .get() method.\n  // It contains the same rule registered by name and by selector.\n  // Original styles object.\n  // Used to ensure correct rules order.\n  function RuleList(options) {\n    this.map = {};\n    this.raw = {};\n    this.index = [];\n    this.counter = 0;\n    this.options = void 0;\n    this.classes = void 0;\n    this.keyframes = void 0;\n    this.options = options;\n    this.classes = options.classes;\n    this.keyframes = options.keyframes;\n  }\n  /**\n   * Create and register rule.\n   *\n   * Will not render after Style Sheet was rendered the first time.\n   */\n\n\n  var _proto = RuleList.prototype;\n\n  _proto.add = function add(name, decl, ruleOptions) {\n    var _this$options = this.options,\n        parent = _this$options.parent,\n        sheet = _this$options.sheet,\n        jss = _this$options.jss,\n        Renderer = _this$options.Renderer,\n        generateId = _this$options.generateId,\n        scoped = _this$options.scoped;\n\n    var options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n      classes: this.classes,\n      parent: parent,\n      sheet: sheet,\n      jss: jss,\n      Renderer: Renderer,\n      generateId: generateId,\n      scoped: scoped,\n      name: name\n    }, ruleOptions); // When user uses .createStyleSheet(), duplicate names are not possible, but\n    // `sheet.addRule()` opens the door for any duplicate rule name. When this happens\n    // we need to make the key unique within this RuleList instance scope.\n\n\n    var key = name;\n\n    if (name in this.raw) {\n      key = name + \"-d\" + this.counter++;\n    } // We need to save the original decl before creating the rule\n    // because cache plugin needs to use it as a key to return a cached rule.\n\n\n    this.raw[key] = decl;\n\n    if (key in this.classes) {\n      // E.g. rules inside of @media container\n      options.selector = \".\" + escape(this.classes[key]);\n    }\n\n    var rule = createRule(key, decl, options);\n    if (!rule) return null;\n    this.register(rule);\n    var index = options.index === undefined ? this.index.length : options.index;\n    this.index.splice(index, 0, rule);\n    return rule;\n  }\n  /**\n   * Get a rule.\n   */\n  ;\n\n  _proto.get = function get(name) {\n    return this.map[name];\n  }\n  /**\n   * Delete a rule.\n   */\n  ;\n\n  _proto.remove = function remove(rule) {\n    this.unregister(rule);\n    delete this.raw[rule.key];\n    this.index.splice(this.index.indexOf(rule), 1);\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.index.indexOf(rule);\n  }\n  /**\n   * Run `onProcessRule()` plugins on every rule.\n   */\n  ;\n\n  _proto.process = function process() {\n    var plugins = this.options.jss.plugins; // We need to clone array because if we modify the index somewhere else during a loop\n    // we end up with very hard-to-track-down side effects.\n\n    this.index.slice(0).forEach(plugins.onProcessRule, plugins);\n  }\n  /**\n   * Register a rule in `.map`, `.classes` and `.keyframes` maps.\n   */\n  ;\n\n  _proto.register = function register(rule) {\n    this.map[rule.key] = rule;\n\n    if (rule instanceof StyleRule) {\n      this.map[rule.selector] = rule;\n      if (rule.id) this.classes[rule.key] = rule.id;\n    } else if (rule instanceof KeyframesRule && this.keyframes) {\n      this.keyframes[rule.name] = rule.id;\n    }\n  }\n  /**\n   * Unregister a rule.\n   */\n  ;\n\n  _proto.unregister = function unregister(rule) {\n    delete this.map[rule.key];\n\n    if (rule instanceof StyleRule) {\n      delete this.map[rule.selector];\n      delete this.classes[rule.key];\n    } else if (rule instanceof KeyframesRule) {\n      delete this.keyframes[rule.name];\n    }\n  }\n  /**\n   * Update the function values with a new data.\n   */\n  ;\n\n  _proto.update = function update() {\n    var name;\n    var data;\n    var options;\n\n    if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'string') {\n      name = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe\n\n      data = arguments.length <= 1 ? undefined : arguments[1]; // $FlowFixMe\n\n      options = arguments.length <= 2 ? undefined : arguments[2];\n    } else {\n      data = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe\n\n      options = arguments.length <= 1 ? undefined : arguments[1];\n      name = null;\n    }\n\n    if (name) {\n      this.updateOne(this.map[name], data, options);\n    } else {\n      for (var index = 0; index < this.index.length; index++) {\n        this.updateOne(this.index[index], data, options);\n      }\n    }\n  }\n  /**\n   * Execute plugins, update rule props.\n   */\n  ;\n\n  _proto.updateOne = function updateOne(rule, data, options) {\n    if (options === void 0) {\n      options = defaultUpdateOptions;\n    }\n\n    var _this$options2 = this.options,\n        plugins = _this$options2.jss.plugins,\n        sheet = _this$options2.sheet; // It is a rules container like for e.g. ConditionalRule.\n\n    if (rule.rules instanceof RuleList) {\n      rule.rules.update(data, options);\n      return;\n    }\n\n    var styleRule = rule;\n    var style = styleRule.style;\n    plugins.onUpdate(data, rule, sheet, options); // We rely on a new `style` ref in case it was mutated during onUpdate hook.\n\n    if (options.process && style && style !== styleRule.style) {\n      // We need to run the plugins in case new `style` relies on syntax plugins.\n      plugins.onProcessStyle(styleRule.style, styleRule, sheet); // Update and add props.\n\n      for (var prop in styleRule.style) {\n        var nextValue = styleRule.style[prop];\n        var prevValue = style[prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.\n        // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.\n\n        if (nextValue !== prevValue) {\n          styleRule.prop(prop, nextValue, forceUpdateOptions);\n        }\n      } // Remove props.\n\n\n      for (var _prop in style) {\n        var _nextValue = styleRule.style[_prop];\n        var _prevValue = style[_prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.\n        // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.\n\n        if (_nextValue == null && _nextValue !== _prevValue) {\n          styleRule.prop(_prop, null, forceUpdateOptions);\n        }\n      }\n    }\n  }\n  /**\n   * Convert rules to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    var str = '';\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n\n    for (var index = 0; index < this.index.length; index++) {\n      var rule = this.index[index];\n      var css = rule.toString(options); // No need to render an empty rule.\n\n      if (!css && !link) continue;\n      if (str) str += '\\n';\n      str += css;\n    }\n\n    return str;\n  };\n\n  return RuleList;\n}();\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n  function StyleSheet(styles, options) {\n    this.options = void 0;\n    this.deployed = void 0;\n    this.attached = void 0;\n    this.rules = void 0;\n    this.renderer = void 0;\n    this.classes = void 0;\n    this.keyframes = void 0;\n    this.queue = void 0;\n    this.attached = false;\n    this.deployed = false;\n    this.classes = {};\n    this.keyframes = {};\n    this.options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      sheet: this,\n      parent: this,\n      classes: this.classes,\n      keyframes: this.keyframes\n    });\n\n    if (options.Renderer) {\n      this.renderer = new options.Renderer(this);\n    }\n\n    this.rules = new RuleList(this.options);\n\n    for (var name in styles) {\n      this.rules.add(name, styles[name]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Attach renderable to the render tree.\n   */\n\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.attach = function attach() {\n    if (this.attached) return this;\n    if (this.renderer) this.renderer.attach();\n    this.attached = true; // Order is important, because we can't use insertRule API if style element is not attached.\n\n    if (!this.deployed) this.deploy();\n    return this;\n  }\n  /**\n   * Remove renderable from render tree.\n   */\n  ;\n\n  _proto.detach = function detach() {\n    if (!this.attached) return this;\n    if (this.renderer) this.renderer.detach();\n    this.attached = false;\n    return this;\n  }\n  /**\n   * Add a rule to the current stylesheet.\n   * Will insert a rule also after the stylesheet has been rendered first time.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, decl, options) {\n    var queue = this.queue; // Plugins can create rules.\n    // In order to preserve the right order, we need to queue all `.addRule` calls,\n    // which happen after the first `rules.add()` call.\n\n    if (this.attached && !queue) this.queue = [];\n    var rule = this.rules.add(name, decl, options);\n    if (!rule) return null;\n    this.options.jss.plugins.onProcessRule(rule);\n\n    if (this.attached) {\n      if (!this.deployed) return rule; // Don't insert rule directly if there is no stringified version yet.\n      // It will be inserted all together when .attach is called.\n\n      if (queue) queue.push(rule);else {\n        this.insertRule(rule);\n\n        if (this.queue) {\n          this.queue.forEach(this.insertRule, this);\n          this.queue = undefined;\n        }\n      }\n      return rule;\n    } // We can't add rules to a detached style node.\n    // We will redeploy the sheet once user will attach it.\n\n\n    this.deployed = false;\n    return rule;\n  }\n  /**\n   * Insert rule into the StyleSheet\n   */\n  ;\n\n  _proto.insertRule = function insertRule(rule) {\n    if (this.renderer) {\n      this.renderer.insertRule(rule);\n    }\n  }\n  /**\n   * Create and add rules.\n   * Will render also after Style Sheet was rendered the first time.\n   */\n  ;\n\n  _proto.addRules = function addRules(styles, options) {\n    var added = [];\n\n    for (var name in styles) {\n      var rule = this.addRule(name, styles[name], options);\n      if (rule) added.push(rule);\n    }\n\n    return added;\n  }\n  /**\n   * Get a rule by name.\n   */\n  ;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Delete a rule by name.\n   * Returns `true`: if rule has been deleted from the DOM.\n   */\n  ;\n\n  _proto.deleteRule = function deleteRule(name) {\n    var rule = typeof name === 'object' ? name : this.rules.get(name);\n    if (!rule) return false;\n    this.rules.remove(rule);\n\n    if (this.attached && rule.renderable && this.renderer) {\n      return this.renderer.deleteRule(rule.renderable);\n    }\n\n    return true;\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Deploy pure CSS string to a renderable.\n   */\n  ;\n\n  _proto.deploy = function deploy() {\n    if (this.renderer) this.renderer.deploy();\n    this.deployed = true;\n    return this;\n  }\n  /**\n   * Update the function values with a new data.\n   */\n  ;\n\n  _proto.update = function update() {\n    var _this$rules;\n\n    (_this$rules = this.rules).update.apply(_this$rules, arguments);\n\n    return this;\n  }\n  /**\n   * Updates a single rule.\n   */\n  ;\n\n  _proto.updateOne = function updateOne(rule, data, options) {\n    this.rules.updateOne(rule, data, options);\n    return this;\n  }\n  /**\n   * Convert rules to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    return this.rules.toString(options);\n  };\n\n  return StyleSheet;\n}();\n\nvar PluginsRegistry =\n/*#__PURE__*/\nfunction () {\n  function PluginsRegistry() {\n    this.plugins = {\n      internal: [],\n      external: []\n    };\n    this.registry = void 0;\n  }\n\n  var _proto = PluginsRegistry.prototype;\n\n  /**\n   * Call `onCreateRule` hooks and return an object if returned by a hook.\n   */\n  _proto.onCreateRule = function onCreateRule(name, decl, options) {\n    for (var i = 0; i < this.registry.onCreateRule.length; i++) {\n      var rule = this.registry.onCreateRule[i](name, decl, options);\n      if (rule) return rule;\n    }\n\n    return null;\n  }\n  /**\n   * Call `onProcessRule` hooks.\n   */\n  ;\n\n  _proto.onProcessRule = function onProcessRule(rule) {\n    if (rule.isProcessed) return;\n    var sheet = rule.options.sheet;\n\n    for (var i = 0; i < this.registry.onProcessRule.length; i++) {\n      this.registry.onProcessRule[i](rule, sheet);\n    }\n\n    if (rule.style) this.onProcessStyle(rule.style, rule, sheet);\n    rule.isProcessed = true;\n  }\n  /**\n   * Call `onProcessStyle` hooks.\n   */\n  ;\n\n  _proto.onProcessStyle = function onProcessStyle(style, rule, sheet) {\n    for (var i = 0; i < this.registry.onProcessStyle.length; i++) {\n      // $FlowFixMe\n      rule.style = this.registry.onProcessStyle[i](rule.style, rule, sheet);\n    }\n  }\n  /**\n   * Call `onProcessSheet` hooks.\n   */\n  ;\n\n  _proto.onProcessSheet = function onProcessSheet(sheet) {\n    for (var i = 0; i < this.registry.onProcessSheet.length; i++) {\n      this.registry.onProcessSheet[i](sheet);\n    }\n  }\n  /**\n   * Call `onUpdate` hooks.\n   */\n  ;\n\n  _proto.onUpdate = function onUpdate(data, rule, sheet, options) {\n    for (var i = 0; i < this.registry.onUpdate.length; i++) {\n      this.registry.onUpdate[i](data, rule, sheet, options);\n    }\n  }\n  /**\n   * Call `onChangeValue` hooks.\n   */\n  ;\n\n  _proto.onChangeValue = function onChangeValue(value, prop, rule) {\n    var processedValue = value;\n\n    for (var i = 0; i < this.registry.onChangeValue.length; i++) {\n      processedValue = this.registry.onChangeValue[i](processedValue, prop, rule);\n    }\n\n    return processedValue;\n  }\n  /**\n   * Register a plugin.\n   */\n  ;\n\n  _proto.use = function use(newPlugin, options) {\n    if (options === void 0) {\n      options = {\n        queue: 'external'\n      };\n    }\n\n    var plugins = this.plugins[options.queue]; // Avoids applying same plugin twice, at least based on ref.\n\n    if (plugins.indexOf(newPlugin) !== -1) {\n      return;\n    }\n\n    plugins.push(newPlugin);\n    this.registry = [].concat(this.plugins.external, this.plugins.internal).reduce(function (registry, plugin) {\n      for (var name in plugin) {\n        if (name in registry) {\n          registry[name].push(plugin[name]);\n        } else {\n           true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Unknown hook \\\"\" + name + \"\\\".\") : undefined;\n        }\n      }\n\n      return registry;\n    }, {\n      onCreateRule: [],\n      onProcessRule: [],\n      onProcessStyle: [],\n      onProcessSheet: [],\n      onChangeValue: [],\n      onUpdate: []\n    });\n  };\n\n  return PluginsRegistry;\n}();\n\n/**\n * Sheets registry to access them all at one place.\n */\nvar SheetsRegistry =\n/*#__PURE__*/\nfunction () {\n  function SheetsRegistry() {\n    this.registry = [];\n  }\n\n  var _proto = SheetsRegistry.prototype;\n\n  /**\n   * Register a Style Sheet.\n   */\n  _proto.add = function add(sheet) {\n    var registry = this.registry;\n    var index = sheet.options.index;\n    if (registry.indexOf(sheet) !== -1) return;\n\n    if (registry.length === 0 || index >= this.index) {\n      registry.push(sheet);\n      return;\n    } // Find a position.\n\n\n    for (var i = 0; i < registry.length; i++) {\n      if (registry[i].options.index > index) {\n        registry.splice(i, 0, sheet);\n        return;\n      }\n    }\n  }\n  /**\n   * Reset the registry.\n   */\n  ;\n\n  _proto.reset = function reset() {\n    this.registry = [];\n  }\n  /**\n   * Remove a Style Sheet.\n   */\n  ;\n\n  _proto.remove = function remove(sheet) {\n    var index = this.registry.indexOf(sheet);\n    this.registry.splice(index, 1);\n  }\n  /**\n   * Convert all attached sheets to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        attached = _ref.attached,\n        options = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_ref, [\"attached\"]);\n\n    var css = '';\n\n    for (var i = 0; i < this.registry.length; i++) {\n      var sheet = this.registry[i];\n\n      if (attached != null && sheet.attached !== attached) {\n        continue;\n      }\n\n      if (css) css += '\\n';\n      css += sheet.toString(options);\n    }\n\n    return css;\n  };\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(SheetsRegistry, [{\n    key: \"index\",\n\n    /**\n     * Current highest index number.\n     */\n    get: function get() {\n      return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index;\n    }\n  }]);\n\n  return SheetsRegistry;\n}();\n\n/**\n * This is a global sheets registry. Only DomRenderer will add sheets to it.\n * On the server one should use an own SheetsRegistry instance and add the\n * sheets to it, because you need to make sure to create a new registry for\n * each request in order to not leak sheets across requests.\n */\n\nvar sheets = new SheetsRegistry();\n\n/* eslint-disable */\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar globalThis = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\nvar ns = '2f1acc6c3a606b082e5eef5e54414ffb';\nif (globalThis[ns] == null) globalThis[ns] = 0; // Bundle may contain multiple JSS versions at the same time. In order to identify\n// the current version with just one short number and use it for classes generation\n// we use a counter. Also it is more accurate, because user can manually reevaluate\n// the module.\n\nvar moduleId = globalThis[ns]++;\n\nvar maxRules = 1e10;\n\n/**\n * Returns a function which generates unique class names based on counters.\n * When new generator function is created, rule counter is reseted.\n * We need to reset the rule counter for SSR for each request.\n */\nvar createGenerateId = function createGenerateId(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var ruleCounter = 0;\n  return function (rule, sheet) {\n    ruleCounter += 1;\n\n    if (ruleCounter > maxRules) {\n       true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] You might have a memory leak. Rule counter is at \" + ruleCounter + \".\") : undefined;\n    }\n\n    var jssId = '';\n    var prefix = '';\n\n    if (sheet) {\n      if (sheet.options.classNamePrefix) {\n        prefix = sheet.options.classNamePrefix;\n      }\n\n      if (sheet.options.jss.id != null) {\n        jssId = String(sheet.options.jss.id);\n      }\n    }\n\n    if (options.minify) {\n      // Using \"c\" because a number can't be the first char in a class name.\n      return \"\" + (prefix || 'c') + moduleId + jssId + ruleCounter;\n    }\n\n    return prefix + rule.key + \"-\" + moduleId + (jssId ? \"-\" + jssId : '') + \"-\" + ruleCounter;\n  };\n};\n\n/**\n * Cache the value from the first time a function is called.\n */\nvar memoize = function memoize(fn) {\n  var value;\n  return function () {\n    if (!value) value = fn();\n    return value;\n  };\n};\n/**\n * Get a style property value.\n */\n\n\nfunction getPropertyValue(cssRule, prop) {\n  try {\n    // Support CSSTOM.\n    if (cssRule.attributeStyleMap) {\n      return cssRule.attributeStyleMap.get(prop);\n    }\n\n    return cssRule.style.getPropertyValue(prop);\n  } catch (err) {\n    // IE may throw if property is unknown.\n    return '';\n  }\n}\n/**\n * Set a style property.\n */\n\n\nfunction setProperty(cssRule, prop, value) {\n  try {\n    var cssValue = value;\n\n    if (Array.isArray(value)) {\n      cssValue = toCssValue(value, true);\n\n      if (value[value.length - 1] === '!important') {\n        cssRule.style.setProperty(prop, cssValue, 'important');\n        return true;\n      }\n    } // Support CSSTOM.\n\n\n    if (cssRule.attributeStyleMap) {\n      cssRule.attributeStyleMap.set(prop, cssValue);\n    } else {\n      cssRule.style.setProperty(prop, cssValue);\n    }\n  } catch (err) {\n    // IE may throw if property is unknown.\n    return false;\n  }\n\n  return true;\n}\n/**\n * Remove a style property.\n */\n\n\nfunction removeProperty(cssRule, prop) {\n  try {\n    // Support CSSTOM.\n    if (cssRule.attributeStyleMap) {\n      cssRule.attributeStyleMap.delete(prop);\n    } else {\n      cssRule.style.removeProperty(prop);\n    }\n  } catch (err) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] DOMException \\\"\" + err.message + \"\\\" was thrown. Tried to remove property \\\"\" + prop + \"\\\".\") : undefined;\n  }\n}\n/**\n * Set the selector.\n */\n\n\nfunction setSelector(cssRule, selectorText) {\n  cssRule.selectorText = selectorText; // Return false if setter was not successful.\n  // Currently works in chrome only.\n\n  return cssRule.selectorText === selectorText;\n}\n/**\n * Gets the `head` element upon the first call and caches it.\n * We assume it can't be null.\n */\n\n\nvar getHead = memoize(function () {\n  return document.querySelector('head');\n});\n/**\n * Find attached sheet with an index higher than the passed one.\n */\n\nfunction findHigherSheet(registry, options) {\n  for (var i = 0; i < registry.length; i++) {\n    var sheet = registry[i];\n\n    if (sheet.attached && sheet.options.index > options.index && sheet.options.insertionPoint === options.insertionPoint) {\n      return sheet;\n    }\n  }\n\n  return null;\n}\n/**\n * Find attached sheet with the highest index.\n */\n\n\nfunction findHighestSheet(registry, options) {\n  for (var i = registry.length - 1; i >= 0; i--) {\n    var sheet = registry[i];\n\n    if (sheet.attached && sheet.options.insertionPoint === options.insertionPoint) {\n      return sheet;\n    }\n  }\n\n  return null;\n}\n/**\n * Find a comment with \"jss\" inside.\n */\n\n\nfunction findCommentNode(text) {\n  var head = getHead();\n\n  for (var i = 0; i < head.childNodes.length; i++) {\n    var node = head.childNodes[i];\n\n    if (node.nodeType === 8 && node.nodeValue.trim() === text) {\n      return node;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Find a node before which we can insert the sheet.\n */\nfunction findPrevNode(options) {\n  var registry = sheets.registry;\n\n  if (registry.length > 0) {\n    // Try to insert before the next higher sheet.\n    var sheet = findHigherSheet(registry, options);\n\n    if (sheet && sheet.renderer) {\n      return {\n        parent: sheet.renderer.element.parentNode,\n        node: sheet.renderer.element\n      };\n    } // Otherwise insert after the last attached.\n\n\n    sheet = findHighestSheet(registry, options);\n\n    if (sheet && sheet.renderer) {\n      return {\n        parent: sheet.renderer.element.parentNode,\n        node: sheet.renderer.element.nextSibling\n      };\n    }\n  } // Try to find a comment placeholder if registry is empty.\n\n\n  var insertionPoint = options.insertionPoint;\n\n  if (insertionPoint && typeof insertionPoint === 'string') {\n    var comment = findCommentNode(insertionPoint);\n\n    if (comment) {\n      return {\n        parent: comment.parentNode,\n        node: comment.nextSibling\n      };\n    } // If user specifies an insertion point and it can't be found in the document -\n    // bad specificity issues may appear.\n\n\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] Insertion point \\\"\" + insertionPoint + \"\\\" not found.\") : undefined;\n  }\n\n  return false;\n}\n/**\n * Insert style element into the DOM.\n */\n\n\nfunction insertStyle(style, options) {\n  var insertionPoint = options.insertionPoint;\n  var nextNode = findPrevNode(options);\n\n  if (nextNode !== false && nextNode.parent) {\n    nextNode.parent.insertBefore(style, nextNode.node);\n    return;\n  } // Works with iframes and any node types.\n\n\n  if (insertionPoint && typeof insertionPoint.nodeType === 'number') {\n    // https://stackoverflow.com/questions/41328728/force-casting-in-flow\n    var insertionPointElement = insertionPoint;\n    var parentNode = insertionPointElement.parentNode;\n    if (parentNode) parentNode.insertBefore(style, insertionPointElement.nextSibling);else  true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, '[JSS] Insertion point is not in the DOM.') : undefined;\n    return;\n  }\n\n  getHead().appendChild(style);\n}\n/**\n * Read jss nonce setting from the page if the user has set it.\n */\n\n\nvar getNonce = memoize(function () {\n  var node = document.querySelector('meta[property=\"csp-nonce\"]');\n  return node ? node.getAttribute('content') : null;\n});\n\nvar _insertRule = function insertRule(container, rule, index) {\n  var maxIndex = container.cssRules.length; // In case previous insertion fails, passed index might be wrong\n\n  if (index === undefined || index > maxIndex) {\n    // eslint-disable-next-line no-param-reassign\n    index = maxIndex;\n  }\n\n  try {\n    if ('insertRule' in container) {\n      var c = container;\n      c.insertRule(rule, index);\n    } // Keyframes rule.\n    else if ('appendRule' in container) {\n        var _c = container;\n\n        _c.appendRule(rule);\n      }\n  } catch (err) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] \" + err.message) : undefined;\n    return false;\n  }\n\n  return container.cssRules[index];\n};\n\nvar createStyle = function createStyle() {\n  var el = document.createElement('style'); // Without it, IE will have a broken source order specificity if we\n  // insert rules after we insert the style tag.\n  // It seems to kick-off the source order specificity algorithm.\n\n  el.textContent = '\\n';\n  return el;\n};\n\nvar DomRenderer =\n/*#__PURE__*/\nfunction () {\n  // HTMLStyleElement needs fixing https://github.com/facebook/flow/issues/2696\n  function DomRenderer(sheet) {\n    this.getPropertyValue = getPropertyValue;\n    this.setProperty = setProperty;\n    this.removeProperty = removeProperty;\n    this.setSelector = setSelector;\n    this.element = void 0;\n    this.sheet = void 0;\n    this.hasInsertedRules = false;\n    // There is no sheet when the renderer is used from a standalone StyleRule.\n    if (sheet) sheets.add(sheet);\n    this.sheet = sheet;\n\n    var _ref = this.sheet ? this.sheet.options : {},\n        media = _ref.media,\n        meta = _ref.meta,\n        element = _ref.element;\n\n    this.element = element || createStyle();\n    this.element.setAttribute('data-jss', '');\n    if (media) this.element.setAttribute('media', media);\n    if (meta) this.element.setAttribute('data-meta', meta);\n    var nonce = getNonce();\n    if (nonce) this.element.setAttribute('nonce', nonce);\n  }\n  /**\n   * Insert style element into render tree.\n   */\n\n\n  var _proto = DomRenderer.prototype;\n\n  _proto.attach = function attach() {\n    // In the case the element node is external and it is already in the DOM.\n    if (this.element.parentNode || !this.sheet) return;\n    insertStyle(this.element, this.sheet.options); // When rules are inserted using `insertRule` API, after `sheet.detach().attach()`\n    // most browsers create a new CSSStyleSheet, except of all IEs.\n\n    var deployed = Boolean(this.sheet && this.sheet.deployed);\n\n    if (this.hasInsertedRules && deployed) {\n      this.hasInsertedRules = false;\n      this.deploy();\n    }\n  }\n  /**\n   * Remove style element from render tree.\n   */\n  ;\n\n  _proto.detach = function detach() {\n    var parentNode = this.element.parentNode;\n    if (parentNode) parentNode.removeChild(this.element);\n  }\n  /**\n   * Inject CSS string into element.\n   */\n  ;\n\n  _proto.deploy = function deploy() {\n    var sheet = this.sheet;\n    if (!sheet) return;\n\n    if (sheet.options.link) {\n      this.insertRules(sheet.rules);\n      return;\n    }\n\n    this.element.textContent = \"\\n\" + sheet.toString() + \"\\n\";\n  }\n  /**\n   * Insert RuleList into an element.\n   */\n  ;\n\n  _proto.insertRules = function insertRules(rules, nativeParent) {\n    for (var i = 0; i < rules.index.length; i++) {\n      this.insertRule(rules.index[i], i, nativeParent);\n    }\n  }\n  /**\n   * Insert a rule into element.\n   */\n  ;\n\n  _proto.insertRule = function insertRule(rule, index, nativeParent) {\n    if (nativeParent === void 0) {\n      nativeParent = this.element.sheet;\n    }\n\n    if (rule.rules) {\n      var parent = rule;\n      var latestNativeParent = nativeParent;\n\n      if (rule.type === 'conditional' || rule.type === 'keyframes') {\n        // We need to render the container without children first.\n        latestNativeParent = _insertRule(nativeParent, parent.toString({\n          children: false\n        }), index);\n\n        if (latestNativeParent === false) {\n          return false;\n        }\n      }\n\n      this.insertRules(parent.rules, latestNativeParent);\n      return latestNativeParent;\n    } // IE keeps the CSSStyleSheet after style node has been reattached,\n    // so we need to check if the `renderable` reference the right style sheet and not\n    // rerender those rules.\n\n\n    if (rule.renderable && rule.renderable.parentStyleSheet === this.element.sheet) {\n      return rule.renderable;\n    }\n\n    var ruleStr = rule.toString();\n    if (!ruleStr) return false;\n\n    var nativeRule = _insertRule(nativeParent, ruleStr, index);\n\n    if (nativeRule === false) {\n      return false;\n    }\n\n    this.hasInsertedRules = true;\n    rule.renderable = nativeRule;\n    return nativeRule;\n  }\n  /**\n   * Delete a rule.\n   */\n  ;\n\n  _proto.deleteRule = function deleteRule(cssRule) {\n    var sheet = this.element.sheet;\n    var index = this.indexOf(cssRule);\n    if (index === -1) return false;\n    sheet.deleteRule(index);\n    return true;\n  }\n  /**\n   * Get index of a CSS Rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(cssRule) {\n    var cssRules = this.element.sheet.cssRules;\n\n    for (var index = 0; index < cssRules.length; index++) {\n      if (cssRule === cssRules[index]) return index;\n    }\n\n    return -1;\n  }\n  /**\n   * Generate a new CSS rule and replace the existing one.\n   *\n   * Only used for some old browsers because they can't set a selector.\n   */\n  ;\n\n  _proto.replaceRule = function replaceRule(cssRule, rule) {\n    var index = this.indexOf(cssRule);\n    if (index === -1) return false;\n    this.element.sheet.deleteRule(index);\n    return this.insertRule(rule, index);\n  }\n  /**\n   * Get all rules elements.\n   */\n  ;\n\n  _proto.getRules = function getRules() {\n    return this.element.sheet.cssRules;\n  };\n\n  return DomRenderer;\n}();\n\nvar instanceCounter = 0;\n\nvar Jss =\n/*#__PURE__*/\nfunction () {\n  function Jss(options) {\n    this.id = instanceCounter++;\n    this.version = \"10.3.0\";\n    this.plugins = new PluginsRegistry();\n    this.options = {\n      id: {\n        minify: false\n      },\n      createGenerateId: createGenerateId,\n      Renderer: is_in_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ? DomRenderer : null,\n      plugins: []\n    };\n    this.generateId = createGenerateId({\n      minify: false\n    });\n\n    for (var i = 0; i < plugins.length; i++) {\n      this.plugins.use(plugins[i], {\n        queue: 'internal'\n      });\n    }\n\n    this.setup(options);\n  }\n  /**\n   * Prepares various options, applies plugins.\n   * Should not be used twice on the same instance, because there is no plugins\n   * deduplication logic.\n   */\n\n\n  var _proto = Jss.prototype;\n\n  _proto.setup = function setup(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    if (options.createGenerateId) {\n      this.options.createGenerateId = options.createGenerateId;\n    }\n\n    if (options.id) {\n      this.options.id = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, this.options.id, options.id);\n    }\n\n    if (options.createGenerateId || options.id) {\n      this.generateId = this.options.createGenerateId(this.options.id);\n    }\n\n    if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;\n\n    if ('Renderer' in options) {\n      this.options.Renderer = options.Renderer;\n    } // eslint-disable-next-line prefer-spread\n\n\n    if (options.plugins) this.use.apply(this, options.plugins);\n    return this;\n  }\n  /**\n   * Create a Style Sheet.\n   */\n  ;\n\n  _proto.createStyleSheet = function createStyleSheet(styles, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        index = _options.index;\n\n    if (typeof index !== 'number') {\n      index = sheets.index === 0 ? 0 : sheets.index + 1;\n    }\n\n    var sheet = new StyleSheet(styles, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      jss: this,\n      generateId: options.generateId || this.generateId,\n      insertionPoint: this.options.insertionPoint,\n      Renderer: this.options.Renderer,\n      index: index\n    }));\n    this.plugins.onProcessSheet(sheet);\n    return sheet;\n  }\n  /**\n   * Detach the Style Sheet and remove it from the registry.\n   */\n  ;\n\n  _proto.removeStyleSheet = function removeStyleSheet(sheet) {\n    sheet.detach();\n    sheets.remove(sheet);\n    return this;\n  }\n  /**\n   * Create a rule without a Style Sheet.\n   * [Deprecated] will be removed in the next major version.\n   */\n  ;\n\n  _proto.createRule = function createRule$1(name, style, options) {\n    if (style === void 0) {\n      style = {};\n    }\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    // Enable rule without name for inline styles.\n    if (typeof name === 'object') {\n      return this.createRule(undefined, name, style);\n    }\n\n    var ruleOptions = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, {\n      name: name,\n      jss: this,\n      Renderer: this.options.Renderer\n    });\n\n    if (!ruleOptions.generateId) ruleOptions.generateId = this.generateId;\n    if (!ruleOptions.classes) ruleOptions.classes = {};\n    if (!ruleOptions.keyframes) ruleOptions.keyframes = {};\n\n    var rule = createRule(name, style, ruleOptions);\n\n    if (rule) this.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Register plugin. Passed function will be invoked with a rule instance.\n   */\n  ;\n\n  _proto.use = function use() {\n    var _this = this;\n\n    for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n      plugins[_key] = arguments[_key];\n    }\n\n    plugins.forEach(function (plugin) {\n      _this.plugins.use(plugin);\n    });\n    return this;\n  };\n\n  return Jss;\n}();\n\n/**\n * Extracts a styles object with only props that contain function values.\n */\nfunction getDynamicStyles(styles) {\n  var to = null;\n\n  for (var key in styles) {\n    var value = styles[key];\n    var type = typeof value;\n\n    if (type === 'function') {\n      if (!to) to = {};\n      to[key] = value;\n    } else if (type === 'object' && value !== null && !Array.isArray(value)) {\n      var extracted = getDynamicStyles(value);\n\n      if (extracted) {\n        if (!to) to = {};\n        to[key] = extracted;\n      }\n    }\n  }\n\n  return to;\n}\n\n/**\n * SheetsManager is like a WeakMap which is designed to count StyleSheet\n * instances and attach/detach automatically.\n */\nvar SheetsManager =\n/*#__PURE__*/\nfunction () {\n  function SheetsManager() {\n    this.length = 0;\n    this.sheets = new WeakMap();\n  }\n\n  var _proto = SheetsManager.prototype;\n\n  _proto.get = function get(key) {\n    var entry = this.sheets.get(key);\n    return entry && entry.sheet;\n  };\n\n  _proto.add = function add(key, sheet) {\n    if (this.sheets.has(key)) return;\n    this.length++;\n    this.sheets.set(key, {\n      sheet: sheet,\n      refs: 0\n    });\n  };\n\n  _proto.manage = function manage(key) {\n    var entry = this.sheets.get(key);\n\n    if (entry) {\n      if (entry.refs === 0) {\n        entry.sheet.attach();\n      }\n\n      entry.refs++;\n      return entry.sheet;\n    }\n\n    Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"[JSS] SheetsManager: can't find sheet to manage\");\n    return undefined;\n  };\n\n  _proto.unmanage = function unmanage(key) {\n    var entry = this.sheets.get(key);\n\n    if (entry) {\n      if (entry.refs > 0) {\n        entry.refs--;\n        if (entry.refs === 0) entry.sheet.detach();\n      }\n    } else {\n      Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(false, \"SheetsManager: can't find sheet to unmanage\");\n    }\n  };\n\n  Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(SheetsManager, [{\n    key: \"size\",\n    get: function get() {\n      return this.length;\n    }\n  }]);\n\n  return SheetsManager;\n}();\n\n/**\n * A better abstraction over CSS.\n *\n * @copyright Oleg Isonen (Slobodskoi) / Isonen 2014-present\n * @website https://github.com/cssinjs/jss\n * @license MIT\n */\n\n/**\n * Export a constant indicating if this browser has CSSTOM support.\n * https://developers.google.com/web/updates/2018/03/cssom\n */\nvar hasCSSTOMSupport = typeof CSS !== 'undefined' && CSS && 'number' in CSS;\n/**\n * Creates a new instance of Jss.\n */\n\nvar create = function create(options) {\n  return new Jss(options);\n};\n/**\n * A global Jss instance.\n */\n\nvar index = create();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/jss/dist/jss.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/mini-create-react-context/dist/esm/index.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/mini-create-react-context/dist/esm/index.js ***!
+  \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n\n\n\n\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n  var key = '__global_unique_id__';\n  return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nfunction createEventEmitter(value) {\n  var handlers = [];\n  return {\n    on: function on(handler) {\n      handlers.push(handler);\n    },\n    off: function off(handler) {\n      handlers = handlers.filter(function (h) {\n        return h !== handler;\n      });\n    },\n    get: function get() {\n      return value;\n    },\n    set: function set(newValue, changedBits) {\n      value = newValue;\n      handlers.forEach(function (handler) {\n        return handler(value, changedBits);\n      });\n    }\n  };\n}\n\nfunction onlyChild(children) {\n  return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n  var _Provider$childContex, _Consumer$contextType;\n\n  var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n  var Provider = /*#__PURE__*/function (_Component) {\n    Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Provider, _Component);\n\n    function Provider() {\n      var _this;\n\n      _this = _Component.apply(this, arguments) || this;\n      _this.emitter = createEventEmitter(_this.props.value);\n      return _this;\n    }\n\n    var _proto = Provider.prototype;\n\n    _proto.getChildContext = function getChildContext() {\n      var _ref;\n\n      return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      if (this.props.value !== nextProps.value) {\n        var oldValue = this.props.value;\n        var newValue = nextProps.value;\n        var changedBits;\n\n        if (objectIs(oldValue, newValue)) {\n          changedBits = 0;\n        } else {\n          changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n          if (true) {\n            Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n          }\n\n          changedBits |= 0;\n\n          if (changedBits !== 0) {\n            this.emitter.set(nextProps.value, changedBits);\n          }\n        }\n      }\n    };\n\n    _proto.render = function render() {\n      return this.props.children;\n    };\n\n    return Provider;\n  }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n  Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object.isRequired, _Provider$childContex);\n\n  var Consumer = /*#__PURE__*/function (_Component2) {\n    Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Consumer, _Component2);\n\n    function Consumer() {\n      var _this2;\n\n      _this2 = _Component2.apply(this, arguments) || this;\n      _this2.state = {\n        value: _this2.getValue()\n      };\n\n      _this2.onUpdate = function (newValue, changedBits) {\n        var observedBits = _this2.observedBits | 0;\n\n        if ((observedBits & changedBits) !== 0) {\n          _this2.setState({\n            value: _this2.getValue()\n          });\n        }\n      };\n\n      return _this2;\n    }\n\n    var _proto2 = Consumer.prototype;\n\n    _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var observedBits = nextProps.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentDidMount = function componentDidMount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].on(this.onUpdate);\n      }\n\n      var observedBits = this.props.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentWillUnmount = function componentWillUnmount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].off(this.onUpdate);\n      }\n    };\n\n    _proto2.getValue = function getValue() {\n      if (this.context[contextProp]) {\n        return this.context[contextProp].get();\n      } else {\n        return defaultValue;\n      }\n    };\n\n    _proto2.render = function render() {\n      return onlyChild(this.props.children)(this.state.value);\n    };\n\n    return Consumer;\n  }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n  Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, _Consumer$contextType);\n  return {\n    Provider: Provider,\n    Consumer: Consumer\n  };\n}\n\nvar index = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext || createReactContext;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/mini-create-react-context/dist/esm/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/ms/index.js":
+/*!**********************************************!*\
+  !*** ./jaas-client/node_modules/ms/index.js ***!
+  \**********************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/ms/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/object-assign/index.js":
+/*!*********************************************************!*\
+  !*** ./jaas-client/node_modules/object-assign/index.js ***!
+  \*********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/object-assign/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/parseqs/index.js":
+/*!***************************************************!*\
+  !*** ./jaas-client/node_modules/parseqs/index.js ***!
+  \***************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/parseqs/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/parseuri/index.js":
+/*!****************************************************!*\
+  !*** ./jaas-client/node_modules/parseuri/index.js ***!
+  \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/parseuri/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/path-to-regexp/index.js":
+/*!**********************************************************!*\
+  !*** ./jaas-client/node_modules/path-to-regexp/index.js ***!
+  \**********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("var isarray = __webpack_require__(/*! isarray */ \"./jaas-client/node_modules/isarray/index.js\")\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = options && options.delimiter || '/'\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      continue\n    }\n\n    var next = str[index]\n    var prefix = res[2]\n    var name = res[3]\n    var capture = res[4]\n    var group = res[5]\n    var modifier = res[6]\n    var asterisk = res[7]\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n    }\n\n    var partial = prefix != null && next != null && next !== prefix\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var delimiter = res[2] || defaultDelimiter\n    var pattern = capture || group\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n    })\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index)\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path)\n  }\n\n  return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n    }\n  }\n\n  return function (obj, opts) {\n    var path = ''\n    var data = obj || {}\n    var options = opts || {}\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n\n        continue\n      }\n\n      var value = data[token.name]\n      var segment\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j])\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      })\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  var strict = options.strict\n  var end = options.end !== false\n  var route = ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var prefix = escapeString(token.prefix)\n      var capture = '(?:' + token.pattern + ')'\n\n      keys.push(token)\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*'\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?'\n        } else {\n          capture = prefix + '(' + capture + ')?'\n        }\n      } else {\n        capture = prefix + '(' + capture + ')'\n      }\n\n      route += capture\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/')\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n  }\n\n  if (end) {\n    route += '$'\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/path-to-regexp/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/prop-types/checkPropTypes.js":
+/*!***************************************************************!*\
+  !*** ./jaas-client/node_modules/prop-types/checkPropTypes.js ***!
+  \***************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar printWarning = function() {};\n\nif (true) {\n  var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n  var loggedTypeFailures = {};\n  var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n  if (true) {\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error;\n        // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            var err = Error(\n              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n            );\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error && !(error instanceof Error)) {\n          printWarning(\n            (componentName || 'React class') + ': type specification of ' +\n            location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n            'You may have forgotten to pass an argument to the type checker ' +\n            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n            'shape all require an argument).'\n          );\n        }\n        if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error.message] = true;\n\n          var stack = getStack ? getStack() : '';\n\n          printWarning(\n            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n  if (true) {\n    loggedTypeFailures = {};\n  }\n}\n\nmodule.exports = checkPropTypes;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/prop-types/checkPropTypes.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/prop-types/factoryWithTypeCheckers.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/prop-types/factoryWithTypeCheckers.js ***!
+  \************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactIs = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\nvar assign = __webpack_require__(/*! object-assign */ \"./jaas-client/node_modules/object-assign/index.js\");\n\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js\");\nvar checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ \"./jaas-client/node_modules/prop-types/checkPropTypes.js\");\n\nvar has = Function.call.bind(Object.prototype.hasOwnProperty);\nvar printWarning = function() {};\n\nif (true) {\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n  return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n  /* global Symbol */\n  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n  /**\n   * Returns the iterator method function contained on the iterable object.\n   *\n   * Be sure to invoke the function with the iterable as context:\n   *\n   *     var iteratorFn = getIteratorFn(myIterable);\n   *     if (iteratorFn) {\n   *       var iterator = iteratorFn.call(myIterable);\n   *       ...\n   *     }\n   *\n   * @param {?object} maybeIterable\n   * @return {?function}\n   */\n  function getIteratorFn(maybeIterable) {\n    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  /**\n   * Collection of methods that allow declaration and validation of props that are\n   * supplied to React components. Example usage:\n   *\n   *   var Props = require('ReactPropTypes');\n   *   var MyArticle = React.createClass({\n   *     propTypes: {\n   *       // An optional string prop named \"description\".\n   *       description: Props.string,\n   *\n   *       // A required enum prop named \"category\".\n   *       category: Props.oneOf(['News','Photos']).isRequired,\n   *\n   *       // A prop named \"dialog\" that requires an instance of Dialog.\n   *       dialog: Props.instanceOf(Dialog).isRequired\n   *     },\n   *     render: function() { ... }\n   *   });\n   *\n   * A more formal specification of how these methods are used:\n   *\n   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n   *   decl := ReactPropTypes.{type}(.isRequired)?\n   *\n   * Each and every declaration produces a function with the same signature. This\n   * allows the creation of custom validation functions. For example:\n   *\n   *  var MyLink = React.createClass({\n   *    propTypes: {\n   *      // An optional string or URI prop named \"href\".\n   *      href: function(props, propName, componentName) {\n   *        var propValue = props[propName];\n   *        if (propValue != null && typeof propValue !== 'string' &&\n   *            !(propValue instanceof URI)) {\n   *          return new Error(\n   *            'Expected a string or an URI for ' + propName + ' in ' +\n   *            componentName\n   *          );\n   *        }\n   *      }\n   *    },\n   *    render: function() {...}\n   *  });\n   *\n   * @internal\n   */\n\n  var ANONYMOUS = '<<anonymous>>';\n\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n  var ReactPropTypes = {\n    array: createPrimitiveTypeChecker('array'),\n    bool: createPrimitiveTypeChecker('boolean'),\n    func: createPrimitiveTypeChecker('function'),\n    number: createPrimitiveTypeChecker('number'),\n    object: createPrimitiveTypeChecker('object'),\n    string: createPrimitiveTypeChecker('string'),\n    symbol: createPrimitiveTypeChecker('symbol'),\n\n    any: createAnyTypeChecker(),\n    arrayOf: createArrayOfTypeChecker,\n    element: createElementTypeChecker(),\n    elementType: createElementTypeTypeChecker(),\n    instanceOf: createInstanceTypeChecker,\n    node: createNodeChecker(),\n    objectOf: createObjectOfTypeChecker,\n    oneOf: createEnumTypeChecker,\n    oneOfType: createUnionTypeChecker,\n    shape: createShapeTypeChecker,\n    exact: createStrictShapeTypeChecker,\n  };\n\n  /**\n   * inlined Object.is polyfill to avoid requiring consumers ship their own\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n   */\n  /*eslint-disable no-self-compare*/\n  function is(x, y) {\n    // SameValue algorithm\n    if (x === y) {\n      // Steps 1-5, 7-10\n      // Steps 6.b-6.e: +0 != -0\n      return x !== 0 || 1 / x === 1 / y;\n    } else {\n      // Step 6.a: NaN == NaN\n      return x !== x && y !== y;\n    }\n  }\n  /*eslint-enable no-self-compare*/\n\n  /**\n   * We use an Error-like object for backward compatibility as people may call\n   * PropTypes directly and inspect their output. However, we don't use real\n   * Errors anymore. We don't inspect their stack anyway, and creating them\n   * is prohibitively expensive if they are created too often, such as what\n   * happens in oneOfType() for any type before the one that matched.\n   */\n  function PropTypeError(message) {\n    this.message = message;\n    this.stack = '';\n  }\n  // Make `instanceof Error` still work for returned errors.\n  PropTypeError.prototype = Error.prototype;\n\n  function createChainableTypeChecker(validate) {\n    if (true) {\n      var manualPropTypeCallCache = {};\n      var manualPropTypeWarningCount = 0;\n    }\n    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n      componentName = componentName || ANONYMOUS;\n      propFullName = propFullName || propName;\n\n      if (secret !== ReactPropTypesSecret) {\n        if (throwOnDirectAccess) {\n          // New behavior only for users of `prop-types` package\n          var err = new Error(\n            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n            'Use `PropTypes.checkPropTypes()` to call them. ' +\n            'Read more at http://fb.me/use-check-prop-types'\n          );\n          err.name = 'Invariant Violation';\n          throw err;\n        } else if ( true && typeof console !== 'undefined') {\n          // Old behavior for people using React.PropTypes\n          var cacheKey = componentName + ':' + propName;\n          if (\n            !manualPropTypeCallCache[cacheKey] &&\n            // Avoid spamming the console because they are often not actionable except for lib authors\n            manualPropTypeWarningCount < 3\n          ) {\n            printWarning(\n              'You are manually calling a React.PropTypes validation ' +\n              'function for the `' + propFullName + '` prop on `' + componentName  + '`. This is deprecated ' +\n              'and will throw in the standalone `prop-types` package. ' +\n              'You may be seeing this warning due to a third-party PropTypes ' +\n              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n            );\n            manualPropTypeCallCache[cacheKey] = true;\n            manualPropTypeWarningCount++;\n          }\n        }\n      }\n      if (props[propName] == null) {\n        if (isRequired) {\n          if (props[propName] === null) {\n            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n          }\n          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n        }\n        return null;\n      } else {\n        return validate(props, propName, componentName, location, propFullName);\n      }\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n\n    return chainedCheckType;\n  }\n\n  function createPrimitiveTypeChecker(expectedType) {\n    function validate(props, propName, componentName, location, propFullName, secret) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== expectedType) {\n        // `propValue` being instance of, say, date/regexp, pass the 'object'\n        // check, but we can offer a more precise error message here rather than\n        // 'of type `object`'.\n        var preciseType = getPreciseType(propValue);\n\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createAnyTypeChecker() {\n    return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n  }\n\n  function createArrayOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n      }\n      var propValue = props[propName];\n      if (!Array.isArray(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n      }\n      for (var i = 0; i < propValue.length; i++) {\n        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!isValidElement(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!ReactIs.isValidElementType(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createInstanceTypeChecker(expectedClass) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!(props[propName] instanceof expectedClass)) {\n        var expectedClassName = expectedClass.name || ANONYMOUS;\n        var actualClassName = getClassName(props[propName]);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createEnumTypeChecker(expectedValues) {\n    if (!Array.isArray(expectedValues)) {\n      if (true) {\n        if (arguments.length > 1) {\n          printWarning(\n            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n          );\n        } else {\n          printWarning('Invalid argument supplied to oneOf, expected an array.');\n        }\n      }\n      return emptyFunctionThatReturnsNull;\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      for (var i = 0; i < expectedValues.length; i++) {\n        if (is(propValue, expectedValues[i])) {\n          return null;\n        }\n      }\n\n      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n        var type = getPreciseType(value);\n        if (type === 'symbol') {\n          return String(value);\n        }\n        return value;\n      });\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createObjectOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n      }\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n      }\n      for (var key in propValue) {\n        if (has(propValue, key)) {\n          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n          if (error instanceof Error) {\n            return error;\n          }\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createUnionTypeChecker(arrayOfTypeCheckers) {\n    if (!Array.isArray(arrayOfTypeCheckers)) {\n       true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : undefined;\n      return emptyFunctionThatReturnsNull;\n    }\n\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (typeof checker !== 'function') {\n        printWarning(\n          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n        );\n        return emptyFunctionThatReturnsNull;\n      }\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n        var checker = arrayOfTypeCheckers[i];\n        if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n          return null;\n        }\n      }\n\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createNodeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!isNode(props[propName])) {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      for (var key in shapeTypes) {\n        var checker = shapeTypes[key];\n        if (!checker) {\n          continue;\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createStrictShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      // We need to check all keys in case some are required but missing from\n      // props.\n      var allKeys = assign({}, props[propName], shapeTypes);\n      for (var key in allKeys) {\n        var checker = shapeTypes[key];\n        if (!checker) {\n          return new PropTypeError(\n            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n            '\\nBad object: ' + JSON.stringify(props[propName], null, '  ') +\n            '\\nValid keys: ' +  JSON.stringify(Object.keys(shapeTypes), null, '  ')\n          );\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n\n    return createChainableTypeChecker(validate);\n  }\n\n  function isNode(propValue) {\n    switch (typeof propValue) {\n      case 'number':\n      case 'string':\n      case 'undefined':\n        return true;\n      case 'boolean':\n        return !propValue;\n      case 'object':\n        if (Array.isArray(propValue)) {\n          return propValue.every(isNode);\n        }\n        if (propValue === null || isValidElement(propValue)) {\n          return true;\n        }\n\n        var iteratorFn = getIteratorFn(propValue);\n        if (iteratorFn) {\n          var iterator = iteratorFn.call(propValue);\n          var step;\n          if (iteratorFn !== propValue.entries) {\n            while (!(step = iterator.next()).done) {\n              if (!isNode(step.value)) {\n                return false;\n              }\n            }\n          } else {\n            // Iterator will provide entry [k,v] tuples rather than values.\n            while (!(step = iterator.next()).done) {\n              var entry = step.value;\n              if (entry) {\n                if (!isNode(entry[1])) {\n                  return false;\n                }\n              }\n            }\n          }\n        } else {\n          return false;\n        }\n\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  function isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === 'symbol') {\n      return true;\n    }\n\n    // falsy value can't be a Symbol\n    if (!propValue) {\n      return false;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue['@@toStringTag'] === 'Symbol') {\n      return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n      return true;\n    }\n\n    return false;\n  }\n\n  // Equivalent of `typeof` but with special handling for array and regexp.\n  function getPropType(propValue) {\n    var propType = typeof propValue;\n    if (Array.isArray(propValue)) {\n      return 'array';\n    }\n    if (propValue instanceof RegExp) {\n      // Old webkits (at least until Android 4.0) return 'function' rather than\n      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n      // passes PropTypes.object.\n      return 'object';\n    }\n    if (isSymbol(propType, propValue)) {\n      return 'symbol';\n    }\n    return propType;\n  }\n\n  // This handles more types than `getPropType`. Only used for error messages.\n  // See `createPrimitiveTypeChecker`.\n  function getPreciseType(propValue) {\n    if (typeof propValue === 'undefined' || propValue === null) {\n      return '' + propValue;\n    }\n    var propType = getPropType(propValue);\n    if (propType === 'object') {\n      if (propValue instanceof Date) {\n        return 'date';\n      } else if (propValue instanceof RegExp) {\n        return 'regexp';\n      }\n    }\n    return propType;\n  }\n\n  // Returns a string that is postfixed to a warning about an invalid type.\n  // For example, \"undefined\" or \"of type array\"\n  function getPostfixForTypeWarning(value) {\n    var type = getPreciseType(value);\n    switch (type) {\n      case 'array':\n      case 'object':\n        return 'an ' + type;\n      case 'boolean':\n      case 'date':\n      case 'regexp':\n        return 'a ' + type;\n      default:\n        return type;\n    }\n  }\n\n  // Returns class name of the object, if any.\n  function getClassName(propValue) {\n    if (!propValue.constructor || !propValue.constructor.name) {\n      return ANONYMOUS;\n    }\n    return propValue.constructor.name;\n  }\n\n  ReactPropTypes.checkPropTypes = checkPropTypes;\n  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/prop-types/factoryWithTypeCheckers.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/prop-types/index.js":
+/*!******************************************************!*\
+  !*** ./jaas-client/node_modules/prop-types/index.js ***!
+  \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (true) {\n  var ReactIs = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ \"./jaas-client/node_modules/prop-types/factoryWithTypeCheckers.js\")(ReactIs.isElement, throwOnDirectAccess);\n} else {}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/prop-types/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
+  \*************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/prop-types/lib/ReactPropTypesSecret.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-dom/cjs/react-dom.development.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-dom/cjs/react-dom.development.js ***!
+  \*************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/** @license React v16.13.1\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\nvar _assign = __webpack_require__(/*! object-assign */ \"./jaas-client/node_modules/object-assign/index.js\");\nvar Scheduler = __webpack_require__(/*! scheduler */ \"./jaas-client/node_modules/scheduler/index.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./jaas-client/node_modules/prop-types/checkPropTypes.js\");\nvar tracing = __webpack_require__(/*! scheduler/tracing */ \"./jaas-client/node_modules/scheduler/tracing.js\");\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.\n// Current owner and dispatcher used to share the same ref,\n// but PR #14548 split them out to better support the react-debug-tools package.\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n  ReactSharedInternals.ReactCurrentDispatcher = {\n    current: null\n  };\n}\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {\n  ReactSharedInternals.ReactCurrentBatchConfig = {\n    suspense: null\n  };\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    printWarning('warn', format, args);\n  }\n}\nfunction error(format) {\n  {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    printWarning('error', format, args);\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n    in') === 0;\n\n    if (!hasExistingStack) {\n      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n      var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n      if (stack !== '') {\n        format += '%s';\n        args = args.concat([stack]);\n      }\n    }\n\n    var argsWithFormat = args.map(function (item) {\n      return '' + item;\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      throw new Error(message);\n    } catch (x) {}\n  }\n}\n\nif (!React) {\n  {\n    throw Error( \"ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.\" );\n  }\n}\n\nvar invokeGuardedCallbackImpl = function (name, func, context, a, b, c, d, e, f) {\n  var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n  try {\n    func.apply(context, funcArgs);\n  } catch (error) {\n    this.onError(error);\n  }\n};\n\n{\n  // In DEV mode, we swap out invokeGuardedCallback for a special version\n  // that plays more nicely with the browser's DevTools. The idea is to preserve\n  // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n  // functions in invokeGuardedCallback, and the production version of\n  // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n  // like caught exceptions, and the DevTools won't pause unless the developer\n  // takes the extra step of enabling pause on caught exceptions. This is\n  // unintuitive, though, because even though React has caught the error, from\n  // the developer's perspective, the error is uncaught.\n  //\n  // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n  // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n  // DOM node, and call the user-provided callback from inside an event handler\n  // for that fake event. If the callback throws, the error is \"captured\" using\n  // a global event handler. But because the error happens in a different\n  // event loop context, it does not interrupt the normal program flow.\n  // Effectively, this gives us try-catch behavior without actually using\n  // try-catch. Neat!\n  // Check that the browser supports the APIs we need to implement our special\n  // DEV version of invokeGuardedCallback\n  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n    var fakeNode = document.createElement('react');\n\n    var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n      // If document doesn't exist we know for sure we will crash in this method\n      // when we call document.createEvent(). However this can cause confusing\n      // errors: https://github.com/facebookincubator/create-react-app/issues/3482\n      // So we preemptively throw with a better message instead.\n      if (!(typeof document !== 'undefined')) {\n        {\n          throw Error( \"The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.\" );\n        }\n      }\n\n      var evt = document.createEvent('Event'); // Keeps track of whether the user-provided callback threw an error. We\n      // set this to true at the beginning, then set it to false right after\n      // calling the function. If the function errors, `didError` will never be\n      // set to false. This strategy works even if the browser is flaky and\n      // fails to call our global error handler, because it doesn't rely on\n      // the error event at all.\n\n      var didError = true; // Keeps track of the value of window.event so that we can reset it\n      // during the callback to let user code access window.event in the\n      // browsers that support it.\n\n      var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n      // dispatching: https://github.com/facebook/react/issues/13688\n\n      var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event'); // Create an event handler for our fake event. We will synchronously\n      // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n      // call the user-provided callback.\n\n      var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n      function callCallback() {\n        // We immediately remove the callback from event listeners so that\n        // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n        // nested call would trigger the fake event handlers of any call higher\n        // in the stack.\n        fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n        // window.event assignment in both IE <= 10 as they throw an error\n        // \"Member not found\" in strict mode, and in Firefox which does not\n        // support window.event.\n\n        if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n          window.event = windowEvent;\n        }\n\n        func.apply(context, funcArgs);\n        didError = false;\n      } // Create a global error event handler. We use this to capture the value\n      // that was thrown. It's possible that this error handler will fire more\n      // than once; for example, if non-React code also calls `dispatchEvent`\n      // and a handler for that event throws. We should be resilient to most of\n      // those cases. Even if our error event handler fires more than once, the\n      // last error event is always used. If the callback actually does error,\n      // we know that the last error event is the correct one, because it's not\n      // possible for anything else to have happened in between our callback\n      // erroring and the code that follows the `dispatchEvent` call below. If\n      // the callback doesn't error, but the error event was fired, we know to\n      // ignore it because `didError` will be false, as described above.\n\n\n      var error; // Use this to track whether the error event is ever called.\n\n      var didSetError = false;\n      var isCrossOriginError = false;\n\n      function handleWindowError(event) {\n        error = event.error;\n        didSetError = true;\n\n        if (error === null && event.colno === 0 && event.lineno === 0) {\n          isCrossOriginError = true;\n        }\n\n        if (event.defaultPrevented) {\n          // Some other error handler has prevented default.\n          // Browsers silence the error report if this happens.\n          // We'll remember this to later decide whether to log it or not.\n          if (error != null && typeof error === 'object') {\n            try {\n              error._suppressLogging = true;\n            } catch (inner) {// Ignore.\n            }\n          }\n        }\n      } // Create a fake event type.\n\n\n      var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n      window.addEventListener('error', handleWindowError);\n      fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n      // errors, it will trigger our global error handler.\n\n      evt.initEvent(evtType, false, false);\n      fakeNode.dispatchEvent(evt);\n\n      if (windowEventDescriptor) {\n        Object.defineProperty(window, 'event', windowEventDescriptor);\n      }\n\n      if (didError) {\n        if (!didSetError) {\n          // The callback errored, but the error event never fired.\n          error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n        } else if (isCrossOriginError) {\n          error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n        }\n\n        this.onError(error);\n      } // Remove our event listeners\n\n\n      window.removeEventListener('error', handleWindowError);\n    };\n\n    invokeGuardedCallbackImpl = invokeGuardedCallbackDev;\n  }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n  onError: function (error) {\n    hasError = true;\n    caughtError = error;\n  }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n  hasError = false;\n  caughtError = null;\n  invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n  invokeGuardedCallback.apply(this, arguments);\n\n  if (hasError) {\n    var error = clearCaughtError();\n\n    if (!hasRethrowError) {\n      hasRethrowError = true;\n      rethrowError = error;\n    }\n  }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n  if (hasRethrowError) {\n    var error = rethrowError;\n    hasRethrowError = false;\n    rethrowError = null;\n    throw error;\n  }\n}\nfunction hasCaughtError() {\n  return hasError;\n}\nfunction clearCaughtError() {\n  if (hasError) {\n    var error = caughtError;\n    hasError = false;\n    caughtError = null;\n    return error;\n  } else {\n    {\n      {\n        throw Error( \"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n  }\n}\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\nfunction setComponentTree(getFiberCurrentPropsFromNodeImpl, getInstanceFromNodeImpl, getNodeFromInstanceImpl) {\n  getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNodeImpl;\n  getInstanceFromNode = getInstanceFromNodeImpl;\n  getNodeFromInstance = getNodeFromInstanceImpl;\n\n  {\n    if (!getNodeFromInstance || !getInstanceFromNode) {\n      error('EventPluginUtils.setComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.');\n    }\n  }\n}\nvar validateEventDispatches;\n\n{\n  validateEventDispatches = function (event) {\n    var dispatchListeners = event._dispatchListeners;\n    var dispatchInstances = event._dispatchInstances;\n    var listenersIsArr = Array.isArray(dispatchListeners);\n    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n    var instancesIsArr = Array.isArray(dispatchInstances);\n    var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n    if (instancesIsArr !== listenersIsArr || instancesLen !== listenersLen) {\n      error('EventPluginUtils: Invalid `event`.');\n    }\n  };\n}\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\n\n\nfunction executeDispatch(event, listener, inst) {\n  var type = event.type || 'unknown-event';\n  event.currentTarget = getNodeFromInstance(inst);\n  invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n  event.currentTarget = null;\n}\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\n\nfunction executeDispatchesInOrder(event) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchInstances = event._dispatchInstances;\n\n  {\n    validateEventDispatches(event);\n  }\n\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      } // Listeners and Instances are two parallel arrays that are always in sync.\n\n\n      executeDispatch(event, dispatchListeners[i], dispatchInstances[i]);\n    }\n  } else if (dispatchListeners) {\n    executeDispatch(event, dispatchListeners, dispatchInstances);\n  }\n\n  event._dispatchListeners = null;\n  event._dispatchInstances = null;\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar FundamentalComponent = 20;\nvar ScopeComponent = 21;\nvar Block = 22;\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n/**\n * Injectable mapping from names to event plugin modules.\n */\n\nvar namesToPlugins = {};\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\n\nfunction recomputePluginOrdering() {\n  if (!eventPluginOrder) {\n    // Wait until an `eventPluginOrder` is injected.\n    return;\n  }\n\n  for (var pluginName in namesToPlugins) {\n    var pluginModule = namesToPlugins[pluginName];\n    var pluginIndex = eventPluginOrder.indexOf(pluginName);\n\n    if (!(pluginIndex > -1)) {\n      {\n        throw Error( \"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" + pluginName + \"`.\" );\n      }\n    }\n\n    if (plugins[pluginIndex]) {\n      continue;\n    }\n\n    if (!pluginModule.extractEvents) {\n      {\n        throw Error( \"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" + pluginName + \"` does not.\" );\n      }\n    }\n\n    plugins[pluginIndex] = pluginModule;\n    var publishedEvents = pluginModule.eventTypes;\n\n    for (var eventName in publishedEvents) {\n      if (!publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName)) {\n        {\n          throw Error( \"EventPluginRegistry: Failed to publish event `\" + eventName + \"` for plugin `\" + pluginName + \"`.\" );\n        }\n      }\n    }\n  }\n}\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\n\n\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n  if (!!eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n    {\n      throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same event name, `\" + eventName + \"`.\" );\n    }\n  }\n\n  eventNameDispatchConfigs[eventName] = dispatchConfig;\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n\n  if (phasedRegistrationNames) {\n    for (var phaseName in phasedRegistrationNames) {\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\n        publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n      }\n    }\n\n    return true;\n  } else if (dispatchConfig.registrationName) {\n    publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n    return true;\n  }\n\n  return false;\n}\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\n\n\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n  if (!!registrationNameModules[registrationName]) {\n    {\n      throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same registration name, `\" + registrationName + \"`.\" );\n    }\n  }\n\n  registrationNameModules[registrationName] = pluginModule;\n  registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n  {\n    var lowerCasedName = registrationName.toLowerCase();\n    possibleRegistrationNames[lowerCasedName] = registrationName;\n\n    if (registrationName === 'onDoubleClick') {\n      possibleRegistrationNames.ondblclick = registrationName;\n    }\n  }\n}\n/**\n * Registers plugins so that they can extract and dispatch events.\n */\n\n/**\n * Ordered list of injected plugins.\n */\n\n\nvar plugins = [];\n/**\n * Mapping from event name to dispatch config\n */\n\nvar eventNameDispatchConfigs = {};\n/**\n * Mapping from registration name to plugin module\n */\n\nvar registrationNameModules = {};\n/**\n * Mapping from registration name to event name\n */\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames =  {} ; // Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n */\n\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n  if (!!eventPluginOrder) {\n    {\n      throw Error( \"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\" );\n    }\n  } // Clone the ordering so it cannot be dynamically mutated.\n\n\n  eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n  recomputePluginOrdering();\n}\n/**\n * Injects plugins to be used by plugin event system. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n */\n\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n  var isOrderingDirty = false;\n\n  for (var pluginName in injectedNamesToPlugins) {\n    if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n      continue;\n    }\n\n    var pluginModule = injectedNamesToPlugins[pluginName];\n\n    if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n      if (!!namesToPlugins[pluginName]) {\n        {\n          throw Error( \"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" + pluginName + \"`.\" );\n        }\n      }\n\n      namesToPlugins[pluginName] = pluginModule;\n      isOrderingDirty = true;\n    }\n  }\n\n  if (isOrderingDirty) {\n    recomputePluginOrdering();\n  }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar PLUGIN_EVENT_SYSTEM = 1;\nvar IS_REPLAYED = 1 << 5;\nvar IS_FIRST_ANCESTOR = 1 << 6;\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n  // We perform this translation at the end of the event loop so that we\n  // always receive the correct fiber here\n  var internalInstance = getInstanceFromNode(target);\n\n  if (!internalInstance) {\n    // Unmounted\n    return;\n  }\n\n  if (!(typeof restoreImpl === 'function')) {\n    {\n      throw Error( \"setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n\n  var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n  if (stateNode) {\n    var _props = getFiberCurrentPropsFromNode(stateNode);\n\n    restoreImpl(internalInstance.stateNode, internalInstance.type, _props);\n  }\n}\n\nfunction setRestoreImplementation(impl) {\n  restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n  if (restoreTarget) {\n    if (restoreQueue) {\n      restoreQueue.push(target);\n    } else {\n      restoreQueue = [target];\n    }\n  } else {\n    restoreTarget = target;\n  }\n}\nfunction needsStateRestore() {\n  return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n  if (!restoreTarget) {\n    return;\n  }\n\n  var target = restoreTarget;\n  var queuedTargets = restoreQueue;\n  restoreTarget = null;\n  restoreQueue = null;\n  restoreStateOfTarget(target);\n\n  if (queuedTargets) {\n    for (var i = 0; i < queuedTargets.length; i++) {\n      restoreStateOfTarget(queuedTargets[i]);\n    }\n  }\n}\n\nvar enableProfilerTimer = true; // Trace which interactions trigger each commit.\n\nvar enableDeprecatedFlareAPI = false; // Experimental Host Component support.\n\nvar enableFundamentalAPI = false; // Experimental Scope support.\nvar warnAboutStringRefs = false;\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n  return fn(bookkeeping);\n};\n\nvar discreteUpdatesImpl = function (fn, a, b, c, d) {\n  return fn(a, b, c, d);\n};\n\nvar flushDiscreteUpdatesImpl = function () {};\n\nvar batchedEventUpdatesImpl = batchedUpdatesImpl;\nvar isInsideEventHandler = false;\nvar isBatchingEventUpdates = false;\n\nfunction finishEventHandler() {\n  // Here we wait until all updates have propagated, which is important\n  // when using controlled components within layers:\n  // https://github.com/facebook/react/issues/1698\n  // Then we restore state of any controlled component.\n  var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n  if (controlledComponentsHavePendingUpdates) {\n    // If a controlled event was fired, we may need to restore the state of\n    // the DOM node back to the controlled value. This is necessary when React\n    // bails out of the update without touching the DOM.\n    flushDiscreteUpdatesImpl();\n    restoreStateIfNeeded();\n  }\n}\n\nfunction batchedUpdates(fn, bookkeeping) {\n  if (isInsideEventHandler) {\n    // If we are currently inside another batch, we need to wait until it\n    // fully completes before restoring state.\n    return fn(bookkeeping);\n  }\n\n  isInsideEventHandler = true;\n\n  try {\n    return batchedUpdatesImpl(fn, bookkeeping);\n  } finally {\n    isInsideEventHandler = false;\n    finishEventHandler();\n  }\n}\nfunction batchedEventUpdates(fn, a, b) {\n  if (isBatchingEventUpdates) {\n    // If we are currently inside another batch, we need to wait until it\n    // fully completes before restoring state.\n    return fn(a, b);\n  }\n\n  isBatchingEventUpdates = true;\n\n  try {\n    return batchedEventUpdatesImpl(fn, a, b);\n  } finally {\n    isBatchingEventUpdates = false;\n    finishEventHandler();\n  }\n} // This is for the React Flare event system\nfunction discreteUpdates(fn, a, b, c, d) {\n  var prevIsInsideEventHandler = isInsideEventHandler;\n  isInsideEventHandler = true;\n\n  try {\n    return discreteUpdatesImpl(fn, a, b, c, d);\n  } finally {\n    isInsideEventHandler = prevIsInsideEventHandler;\n\n    if (!isInsideEventHandler) {\n      finishEventHandler();\n    }\n  }\n}\nfunction flushDiscreteUpdatesIfNeeded(timeStamp) {\n  // event.timeStamp isn't overly reliable due to inconsistencies in\n  // how different browsers have historically provided the time stamp.\n  // Some browsers provide high-resolution time stamps for all events,\n  // some provide low-resolution time stamps for all events. FF < 52\n  // even mixes both time stamps together. Some browsers even report\n  // negative time stamps or time stamps that are 0 (iOS9) in some cases.\n  // Given we are only comparing two time stamps with equality (!==),\n  // we are safe from the resolution differences. If the time stamp is 0\n  // we bail-out of preventing the flush, which can affect semantics,\n  // such as if an earlier flush removes or adds event listeners that\n  // are fired in the subsequent flush. However, this is the same\n  // behaviour as we had before this change, so the risks are low.\n  if (!isInsideEventHandler && (!enableDeprecatedFlareAPI  )) {\n    flushDiscreteUpdatesImpl();\n  }\n}\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) {\n  batchedUpdatesImpl = _batchedUpdatesImpl;\n  discreteUpdatesImpl = _discreteUpdatesImpl;\n  flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl;\n  batchedEventUpdatesImpl = _batchedEventUpdatesImpl;\n}\n\nvar DiscreteEvent = 0;\nvar UserBlockingEvent = 1;\nvar ContinuousEvent = 2;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the whitelist are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar 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\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar ROOT_ATTRIBUTE_NAME = 'data-reactroot';\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n    return true;\n  }\n\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n    return false;\n  }\n\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n\n  illegalAttributeNameCache[attributeName] = true;\n\n  {\n    error('Invalid attribute name: `%s`', attributeName);\n  }\n\n  return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n  if (propertyInfo !== null) {\n    return propertyInfo.type === RESERVED;\n  }\n\n  if (isCustomComponentTag) {\n    return false;\n  }\n\n  if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n    return true;\n  }\n\n  return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n  if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n    return false;\n  }\n\n  switch (typeof value) {\n    case 'function': // $FlowIssue symbol is perfectly valid here\n\n    case 'symbol':\n      // eslint-disable-line\n      return true;\n\n    case 'boolean':\n      {\n        if (isCustomComponentTag) {\n          return false;\n        }\n\n        if (propertyInfo !== null) {\n          return !propertyInfo.acceptsBooleans;\n        } else {\n          var prefix = name.toLowerCase().slice(0, 5);\n          return prefix !== 'data-' && prefix !== 'aria-';\n        }\n      }\n\n    default:\n      return false;\n  }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n  if (value === null || typeof value === 'undefined') {\n    return true;\n  }\n\n  if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n    return true;\n  }\n\n  if (isCustomComponentTag) {\n    return false;\n  }\n\n  if (propertyInfo !== null) {\n    switch (propertyInfo.type) {\n      case BOOLEAN:\n        return !value;\n\n      case OVERLOADED_BOOLEAN:\n        return value === false;\n\n      case NUMERIC:\n        return isNaN(value);\n\n      case POSITIVE_NUMERIC:\n        return isNaN(value) || value < 1;\n    }\n  }\n\n  return false;\n}\nfunction getPropertyInfo(name) {\n  return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {\n  this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n  this.attributeName = attributeName;\n  this.attributeNamespace = attributeNamespace;\n  this.mustUseProperty = mustUseProperty;\n  this.propertyName = name;\n  this.type = type;\n  this.sanitizeURL = sanitizeURL;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n  var name = _ref[0],\n      attributeName = _ref[1];\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n  return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML whitelist.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['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,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, null, // attributeNamespace\n  false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/1999/xlink', false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/XML/1998/namespace', false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  true);\n});\n\nvar ReactDebugCurrentFrame = null;\n\n{\n  ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n} // A javascript: URL can contain leading C0 control or \\u0020 SPACE,\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\n\nvar 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;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n  {\n    if (!didWarn && isJavaScriptProtocol.test(url)) {\n      didWarn = true;\n\n      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));\n    }\n  }\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n  {\n    if (propertyInfo.mustUseProperty) {\n      var propertyName = propertyInfo.propertyName;\n      return node[propertyName];\n    } else {\n      if ( propertyInfo.sanitizeURL) {\n        // If we haven't fully disabled javascript: URLs, and if\n        // the hydration is successful of a javascript: URL, we\n        // still want to warn on the client.\n        sanitizeURL('' + expected);\n      }\n\n      var attributeName = propertyInfo.attributeName;\n      var stringValue = null;\n\n      if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n        if (node.hasAttribute(attributeName)) {\n          var value = node.getAttribute(attributeName);\n\n          if (value === '') {\n            return true;\n          }\n\n          if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n            return value;\n          }\n\n          if (value === '' + expected) {\n            return expected;\n          }\n\n          return value;\n        }\n      } else if (node.hasAttribute(attributeName)) {\n        if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n          // We had an attribute but shouldn't have had one, so read it\n          // for the error message.\n          return node.getAttribute(attributeName);\n        }\n\n        if (propertyInfo.type === BOOLEAN) {\n          // If this was a boolean, it doesn't matter what the value is\n          // the fact that we have it is the same as the expected.\n          return expected;\n        } // Even if this property uses a namespace we use getAttribute\n        // because we assume its namespaced name is the same as our config.\n        // To use getAttributeNS we need the local name which we don't have\n        // in our config atm.\n\n\n        stringValue = node.getAttribute(attributeName);\n      }\n\n      if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n        return stringValue === null ? expected : stringValue;\n      } else if (stringValue === '' + expected) {\n        return expected;\n      } else {\n        return stringValue;\n      }\n    }\n  }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected) {\n  {\n    if (!isAttributeNameSafe(name)) {\n      return;\n    }\n\n    if (!node.hasAttribute(name)) {\n      return expected === undefined ? undefined : null;\n    }\n\n    var value = node.getAttribute(name);\n\n    if (value === '' + expected) {\n      return expected;\n    }\n\n    return value;\n  }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n  var propertyInfo = getPropertyInfo(name);\n\n  if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n    return;\n  }\n\n  if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n    value = null;\n  } // If the prop isn't in the special list, treat it as a simple attribute.\n\n\n  if (isCustomComponentTag || propertyInfo === null) {\n    if (isAttributeNameSafe(name)) {\n      var _attributeName = name;\n\n      if (value === null) {\n        node.removeAttribute(_attributeName);\n      } else {\n        node.setAttribute(_attributeName,  '' + value);\n      }\n    }\n\n    return;\n  }\n\n  var mustUseProperty = propertyInfo.mustUseProperty;\n\n  if (mustUseProperty) {\n    var propertyName = propertyInfo.propertyName;\n\n    if (value === null) {\n      var type = propertyInfo.type;\n      node[propertyName] = type === BOOLEAN ? false : '';\n    } else {\n      // Contrary to `setAttribute`, object properties are properly\n      // `toString`ed by IE8/9.\n      node[propertyName] = value;\n    }\n\n    return;\n  } // The rest are treated as attributes with special cases.\n\n\n  var attributeName = propertyInfo.attributeName,\n      attributeNamespace = propertyInfo.attributeNamespace;\n\n  if (value === null) {\n    node.removeAttribute(attributeName);\n  } else {\n    var _type = propertyInfo.type;\n    var attributeValue;\n\n    if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n      // If attribute type is boolean, we know for sure it won't be an execution sink\n      // and we won't require Trusted Type here.\n      attributeValue = '';\n    } else {\n      // `setAttribute` with objects becomes only `[object]` in IE8/9,\n      // ('' + value) makes it output the correct toString()-value.\n      {\n        attributeValue = '' + value;\n      }\n\n      if (propertyInfo.sanitizeURL) {\n        sanitizeURL(attributeValue.toString());\n      }\n    }\n\n    if (attributeNamespace) {\n      node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n    } else {\n      node.setAttribute(attributeName, attributeValue);\n    }\n  }\n}\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n  var sourceInfo = '';\n\n  if (source) {\n    var path = source.fileName;\n    var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n    {\n      // In DEV, include code for a common special case:\n      // prefer \"folder/index.js\" instead of just \"index.js\".\n      if (/^index\\./.test(fileName)) {\n        var match = path.match(BEFORE_SLASH_RE);\n\n        if (match) {\n          var pathBeforeSlash = match[1];\n\n          if (pathBeforeSlash) {\n            var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n            fileName = folderName + '/' + fileName;\n          }\n        }\n      }\n    }\n\n    sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n  } else if (ownerName) {\n    sourceInfo = ' (created by ' + ownerName + ')';\n  }\n\n  return '\\n    in ' + (name || 'Unknown') + sourceInfo;\n}\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\nfunction refineResolvedLazyComponent(lazyComponent) {\n  return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\nfunction initializeLazyComponentType(lazyComponent) {\n  if (lazyComponent._status === Uninitialized) {\n    lazyComponent._status = Pending;\n    var ctor = lazyComponent._ctor;\n    var thenable = ctor();\n    lazyComponent._result = thenable;\n    thenable.then(function (moduleObject) {\n      if (lazyComponent._status === Pending) {\n        var defaultExport = moduleObject.default;\n\n        {\n          if (defaultExport === undefined) {\n            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);\n          }\n        }\n\n        lazyComponent._status = Resolved;\n        lazyComponent._result = defaultExport;\n      }\n    }, function (error) {\n      if (lazyComponent._status === Pending) {\n        lazyComponent._status = Rejected;\n        lazyComponent._result = error;\n      }\n    });\n  }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var functionName = innerType.displayName || innerType.name || '';\n  return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        return 'Context.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        return 'Context.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        return getComponentName(type.type);\n\n      case REACT_BLOCK_TYPE:\n        return getComponentName(type.render);\n\n      case REACT_LAZY_TYPE:\n        {\n          var thenable = type;\n          var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n          if (resolvedThenable) {\n            return getComponentName(resolvedThenable);\n          }\n\n          break;\n        }\n    }\n  }\n\n  return null;\n}\n\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction describeFiber(fiber) {\n  switch (fiber.tag) {\n    case HostRoot:\n    case HostPortal:\n    case HostText:\n    case Fragment:\n    case ContextProvider:\n    case ContextConsumer:\n      return '';\n\n    default:\n      var owner = fiber._debugOwner;\n      var source = fiber._debugSource;\n      var name = getComponentName(fiber.type);\n      var ownerName = null;\n\n      if (owner) {\n        ownerName = getComponentName(owner.type);\n      }\n\n      return describeComponentFrame(name, source, ownerName);\n  }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  var info = '';\n  var node = workInProgress;\n\n  do {\n    info += describeFiber(node);\n    node = node.return;\n  } while (node);\n\n  return info;\n}\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n  {\n    if (current === null) {\n      return null;\n    }\n\n    var owner = current._debugOwner;\n\n    if (owner !== null && typeof owner !== 'undefined') {\n      return getComponentName(owner.type);\n    }\n  }\n\n  return null;\n}\nfunction getCurrentFiberStackInDev() {\n  {\n    if (current === null) {\n      return '';\n    } // Safe because if current fiber exists, we are reconciling,\n    // and it is guaranteed to be the work-in-progress version.\n\n\n    return getStackByFiberInDevAndProd(current);\n  }\n}\nfunction resetCurrentFiber() {\n  {\n    ReactDebugCurrentFrame$1.getCurrentStack = null;\n    current = null;\n    isRendering = false;\n  }\n}\nfunction setCurrentFiber(fiber) {\n  {\n    ReactDebugCurrentFrame$1.getCurrentStack = getCurrentFiberStackInDev;\n    current = fiber;\n    isRendering = false;\n  }\n}\nfunction setIsRendering(rendering) {\n  {\n    isRendering = rendering;\n  }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n  return '' + value;\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case 'boolean':\n    case 'number':\n    case 'object':\n    case 'string':\n    case 'undefined':\n      return value;\n\n    default:\n      // function, symbol are assigned as empty strings\n      return '';\n  }\n}\n\nvar ReactDebugCurrentFrame$2 = null;\nvar ReactControlledValuePropTypes = {\n  checkPropTypes: null\n};\n\n{\n  ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n  var hasReadOnlyValue = {\n    button: true,\n    checkbox: true,\n    image: true,\n    hidden: true,\n    radio: true,\n    reset: true,\n    submit: true\n  };\n  var propTypes = {\n    value: function (props, propName, componentName) {\n      if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n        return null;\n      }\n\n      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`.');\n    },\n    checked: function (props, propName, componentName) {\n      if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n        return null;\n      }\n\n      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`.');\n    }\n  };\n  /**\n   * Provide a linked `value` attribute for controlled forms. You should not use\n   * this outside of the ReactDOM controlled form components.\n   */\n\n  ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n    checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$2.getStackAddendum);\n  };\n}\n\nfunction isCheckable(elem) {\n  var type = elem.type;\n  var nodeName = elem.nodeName;\n  return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n  return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n  node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n  var value = '';\n\n  if (!node) {\n    return value;\n  }\n\n  if (isCheckable(node)) {\n    value = node.checked ? 'true' : 'false';\n  } else {\n    value = node.value;\n  }\n\n  return value;\n}\n\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? 'checked' : 'value';\n  var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n  var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n  // and don't track value will cause over reporting of changes,\n  // but it's better then a hard failure\n  // (needed for certain tests that spyOn input values and Safari)\n\n  if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n    return;\n  }\n\n  var get = descriptor.get,\n      set = descriptor.set;\n  Object.defineProperty(node, valueField, {\n    configurable: true,\n    get: function () {\n      return get.call(this);\n    },\n    set: function (value) {\n      currentValue = '' + value;\n      set.call(this, value);\n    }\n  }); // We could've passed this the first time\n  // but it triggers a bug in IE11 and Edge 14/15.\n  // Calling defineProperty() again should be equivalent.\n  // https://github.com/facebook/react/issues/11768\n\n  Object.defineProperty(node, valueField, {\n    enumerable: descriptor.enumerable\n  });\n  var tracker = {\n    getValue: function () {\n      return currentValue;\n    },\n    setValue: function (value) {\n      currentValue = '' + value;\n    },\n    stopTracking: function () {\n      detachTracker(node);\n      delete node[valueField];\n    }\n  };\n  return tracker;\n}\n\nfunction track(node) {\n  if (getTracker(node)) {\n    return;\n  } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n  node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n  if (!node) {\n    return false;\n  }\n\n  var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n  // that trying again will succeed\n\n  if (!tracker) {\n    return true;\n  }\n\n  var lastValue = tracker.getValue();\n  var nextValue = getValueFromNode(node);\n\n  if (nextValue !== lastValue) {\n    tracker.setValue(nextValue);\n    return true;\n  }\n\n  return false;\n}\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n  var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n  return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n  var node = element;\n  var checked = props.checked;\n\n  var hostProps = _assign({}, props, {\n    defaultChecked: undefined,\n    defaultValue: undefined,\n    value: undefined,\n    checked: checked != null ? checked : node._wrapperState.initialChecked\n  });\n\n  return hostProps;\n}\nfunction initWrapperState(element, props) {\n  {\n    ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n    if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n      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', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n      didWarnCheckedDefaultChecked = true;\n    }\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n      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', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n      didWarnValueDefaultValue = true;\n    }\n  }\n\n  var node = element;\n  var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n  node._wrapperState = {\n    initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n    initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n    controlled: isControlled(props)\n  };\n}\nfunction updateChecked(element, props) {\n  var node = element;\n  var checked = props.checked;\n\n  if (checked != null) {\n    setValueForProperty(node, 'checked', checked, false);\n  }\n}\nfunction updateWrapper(element, props) {\n  var node = element;\n\n  {\n    var controlled = isControlled(props);\n\n    if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n      error('A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n      didWarnUncontrolledToControlled = true;\n    }\n\n    if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n      error('A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n      didWarnControlledToUncontrolled = true;\n    }\n  }\n\n  updateChecked(element, props);\n  var value = getToStringValue(props.value);\n  var type = props.type;\n\n  if (value != null) {\n    if (type === 'number') {\n      if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n      // eslint-disable-next-line\n      node.value != value) {\n        node.value = toString(value);\n      }\n    } else if (node.value !== toString(value)) {\n      node.value = toString(value);\n    }\n  } else if (type === 'submit' || type === 'reset') {\n    // Submit/reset inputs need the attribute removed completely to avoid\n    // blank-text buttons.\n    node.removeAttribute('value');\n    return;\n  }\n\n  {\n    // When syncing the value attribute, the value comes from a cascade of\n    // properties:\n    //  1. The value React property\n    //  2. The defaultValue React property\n    //  3. Otherwise there should be no change\n    if (props.hasOwnProperty('value')) {\n      setDefaultValue(node, props.type, value);\n    } else if (props.hasOwnProperty('defaultValue')) {\n      setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n    }\n  }\n\n  {\n    // When syncing the checked attribute, it only changes when it needs\n    // to be removed, such as transitioning from a checkbox into a text input\n    if (props.checked == null && props.defaultChecked != null) {\n      node.defaultChecked = !!props.defaultChecked;\n    }\n  }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n  var node = element; // Do not assign value if it is already set. This prevents user text input\n  // from being lost during SSR hydration.\n\n  if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n    var type = props.type;\n    var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n    // default value provided by the browser. See: #12872\n\n    if (isButton && (props.value === undefined || props.value === null)) {\n      return;\n    }\n\n    var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n    // from being lost during SSR hydration.\n\n    if (!isHydrating) {\n      {\n        // When syncing the value attribute, the value property should use\n        // the wrapperState._initialValue property. This uses:\n        //\n        //   1. The value React property when present\n        //   2. The defaultValue React property when present\n        //   3. An empty string\n        if (initialValue !== node.value) {\n          node.value = initialValue;\n        }\n      }\n    }\n\n    {\n      // Otherwise, the value attribute is synchronized to the property,\n      // so we assign defaultValue to the same thing as the value property\n      // assignment step above.\n      node.defaultValue = initialValue;\n    }\n  } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n  // this is needed to work around a chrome bug where setting defaultChecked\n  // will sometimes influence the value of checked (even after detachment).\n  // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n  // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n  var name = node.name;\n\n  if (name !== '') {\n    node.name = '';\n  }\n\n  {\n    // When syncing the checked attribute, both the checked property and\n    // attribute are assigned at the same time using defaultChecked. This uses:\n    //\n    //   1. The checked React property when present\n    //   2. The defaultChecked React property when present\n    //   3. Otherwise, false\n    node.defaultChecked = !node.defaultChecked;\n    node.defaultChecked = !!node._wrapperState.initialChecked;\n  }\n\n  if (name !== '') {\n    node.name = name;\n  }\n}\nfunction restoreControlledState(element, props) {\n  var node = element;\n  updateWrapper(node, props);\n  updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n  var name = props.name;\n\n  if (props.type === 'radio' && name != null) {\n    var queryRoot = rootNode;\n\n    while (queryRoot.parentNode) {\n      queryRoot = queryRoot.parentNode;\n    } // If `rootNode.form` was non-null, then we could try `form.elements`,\n    // but that sometimes behaves strangely in IE8. We could also try using\n    // `form.getElementsByName`, but that will only return direct children\n    // and won't include inputs that use the HTML5 `form=` attribute. Since\n    // the input might not even be in a form. It might not even be in the\n    // document. Let's just use the local `querySelectorAll` to ensure we don't\n    // miss anything.\n\n\n    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n    for (var i = 0; i < group.length; i++) {\n      var otherNode = group[i];\n\n      if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n        continue;\n      } // This will throw if radio buttons rendered by different copies of React\n      // and the same name are rendered into the same form (same as #1939).\n      // That's probably okay; we don't support it just as we don't support\n      // mixing React radio buttons with non-React ones.\n\n\n      var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n\n      if (!otherProps) {\n        {\n          throw Error( \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\" );\n        }\n      } // We need update the tracked value on the named cousin since the value\n      // was changed but the input saw no event or value set\n\n\n      updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n      // was previously checked to update will cause it to be come re-checked\n      // as appropriate.\n\n      updateWrapper(otherNode, otherProps);\n    }\n  }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value <x> is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n  if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n  type !== 'number' || node.ownerDocument.activeElement !== node) {\n    if (value == null) {\n      node.defaultValue = toString(node._wrapperState.initialValue);\n    } else if (node.defaultValue !== toString(value)) {\n      node.defaultValue = toString(value);\n    }\n  }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n  var content = ''; // Flatten children. We'll warn if they are invalid\n  // during validateProps() which runs for hydration too.\n  // Note that this would throw on non-element objects.\n  // Elements are stringified (which is normally irrelevant\n  // but matters for <fbt>).\n\n  React.Children.forEach(children, function (child) {\n    if (child == null) {\n      return;\n    }\n\n    content += child; // Note: we don't warn about invalid children here.\n    // Instead, this is done separately below so that\n    // it happens during the hydration codepath too.\n  });\n  return content;\n}\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\n\n\nfunction validateProps(element, props) {\n  {\n    // This mirrors the codepath above, but runs for hydration too.\n    // Warn about invalid children here so that client and hydration are consistent.\n    // TODO: this seems like it could cause a DEV-only throw for hydration\n    // if children contains a non-element object. We should try to avoid that.\n    if (typeof props.children === 'object' && props.children !== null) {\n      React.Children.forEach(props.children, function (child) {\n        if (child == null) {\n          return;\n        }\n\n        if (typeof child === 'string' || typeof child === 'number') {\n          return;\n        }\n\n        if (typeof child.type !== 'string') {\n          return;\n        }\n\n        if (!didWarnInvalidChild) {\n          didWarnInvalidChild = true;\n\n          error('Only strings and numbers are supported as <option> children.');\n        }\n      });\n    } // TODO: Remove support for `selected` in <option>.\n\n\n    if (props.selected != null && !didWarnSelectedSetOnOption) {\n      error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n      didWarnSelectedSetOnOption = true;\n    }\n  }\n}\nfunction postMountWrapper$1(element, props) {\n  // value=\"\" should make a value attribute (#6219)\n  if (props.value != null) {\n    element.setAttribute('value', toString(getToStringValue(props.value)));\n  }\n}\nfunction getHostProps$1(element, props) {\n  var hostProps = _assign({\n    children: undefined\n  }, props);\n\n  var content = flattenChildren(props.children);\n\n  if (content) {\n    hostProps.children = content;\n  }\n\n  return hostProps;\n}\n\nvar didWarnValueDefaultValue$1;\n\n{\n  didWarnValueDefaultValue$1 = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n  var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n  if (ownerName) {\n    return '\\n\\nCheck the render method of `' + ownerName + '`.';\n  }\n\n  return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n/**\n * Validation function for `value` and `defaultValue`.\n */\n\nfunction checkSelectPropTypes(props) {\n  {\n    ReactControlledValuePropTypes.checkPropTypes('select', props);\n\n    for (var i = 0; i < valuePropNames.length; i++) {\n      var propName = valuePropNames[i];\n\n      if (props[propName] == null) {\n        continue;\n      }\n\n      var isArray = Array.isArray(props[propName]);\n\n      if (props.multiple && !isArray) {\n        error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n      } else if (!props.multiple && isArray) {\n        error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n      }\n    }\n  }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  var options = node.options;\n\n  if (multiple) {\n    var selectedValues = propValue;\n    var selectedValue = {};\n\n    for (var i = 0; i < selectedValues.length; i++) {\n      // Prefix to avoid chaos with special keys.\n      selectedValue['$' + selectedValues[i]] = true;\n    }\n\n    for (var _i = 0; _i < options.length; _i++) {\n      var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n\n      if (options[_i].selected !== selected) {\n        options[_i].selected = selected;\n      }\n\n      if (selected && setDefaultSelected) {\n        options[_i].defaultSelected = true;\n      }\n    }\n  } else {\n    // Do not set `select.value` as exact behavior isn't consistent across all\n    // browsers for all cases.\n    var _selectedValue = toString(getToStringValue(propValue));\n\n    var defaultSelected = null;\n\n    for (var _i2 = 0; _i2 < options.length; _i2++) {\n      if (options[_i2].value === _selectedValue) {\n        options[_i2].selected = true;\n\n        if (setDefaultSelected) {\n          options[_i2].defaultSelected = true;\n        }\n\n        return;\n      }\n\n      if (defaultSelected === null && !options[_i2].disabled) {\n        defaultSelected = options[_i2];\n      }\n    }\n\n    if (defaultSelected !== null) {\n      defaultSelected.selected = true;\n    }\n  }\n}\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\n\nfunction getHostProps$2(element, props) {\n  return _assign({}, props, {\n    value: undefined\n  });\n}\nfunction initWrapperState$1(element, props) {\n  var node = element;\n\n  {\n    checkSelectPropTypes(props);\n  }\n\n  node._wrapperState = {\n    wasMultiple: !!props.multiple\n  };\n\n  {\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n      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');\n\n      didWarnValueDefaultValue$1 = true;\n    }\n  }\n}\nfunction postMountWrapper$2(element, props) {\n  var node = element;\n  node.multiple = !!props.multiple;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  } else if (props.defaultValue != null) {\n    updateOptions(node, !!props.multiple, props.defaultValue, true);\n  }\n}\nfunction postUpdateWrapper(element, props) {\n  var node = element;\n  var wasMultiple = node._wrapperState.wasMultiple;\n  node._wrapperState.wasMultiple = !!props.multiple;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  } else if (wasMultiple !== !!props.multiple) {\n    // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n    if (props.defaultValue != null) {\n      updateOptions(node, !!props.multiple, props.defaultValue, true);\n    } else {\n      // Revert the select back to its default unselected state.\n      updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);\n    }\n  }\n}\nfunction restoreControlledState$1(element, props) {\n  var node = element;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  }\n}\n\nvar didWarnValDefaultVal = false;\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nfunction getHostProps$3(element, props) {\n  var node = element;\n\n  if (!(props.dangerouslySetInnerHTML == null)) {\n    {\n      throw Error( \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\" );\n    }\n  } // Always set children to the same thing. In IE9, the selection range will\n  // get reset if `textContent` is mutated.  We could add a check in setTextContent\n  // to only set the value if/when the value differs from the node value (which would\n  // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this\n  // solution. The value can be a boolean or object so that's why it's forced\n  // to be a string.\n\n\n  var hostProps = _assign({}, props, {\n    value: undefined,\n    defaultValue: undefined,\n    children: toString(node._wrapperState.initialValue)\n  });\n\n  return hostProps;\n}\nfunction initWrapperState$2(element, props) {\n  var node = element;\n\n  {\n    ReactControlledValuePropTypes.checkPropTypes('textarea', props);\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n      error('%s contains a textarea with both value and defaultValue props. ' + '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', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n\n      didWarnValDefaultVal = true;\n    }\n  }\n\n  var initialValue = props.value; // Only bother fetching default value if we're going to use it\n\n  if (initialValue == null) {\n    var children = props.children,\n        defaultValue = props.defaultValue;\n\n    if (children != null) {\n      {\n        error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n      }\n\n      {\n        if (!(defaultValue == null)) {\n          {\n            throw Error( \"If you supply `defaultValue` on a <textarea>, do not pass children.\" );\n          }\n        }\n\n        if (Array.isArray(children)) {\n          if (!(children.length <= 1)) {\n            {\n              throw Error( \"<textarea> can only have at most one child.\" );\n            }\n          }\n\n          children = children[0];\n        }\n\n        defaultValue = children;\n      }\n    }\n\n    if (defaultValue == null) {\n      defaultValue = '';\n    }\n\n    initialValue = defaultValue;\n  }\n\n  node._wrapperState = {\n    initialValue: getToStringValue(initialValue)\n  };\n}\nfunction updateWrapper$1(element, props) {\n  var node = element;\n  var value = getToStringValue(props.value);\n  var defaultValue = getToStringValue(props.defaultValue);\n\n  if (value != null) {\n    // Cast `value` to a string to ensure the value is set correctly. While\n    // browsers typically do this as necessary, jsdom doesn't.\n    var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed\n\n    if (newValue !== node.value) {\n      node.value = newValue;\n    }\n\n    if (props.defaultValue == null && node.defaultValue !== newValue) {\n      node.defaultValue = newValue;\n    }\n  }\n\n  if (defaultValue != null) {\n    node.defaultValue = toString(defaultValue);\n  }\n}\nfunction postMountWrapper$3(element, props) {\n  var node = element; // This is in postMount because we need access to the DOM node, which is not\n  // available until after the component has mounted.\n\n  var textContent = node.textContent; // Only set node.value if textContent is equal to the expected\n  // initial value. In IE10/IE11 there is a bug where the placeholder attribute\n  // will populate textContent as well.\n  // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/\n\n  if (textContent === node._wrapperState.initialValue) {\n    if (textContent !== '' && textContent !== null) {\n      node.value = textContent;\n    }\n  }\n}\nfunction restoreControlledState$2(element, props) {\n  // DOM component is still mounted; update\n  updateWrapper$1(element, props);\n}\n\nvar HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nvar MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nvar Namespaces = {\n  html: HTML_NAMESPACE,\n  mathml: MATH_NAMESPACE,\n  svg: SVG_NAMESPACE\n}; // Assumes there is no parent namespace.\n\nfunction getIntrinsicNamespace(type) {\n  switch (type) {\n    case 'svg':\n      return SVG_NAMESPACE;\n\n    case 'math':\n      return MATH_NAMESPACE;\n\n    default:\n      return HTML_NAMESPACE;\n  }\n}\nfunction getChildNamespace(parentNamespace, type) {\n  if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {\n    // No (or default) parent namespace: potential entry point.\n    return getIntrinsicNamespace(type);\n  }\n\n  if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {\n    // We're leaving SVG.\n    return HTML_NAMESPACE;\n  } // By default, pass namespace below.\n\n\n  return parentNamespace;\n}\n\n/* globals MSApp */\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n  if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n    return function (arg0, arg1, arg2, arg3) {\n      MSApp.execUnsafeLocalFunction(function () {\n        return func(arg0, arg1, arg2, arg3);\n      });\n    };\n  } else {\n    return func;\n  }\n};\n\nvar reusableSVGContainer;\n/**\n * Set the innerHTML property of a node\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\n\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n  if (node.namespaceURI === Namespaces.svg) {\n\n    if (!('innerHTML' in node)) {\n      // IE does not have innerHTML for SVG nodes, so instead we inject the\n      // new markup in a temp node and then move the child nodes across into\n      // the target node\n      reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n      reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';\n      var svgNode = reusableSVGContainer.firstChild;\n\n      while (node.firstChild) {\n        node.removeChild(node.firstChild);\n      }\n\n      while (svgNode.firstChild) {\n        node.appendChild(svgNode.firstChild);\n      }\n\n      return;\n    }\n  }\n\n  node.innerHTML = html;\n});\n\n/**\n * HTML nodeType values that represent the type of the node\n */\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Set the textContent property of a node. For text updates, it's faster\n * to set the `nodeValue` of the Text node directly instead of using\n * `.textContent` which will remove the existing node and create a new one.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\n\nvar setTextContent = function (node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n\n    if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n\n  node.textContent = text;\n};\n\n// Do not use the below two methods directly!\n// Instead use constants exported from DOMTopLevelEventTypes in ReactDOM.\n// (It is the only module that is allowed to access these methods.)\nfunction unsafeCastStringToDOMTopLevelType(topLevelType) {\n  return topLevelType;\n}\nfunction unsafeCastDOMTopLevelTypeToString(topLevelType) {\n  return topLevelType;\n}\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\n\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n  prefixes['Moz' + styleProp] = 'moz' + eventName;\n  return prefixes;\n}\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\n\n\nvar vendorPrefixes = {\n  animationend: makePrefixMap('Animation', 'AnimationEnd'),\n  animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n  animationstart: makePrefixMap('Animation', 'AnimationStart'),\n  transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\n\nvar prefixedEventNames = {};\n/**\n * Element to check for prefixes on.\n */\n\nvar style = {};\n/**\n * Bootstrap if a DOM exists.\n */\n\nif (canUseDOM) {\n  style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,\n  // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n  // style object but the events that fire will still be prefixed, so we need\n  // to check if the un-prefixed events are usable, and if not remove them from the map.\n\n  if (!('AnimationEvent' in window)) {\n    delete vendorPrefixes.animationend.animation;\n    delete vendorPrefixes.animationiteration.animation;\n    delete vendorPrefixes.animationstart.animation;\n  } // Same as above\n\n\n  if (!('TransitionEvent' in window)) {\n    delete vendorPrefixes.transitionend.transition;\n  }\n}\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\n\n\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  } else if (!vendorPrefixes[eventName]) {\n    return eventName;\n  }\n\n  var prefixMap = vendorPrefixes[eventName];\n\n  for (var styleProp in prefixMap) {\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n      return prefixedEventNames[eventName] = prefixMap[styleProp];\n    }\n  }\n\n  return eventName;\n}\n\n/**\n * To identify top level events in ReactDOM, we use constants defined by this\n * module. This is the only module that uses the unsafe* methods to express\n * that the constants actually correspond to the browser event names. This lets\n * us save some bundle size by avoiding a top level type -> event name map.\n * The rest of ReactDOM code should import top level types from this file.\n */\n\nvar TOP_ABORT = unsafeCastStringToDOMTopLevelType('abort');\nvar TOP_ANIMATION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationend'));\nvar TOP_ANIMATION_ITERATION = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationiteration'));\nvar TOP_ANIMATION_START = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationstart'));\nvar TOP_BLUR = unsafeCastStringToDOMTopLevelType('blur');\nvar TOP_CAN_PLAY = unsafeCastStringToDOMTopLevelType('canplay');\nvar TOP_CAN_PLAY_THROUGH = unsafeCastStringToDOMTopLevelType('canplaythrough');\nvar TOP_CANCEL = unsafeCastStringToDOMTopLevelType('cancel');\nvar TOP_CHANGE = unsafeCastStringToDOMTopLevelType('change');\nvar TOP_CLICK = unsafeCastStringToDOMTopLevelType('click');\nvar TOP_CLOSE = unsafeCastStringToDOMTopLevelType('close');\nvar TOP_COMPOSITION_END = unsafeCastStringToDOMTopLevelType('compositionend');\nvar TOP_COMPOSITION_START = unsafeCastStringToDOMTopLevelType('compositionstart');\nvar TOP_COMPOSITION_UPDATE = unsafeCastStringToDOMTopLevelType('compositionupdate');\nvar TOP_CONTEXT_MENU = unsafeCastStringToDOMTopLevelType('contextmenu');\nvar TOP_COPY = unsafeCastStringToDOMTopLevelType('copy');\nvar TOP_CUT = unsafeCastStringToDOMTopLevelType('cut');\nvar TOP_DOUBLE_CLICK = unsafeCastStringToDOMTopLevelType('dblclick');\nvar TOP_AUX_CLICK = unsafeCastStringToDOMTopLevelType('auxclick');\nvar TOP_DRAG = unsafeCastStringToDOMTopLevelType('drag');\nvar TOP_DRAG_END = unsafeCastStringToDOMTopLevelType('dragend');\nvar TOP_DRAG_ENTER = unsafeCastStringToDOMTopLevelType('dragenter');\nvar TOP_DRAG_EXIT = unsafeCastStringToDOMTopLevelType('dragexit');\nvar TOP_DRAG_LEAVE = unsafeCastStringToDOMTopLevelType('dragleave');\nvar TOP_DRAG_OVER = unsafeCastStringToDOMTopLevelType('dragover');\nvar TOP_DRAG_START = unsafeCastStringToDOMTopLevelType('dragstart');\nvar TOP_DROP = unsafeCastStringToDOMTopLevelType('drop');\nvar TOP_DURATION_CHANGE = unsafeCastStringToDOMTopLevelType('durationchange');\nvar TOP_EMPTIED = unsafeCastStringToDOMTopLevelType('emptied');\nvar TOP_ENCRYPTED = unsafeCastStringToDOMTopLevelType('encrypted');\nvar TOP_ENDED = unsafeCastStringToDOMTopLevelType('ended');\nvar TOP_ERROR = unsafeCastStringToDOMTopLevelType('error');\nvar TOP_FOCUS = unsafeCastStringToDOMTopLevelType('focus');\nvar TOP_GOT_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('gotpointercapture');\nvar TOP_INPUT = unsafeCastStringToDOMTopLevelType('input');\nvar TOP_INVALID = unsafeCastStringToDOMTopLevelType('invalid');\nvar TOP_KEY_DOWN = unsafeCastStringToDOMTopLevelType('keydown');\nvar TOP_KEY_PRESS = unsafeCastStringToDOMTopLevelType('keypress');\nvar TOP_KEY_UP = unsafeCastStringToDOMTopLevelType('keyup');\nvar TOP_LOAD = unsafeCastStringToDOMTopLevelType('load');\nvar TOP_LOAD_START = unsafeCastStringToDOMTopLevelType('loadstart');\nvar TOP_LOADED_DATA = unsafeCastStringToDOMTopLevelType('loadeddata');\nvar TOP_LOADED_METADATA = unsafeCastStringToDOMTopLevelType('loadedmetadata');\nvar TOP_LOST_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('lostpointercapture');\nvar TOP_MOUSE_DOWN = unsafeCastStringToDOMTopLevelType('mousedown');\nvar TOP_MOUSE_MOVE = unsafeCastStringToDOMTopLevelType('mousemove');\nvar TOP_MOUSE_OUT = unsafeCastStringToDOMTopLevelType('mouseout');\nvar TOP_MOUSE_OVER = unsafeCastStringToDOMTopLevelType('mouseover');\nvar TOP_MOUSE_UP = unsafeCastStringToDOMTopLevelType('mouseup');\nvar TOP_PASTE = unsafeCastStringToDOMTopLevelType('paste');\nvar TOP_PAUSE = unsafeCastStringToDOMTopLevelType('pause');\nvar TOP_PLAY = unsafeCastStringToDOMTopLevelType('play');\nvar TOP_PLAYING = unsafeCastStringToDOMTopLevelType('playing');\nvar TOP_POINTER_CANCEL = unsafeCastStringToDOMTopLevelType('pointercancel');\nvar TOP_POINTER_DOWN = unsafeCastStringToDOMTopLevelType('pointerdown');\nvar TOP_POINTER_MOVE = unsafeCastStringToDOMTopLevelType('pointermove');\nvar TOP_POINTER_OUT = unsafeCastStringToDOMTopLevelType('pointerout');\nvar TOP_POINTER_OVER = unsafeCastStringToDOMTopLevelType('pointerover');\nvar TOP_POINTER_UP = unsafeCastStringToDOMTopLevelType('pointerup');\nvar TOP_PROGRESS = unsafeCastStringToDOMTopLevelType('progress');\nvar TOP_RATE_CHANGE = unsafeCastStringToDOMTopLevelType('ratechange');\nvar TOP_RESET = unsafeCastStringToDOMTopLevelType('reset');\nvar TOP_SCROLL = unsafeCastStringToDOMTopLevelType('scroll');\nvar TOP_SEEKED = unsafeCastStringToDOMTopLevelType('seeked');\nvar TOP_SEEKING = unsafeCastStringToDOMTopLevelType('seeking');\nvar TOP_SELECTION_CHANGE = unsafeCastStringToDOMTopLevelType('selectionchange');\nvar TOP_STALLED = unsafeCastStringToDOMTopLevelType('stalled');\nvar TOP_SUBMIT = unsafeCastStringToDOMTopLevelType('submit');\nvar TOP_SUSPEND = unsafeCastStringToDOMTopLevelType('suspend');\nvar TOP_TEXT_INPUT = unsafeCastStringToDOMTopLevelType('textInput');\nvar TOP_TIME_UPDATE = unsafeCastStringToDOMTopLevelType('timeupdate');\nvar TOP_TOGGLE = unsafeCastStringToDOMTopLevelType('toggle');\nvar TOP_TOUCH_CANCEL = unsafeCastStringToDOMTopLevelType('touchcancel');\nvar TOP_TOUCH_END = unsafeCastStringToDOMTopLevelType('touchend');\nvar TOP_TOUCH_MOVE = unsafeCastStringToDOMTopLevelType('touchmove');\nvar TOP_TOUCH_START = unsafeCastStringToDOMTopLevelType('touchstart');\nvar TOP_TRANSITION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('transitionend'));\nvar TOP_VOLUME_CHANGE = unsafeCastStringToDOMTopLevelType('volumechange');\nvar TOP_WAITING = unsafeCastStringToDOMTopLevelType('waiting');\nvar TOP_WHEEL = unsafeCastStringToDOMTopLevelType('wheel'); // List of events that need to be individually attached to media elements.\n// Note that events in this list will *not* be listened to at the top level\n// unless they're explicitly whitelisted in `ReactBrowserEventEmitter.listenTo`.\n\nvar mediaEventTypes = [TOP_ABORT, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_VOLUME_CHANGE, TOP_WAITING];\nfunction getRawEventName(topLevelType) {\n  return unsafeCastDOMTopLevelTypeToString(topLevelType);\n}\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // prettier-ignore\n\nvar elementListenerMap = new PossiblyWeakMap();\nfunction getListenerMapForElement(element) {\n  var listenerMap = elementListenerMap.get(element);\n\n  if (listenerMap === undefined) {\n    listenerMap = new Map();\n    elementListenerMap.set(element, listenerMap);\n  }\n\n  return listenerMap;\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n  return key._reactInternalFiber;\n}\nfunction has(key) {\n  return key._reactInternalFiber !== undefined;\n}\nfunction set(key, value) {\n  key._reactInternalFiber = value;\n}\n\n// Don't change these two values. They're used by React Dev Tools.\nvar NoEffect =\n/*              */\n0;\nvar PerformedWork =\n/*         */\n1; // You can change the rest (and add more).\n\nvar Placement =\n/*             */\n2;\nvar Update =\n/*                */\n4;\nvar PlacementAndUpdate =\n/*    */\n6;\nvar Deletion =\n/*              */\n8;\nvar ContentReset =\n/*          */\n16;\nvar Callback =\n/*              */\n32;\nvar DidCapture =\n/*            */\n64;\nvar Ref =\n/*                   */\n128;\nvar Snapshot =\n/*              */\n256;\nvar Passive =\n/*               */\n512;\nvar Hydrating =\n/*             */\n1024;\nvar HydratingAndUpdate =\n/*    */\n1028; // Passive & Update & Callback & Ref & Snapshot\n\nvar LifecycleEffectMask =\n/*   */\n932; // Union of all host effects\n\nvar HostEffectMask =\n/*        */\n2047;\nvar Incomplete =\n/*            */\n2048;\nvar ShouldCapture =\n/*         */\n4096;\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber;\n  var nearestMounted = fiber;\n\n  if (!fiber.alternate) {\n    // If there is no alternate, this might be a new tree that isn't inserted\n    // yet. If it is, then it will have a pending insertion effect on it.\n    var nextNode = node;\n\n    do {\n      node = nextNode;\n\n      if ((node.effectTag & (Placement | Hydrating)) !== NoEffect) {\n        // This is an insertion or in-progress hydration. The nearest possible\n        // mounted fiber is the parent but we need to continue to figure out\n        // if that one is still mounted.\n        nearestMounted = node.return;\n      }\n\n      nextNode = node.return;\n    } while (nextNode);\n  } else {\n    while (node.return) {\n      node = node.return;\n    }\n  }\n\n  if (node.tag === HostRoot) {\n    // TODO: Check if this was a nested HostRoot when used with\n    // renderContainerIntoSubtree.\n    return nearestMounted;\n  } // If we didn't hit the root, that means that we're in an disconnected tree\n  // that has been unmounted.\n\n\n  return null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (fiber.tag === SuspenseComponent) {\n    var suspenseState = fiber.memoizedState;\n\n    if (suspenseState === null) {\n      var current = fiber.alternate;\n\n      if (current !== null) {\n        suspenseState = current.memoizedState;\n      }\n    }\n\n    if (suspenseState !== null) {\n      return suspenseState.dehydrated;\n    }\n  }\n\n  return null;\n}\nfunction getContainerFromFiber(fiber) {\n  return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;\n}\nfunction isFiberMounted(fiber) {\n  return getNearestMountedFiber(fiber) === fiber;\n}\nfunction isMounted(component) {\n  {\n    var owner = ReactCurrentOwner.current;\n\n    if (owner !== null && owner.tag === ClassComponent) {\n      var ownerFiber = owner;\n      var instance = ownerFiber.stateNode;\n\n      if (!instance._warnedAboutRefsInRender) {\n        error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber.type) || 'A component');\n      }\n\n      instance._warnedAboutRefsInRender = true;\n    }\n  }\n\n  var fiber = get(component);\n\n  if (!fiber) {\n    return false;\n  }\n\n  return getNearestMountedFiber(fiber) === fiber;\n}\n\nfunction assertIsMounted(fiber) {\n  if (!(getNearestMountedFiber(fiber) === fiber)) {\n    {\n      throw Error( \"Unable to find node on an unmounted component.\" );\n    }\n  }\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n\n  if (!alternate) {\n    // If there is no alternate, then we only need to check if it is mounted.\n    var nearestMounted = getNearestMountedFiber(fiber);\n\n    if (!(nearestMounted !== null)) {\n      {\n        throw Error( \"Unable to find node on an unmounted component.\" );\n      }\n    }\n\n    if (nearestMounted !== fiber) {\n      return null;\n    }\n\n    return fiber;\n  } // If we have two possible branches, we'll walk backwards up to the root\n  // to see what path the root points to. On the way we may hit one of the\n  // special cases and we'll deal with them.\n\n\n  var a = fiber;\n  var b = alternate;\n\n  while (true) {\n    var parentA = a.return;\n\n    if (parentA === null) {\n      // We're at the root.\n      break;\n    }\n\n    var parentB = parentA.alternate;\n\n    if (parentB === null) {\n      // There is no alternate. This is an unusual case. Currently, it only\n      // happens when a Suspense component is hidden. An extra fragment fiber\n      // is inserted in between the Suspense fiber and its children. Skip\n      // over this extra fragment fiber and proceed to the next parent.\n      var nextParent = parentA.return;\n\n      if (nextParent !== null) {\n        a = b = nextParent;\n        continue;\n      } // If there's no parent, we're at the root.\n\n\n      break;\n    } // If both copies of the parent fiber point to the same child, we can\n    // assume that the child is current. This happens when we bailout on low\n    // priority: the bailed out fiber's child reuses the current child.\n\n\n    if (parentA.child === parentB.child) {\n      var child = parentA.child;\n\n      while (child) {\n        if (child === a) {\n          // We've determined that A is the current branch.\n          assertIsMounted(parentA);\n          return fiber;\n        }\n\n        if (child === b) {\n          // We've determined that B is the current branch.\n          assertIsMounted(parentA);\n          return alternate;\n        }\n\n        child = child.sibling;\n      } // We should never have an alternate for any mounting node. So the only\n      // way this could possibly happen is if this was unmounted, if at all.\n\n\n      {\n        {\n          throw Error( \"Unable to find node on an unmounted component.\" );\n        }\n      }\n    }\n\n    if (a.return !== b.return) {\n      // The return pointer of A and the return pointer of B point to different\n      // fibers. We assume that return pointers never criss-cross, so A must\n      // belong to the child set of A.return, and B must belong to the child\n      // set of B.return.\n      a = parentA;\n      b = parentB;\n    } else {\n      // The return pointers point to the same fiber. We'll have to use the\n      // default, slow path: scan the child sets of each parent alternate to see\n      // which child belongs to which set.\n      //\n      // Search parent A's child set\n      var didFindChild = false;\n      var _child = parentA.child;\n\n      while (_child) {\n        if (_child === a) {\n          didFindChild = true;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n\n        if (_child === b) {\n          didFindChild = true;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n\n        _child = _child.sibling;\n      }\n\n      if (!didFindChild) {\n        // Search parent B's child set\n        _child = parentB.child;\n\n        while (_child) {\n          if (_child === a) {\n            didFindChild = true;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n\n          if (_child === b) {\n            didFindChild = true;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n\n          _child = _child.sibling;\n        }\n\n        if (!didFindChild) {\n          {\n            throw Error( \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\" );\n          }\n        }\n      }\n    }\n\n    if (!(a.alternate === b)) {\n      {\n        throw Error( \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n  } // If the root is not a host container, we're in a disconnected tree. I.e.\n  // unmounted.\n\n\n  if (!(a.tag === HostRoot)) {\n    {\n      throw Error( \"Unable to find node on an unmounted component.\" );\n    }\n  }\n\n  if (a.stateNode.current === a) {\n    // We've determined that A is the current branch.\n    return fiber;\n  } // Otherwise B has to be current branch.\n\n\n  return alternate;\n}\nfunction findCurrentHostFiber(parent) {\n  var currentParent = findCurrentFiberUsingSlowPath(parent);\n\n  if (!currentParent) {\n    return null;\n  } // Next we'll drill down this component to find the first HostComponent/Text.\n\n\n  var node = currentParent;\n\n  while (true) {\n    if (node.tag === HostComponent || node.tag === HostText) {\n      return node;\n    } else if (node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === currentParent) {\n      return null;\n    }\n\n    while (!node.sibling) {\n      if (!node.return || node.return === currentParent) {\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  } // Flow needs the return null here, but ESLint complains about it.\n  // eslint-disable-next-line no-unreachable\n\n\n  return null;\n}\nfunction findCurrentHostFiberWithNoPortals(parent) {\n  var currentParent = findCurrentFiberUsingSlowPath(parent);\n\n  if (!currentParent) {\n    return null;\n  } // Next we'll drill down this component to find the first HostComponent/Text.\n\n\n  var node = currentParent;\n\n  while (true) {\n    if (node.tag === HostComponent || node.tag === HostText || enableFundamentalAPI ) {\n      return node;\n    } else if (node.child && node.tag !== HostPortal) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === currentParent) {\n      return null;\n    }\n\n    while (!node.sibling) {\n      if (!node.return || node.return === currentParent) {\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  } // Flow needs the return null here, but ESLint complains about it.\n  // eslint-disable-next-line no-unreachable\n\n\n  return null;\n}\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n  if (!(next != null)) {\n    {\n      throw Error( \"accumulateInto(...): Accumulated items must not be null or undefined.\" );\n    }\n  }\n\n  if (current == null) {\n    return next;\n  } // Both are not empty. Warning: Never call x.concat(y) when you are not\n  // certain that x is an Array (x could be a string with concat method).\n\n\n  if (Array.isArray(current)) {\n    if (Array.isArray(next)) {\n      current.push.apply(current, next);\n      return current;\n    }\n\n    current.push(next);\n    return current;\n  }\n\n  if (Array.isArray(next)) {\n    // A bit too dangerous to mutate `next`.\n    return [current].concat(next);\n  }\n\n  return [current, next];\n}\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n * @param {function} cb Callback invoked with each element or a collection.\n * @param {?} [scope] Scope used as `this` in a callback.\n */\nfunction forEachAccumulated(arr, cb, scope) {\n  if (Array.isArray(arr)) {\n    arr.forEach(cb, scope);\n  } else if (arr) {\n    cb.call(scope, arr);\n  }\n}\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\n\nvar eventQueue = null;\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @private\n */\n\nvar executeDispatchesAndRelease = function (event) {\n  if (event) {\n    executeDispatchesInOrder(event);\n\n    if (!event.isPersistent()) {\n      event.constructor.release(event);\n    }\n  }\n};\n\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n  return executeDispatchesAndRelease(e);\n};\n\nfunction runEventsInBatch(events) {\n  if (events !== null) {\n    eventQueue = accumulateInto(eventQueue, events);\n  } // Set `eventQueue` to null before processing it so that we can tell if more\n  // events get enqueued while processing.\n\n\n  var processingEventQueue = eventQueue;\n  eventQueue = null;\n\n  if (!processingEventQueue) {\n    return;\n  }\n\n  forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n\n  if (!!eventQueue) {\n    {\n      throw Error( \"processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.\" );\n    }\n  } // This would be a good time to rethrow if any of the event handlers threw.\n\n\n  rethrowCaughtError();\n}\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n  // Fallback to nativeEvent.srcElement for IE9\n  // https://github.com/facebook/react/issues/12506\n  var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963\n\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n  // @see http://www.quirksmode.org/js/events_properties.html\n\n\n  return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n\nfunction isEventSupported(eventNameSuffix) {\n  if (!canUseDOM) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = eventName in document;\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  return isSupported;\n}\n\n/**\n * Summary of `DOMEventPluginSystem` event handling:\n *\n *  - Top-level delegation is used to trap most native browser events. This\n *    may only occur in the main thread and is the responsibility of\n *    ReactDOMEventListener, which is injected and can therefore support\n *    pluggable event sources. This is the only work that occurs in the main\n *    thread.\n *\n *  - We normalize and de-duplicate events to account for browser quirks. This\n *    may be done in the worker thread.\n *\n *  - Forward these native events (with the associated top-level type used to\n *    trap it) to `EventPluginRegistry`, which in turn will ask plugins if they want\n *    to extract any synthetic events.\n *\n *  - The `EventPluginRegistry` will then process each event by annotating them with\n *    \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n *  - The `EventPluginRegistry` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+    .\n * |    DOM     |    .\n * +------------+    .\n *       |           .\n *       v           .\n * +------------+    .\n * | ReactEvent |    .\n * |  Listener  |    .\n * +------------+    .                         +-----------+\n *       |           .               +--------+|SimpleEvent|\n *       |           .               |         |Plugin     |\n * +-----|------+    .               v         +-----------+\n * |     |      |    .    +--------------+                    +------------+\n * |     +-----------.--->|PluginRegistry|                    |    Event   |\n * |            |    .    |              |     +-----------+  | Propagators|\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\n * |            |    .    |              |     +-----------+  |  utilities |\n * |     +-----------.--->|              |                    +------------+\n * |     |      |    .    +--------------+\n * +-----|------+    .                ^        +-----------+\n *       |           .                |        |Enter/Leave|\n *       +           .                +-------+|Plugin     |\n * +-------------+   .                         +-----------+\n * | application |   .\n * |-------------|   .\n * |             |   .\n * |             |   .\n * +-------------+   .\n *                   .\n *    React Core     .  General Purpose Event Plugin System\n */\n\nvar CALLBACK_BOOKKEEPING_POOL_SIZE = 10;\nvar callbackBookkeepingPool = [];\n\nfunction releaseTopLevelCallbackBookKeeping(instance) {\n  instance.topLevelType = null;\n  instance.nativeEvent = null;\n  instance.targetInst = null;\n  instance.ancestors.length = 0;\n\n  if (callbackBookkeepingPool.length < CALLBACK_BOOKKEEPING_POOL_SIZE) {\n    callbackBookkeepingPool.push(instance);\n  }\n} // Used to store ancestor hierarchy in top level callback\n\n\nfunction getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst, eventSystemFlags) {\n  if (callbackBookkeepingPool.length) {\n    var instance = callbackBookkeepingPool.pop();\n    instance.topLevelType = topLevelType;\n    instance.eventSystemFlags = eventSystemFlags;\n    instance.nativeEvent = nativeEvent;\n    instance.targetInst = targetInst;\n    return instance;\n  }\n\n  return {\n    topLevelType: topLevelType,\n    eventSystemFlags: eventSystemFlags,\n    nativeEvent: nativeEvent,\n    targetInst: targetInst,\n    ancestors: []\n  };\n}\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\n\n\nfunction findRootContainerNode(inst) {\n  if (inst.tag === HostRoot) {\n    return inst.stateNode.containerInfo;\n  } // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n  // traversal, but caching is difficult to do correctly without using a\n  // mutation observer to listen for all DOM changes.\n\n\n  while (inst.return) {\n    inst = inst.return;\n  }\n\n  if (inst.tag !== HostRoot) {\n    // This can happen if we're in a detached tree.\n    return null;\n  }\n\n  return inst.stateNode.containerInfo;\n}\n/**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n\n\nfunction extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n  var events = null;\n\n  for (var i = 0; i < plugins.length; i++) {\n    // Not every plugin in the ordering may be loaded at runtime.\n    var possiblePlugin = plugins[i];\n\n    if (possiblePlugin) {\n      var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n\n      if (extractedEvents) {\n        events = accumulateInto(events, extractedEvents);\n      }\n    }\n  }\n\n  return events;\n}\n\nfunction runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n  var events = extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n  runEventsInBatch(events);\n}\n\nfunction handleTopLevel(bookKeeping) {\n  var targetInst = bookKeeping.targetInst; // Loop through the hierarchy, in case there's any nested components.\n  // It's important that we build the array of ancestors before calling any\n  // event handlers, because event handlers can modify the DOM, leading to\n  // inconsistencies with ReactMount's node cache. See #1105.\n\n  var ancestor = targetInst;\n\n  do {\n    if (!ancestor) {\n      var ancestors = bookKeeping.ancestors;\n      ancestors.push(ancestor);\n      break;\n    }\n\n    var root = findRootContainerNode(ancestor);\n\n    if (!root) {\n      break;\n    }\n\n    var tag = ancestor.tag;\n\n    if (tag === HostComponent || tag === HostText) {\n      bookKeeping.ancestors.push(ancestor);\n    }\n\n    ancestor = getClosestInstanceFromNode(root);\n  } while (ancestor);\n\n  for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n    targetInst = bookKeeping.ancestors[i];\n    var eventTarget = getEventTarget(bookKeeping.nativeEvent);\n    var topLevelType = bookKeeping.topLevelType;\n    var nativeEvent = bookKeeping.nativeEvent;\n    var eventSystemFlags = bookKeeping.eventSystemFlags; // If this is the first ancestor, we mark it on the system flags\n\n    if (i === 0) {\n      eventSystemFlags |= IS_FIRST_ANCESTOR;\n    }\n\n    runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, eventTarget, eventSystemFlags);\n  }\n}\n\nfunction dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, targetInst) {\n  var bookKeeping = getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst, eventSystemFlags);\n\n  try {\n    // Event queue being processed in the same cycle allows\n    // `preventDefault`.\n    batchedEventUpdates(handleTopLevel, bookKeeping);\n  } finally {\n    releaseTopLevelCallbackBookKeeping(bookKeeping);\n  }\n}\n/**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} mountAt Container where to mount the listener\n */\n\nfunction legacyListenToEvent(registrationName, mountAt) {\n  var listenerMap = getListenerMapForElement(mountAt);\n  var dependencies = registrationNameDependencies[registrationName];\n\n  for (var i = 0; i < dependencies.length; i++) {\n    var dependency = dependencies[i];\n    legacyListenToTopLevelEvent(dependency, mountAt, listenerMap);\n  }\n}\nfunction legacyListenToTopLevelEvent(topLevelType, mountAt, listenerMap) {\n  if (!listenerMap.has(topLevelType)) {\n    switch (topLevelType) {\n      case TOP_SCROLL:\n        trapCapturedEvent(TOP_SCROLL, mountAt);\n        break;\n\n      case TOP_FOCUS:\n      case TOP_BLUR:\n        trapCapturedEvent(TOP_FOCUS, mountAt);\n        trapCapturedEvent(TOP_BLUR, mountAt); // We set the flag for a single dependency later in this function,\n        // but this ensures we mark both as attached rather than just one.\n\n        listenerMap.set(TOP_BLUR, null);\n        listenerMap.set(TOP_FOCUS, null);\n        break;\n\n      case TOP_CANCEL:\n      case TOP_CLOSE:\n        if (isEventSupported(getRawEventName(topLevelType))) {\n          trapCapturedEvent(topLevelType, mountAt);\n        }\n\n        break;\n\n      case TOP_INVALID:\n      case TOP_SUBMIT:\n      case TOP_RESET:\n        // We listen to them on the target DOM elements.\n        // Some of them bubble so we don't want them to fire twice.\n        break;\n\n      default:\n        // By default, listen on the top level to all non-media events.\n        // Media events don't bubble so adding the listener wouldn't do anything.\n        var isMediaEvent = mediaEventTypes.indexOf(topLevelType) !== -1;\n\n        if (!isMediaEvent) {\n          trapBubbledEvent(topLevelType, mountAt);\n        }\n\n        break;\n    }\n\n    listenerMap.set(topLevelType, null);\n  }\n}\nfunction isListeningToAllDependencies(registrationName, mountAt) {\n  var listenerMap = getListenerMapForElement(mountAt);\n  var dependencies = registrationNameDependencies[registrationName];\n\n  for (var i = 0; i < dependencies.length; i++) {\n    var dependency = dependencies[i];\n\n    if (!listenerMap.has(dependency)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvar attemptUserBlockingHydration;\nfunction setAttemptUserBlockingHydration(fn) {\n  attemptUserBlockingHydration = fn;\n}\nvar attemptContinuousHydration;\nfunction setAttemptContinuousHydration(fn) {\n  attemptContinuousHydration = fn;\n}\nvar attemptHydrationAtCurrentPriority;\nfunction setAttemptHydrationAtCurrentPriority(fn) {\n  attemptHydrationAtCurrentPriority = fn;\n} // TODO: Upgrade this definition once we're on a newer version of Flow that\nvar hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.\n\nvar queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.\n// if the last target was dehydrated.\n\nvar queuedFocus = null;\nvar queuedDrag = null;\nvar queuedMouse = null; // For pointer events there can be one latest event per pointerId.\n\nvar queuedPointers = new Map();\nvar queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.\n\nvar queuedExplicitHydrationTargets = [];\nfunction hasQueuedDiscreteEvents() {\n  return queuedDiscreteEvents.length > 0;\n}\nvar discreteReplayableEvents = [TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_TOUCH_CANCEL, TOP_TOUCH_END, TOP_TOUCH_START, TOP_AUX_CLICK, TOP_DOUBLE_CLICK, TOP_POINTER_CANCEL, TOP_POINTER_DOWN, TOP_POINTER_UP, TOP_DRAG_END, TOP_DRAG_START, TOP_DROP, TOP_COMPOSITION_END, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_INPUT, TOP_TEXT_INPUT, TOP_CLOSE, TOP_CANCEL, TOP_COPY, TOP_CUT, TOP_PASTE, TOP_CLICK, TOP_CHANGE, TOP_CONTEXT_MENU, TOP_RESET, TOP_SUBMIT];\nvar continuousReplayableEvents = [TOP_FOCUS, TOP_BLUR, TOP_DRAG_ENTER, TOP_DRAG_LEAVE, TOP_MOUSE_OVER, TOP_MOUSE_OUT, TOP_POINTER_OVER, TOP_POINTER_OUT, TOP_GOT_POINTER_CAPTURE, TOP_LOST_POINTER_CAPTURE];\nfunction isReplayableDiscreteEvent(eventType) {\n  return discreteReplayableEvents.indexOf(eventType) > -1;\n}\n\nfunction trapReplayableEventForDocument(topLevelType, document, listenerMap) {\n  legacyListenToTopLevelEvent(topLevelType, document, listenerMap);\n}\n\nfunction eagerlyTrapReplayableEvents(container, document) {\n  var listenerMapForDoc = getListenerMapForElement(document); // Discrete\n\n  discreteReplayableEvents.forEach(function (topLevelType) {\n    trapReplayableEventForDocument(topLevelType, document, listenerMapForDoc);\n  }); // Continuous\n\n  continuousReplayableEvents.forEach(function (topLevelType) {\n    trapReplayableEventForDocument(topLevelType, document, listenerMapForDoc);\n  });\n}\n\nfunction createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n  return {\n    blockedOn: blockedOn,\n    topLevelType: topLevelType,\n    eventSystemFlags: eventSystemFlags | IS_REPLAYED,\n    nativeEvent: nativeEvent,\n    container: container\n  };\n}\n\nfunction queueDiscreteEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n  var queuedEvent = createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n  queuedDiscreteEvents.push(queuedEvent);\n} // Resets the replaying for this type of continuous event to no event.\n\nfunction clearIfContinuousEvent(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case TOP_FOCUS:\n    case TOP_BLUR:\n      queuedFocus = null;\n      break;\n\n    case TOP_DRAG_ENTER:\n    case TOP_DRAG_LEAVE:\n      queuedDrag = null;\n      break;\n\n    case TOP_MOUSE_OVER:\n    case TOP_MOUSE_OUT:\n      queuedMouse = null;\n      break;\n\n    case TOP_POINTER_OVER:\n    case TOP_POINTER_OUT:\n      {\n        var pointerId = nativeEvent.pointerId;\n        queuedPointers.delete(pointerId);\n        break;\n      }\n\n    case TOP_GOT_POINTER_CAPTURE:\n    case TOP_LOST_POINTER_CAPTURE:\n      {\n        var _pointerId = nativeEvent.pointerId;\n        queuedPointerCaptures.delete(_pointerId);\n        break;\n      }\n  }\n}\n\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n  if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {\n    var queuedEvent = createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n\n    if (blockedOn !== null) {\n      var _fiber2 = getInstanceFromNode$1(blockedOn);\n\n      if (_fiber2 !== null) {\n        // Attempt to increase the priority of this target.\n        attemptContinuousHydration(_fiber2);\n      }\n    }\n\n    return queuedEvent;\n  } // If we have already queued this exact event, then it's because\n  // the different event systems have different DOM event listeners.\n  // We can accumulate the flags and store a single event to be\n  // replayed.\n\n\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  return existingQueuedEvent;\n}\n\nfunction queueIfContinuousEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n  // These set relatedTarget to null because the replayed event will be treated as if we\n  // moved from outside the window (no target) onto the target once it hydrates.\n  // Instead of mutating we could clone the event.\n  switch (topLevelType) {\n    case TOP_FOCUS:\n      {\n        var focusEvent = nativeEvent;\n        queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, topLevelType, eventSystemFlags, container, focusEvent);\n        return true;\n      }\n\n    case TOP_DRAG_ENTER:\n      {\n        var dragEvent = nativeEvent;\n        queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, topLevelType, eventSystemFlags, container, dragEvent);\n        return true;\n      }\n\n    case TOP_MOUSE_OVER:\n      {\n        var mouseEvent = nativeEvent;\n        queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, topLevelType, eventSystemFlags, container, mouseEvent);\n        return true;\n      }\n\n    case TOP_POINTER_OVER:\n      {\n        var pointerEvent = nativeEvent;\n        var pointerId = pointerEvent.pointerId;\n        queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, topLevelType, eventSystemFlags, container, pointerEvent));\n        return true;\n      }\n\n    case TOP_GOT_POINTER_CAPTURE:\n      {\n        var _pointerEvent = nativeEvent;\n        var _pointerId2 = _pointerEvent.pointerId;\n        queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, topLevelType, eventSystemFlags, container, _pointerEvent));\n        return true;\n      }\n  }\n\n  return false;\n} // Check if this target is unblocked. Returns true if it's unblocked.\n\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  // TODO: This function shares a lot of logic with attemptToDispatchEvent.\n  // Try to unify them. It's a bit tricky since it would require two return\n  // values.\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n\n  if (targetInst !== null) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n\n    if (nearestMounted !== null) {\n      var tag = nearestMounted.tag;\n\n      if (tag === SuspenseComponent) {\n        var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n        if (instance !== null) {\n          // We're blocked on hydrating this boundary.\n          // Increase its priority.\n          queuedTarget.blockedOn = instance;\n          Scheduler.unstable_runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (tag === HostRoot) {\n        var root = nearestMounted.stateNode;\n\n        if (root.hydrate) {\n          queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of\n          // a root other than sync.\n\n          return;\n        }\n      }\n    }\n  }\n\n  queuedTarget.blockedOn = null;\n}\n\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (queuedEvent.blockedOn !== null) {\n    return false;\n  }\n\n  var nextBlockedOn = attemptToDispatchEvent(queuedEvent.topLevelType, queuedEvent.eventSystemFlags, queuedEvent.container, queuedEvent.nativeEvent);\n\n  if (nextBlockedOn !== null) {\n    // We're still blocked. Try again later.\n    var _fiber3 = getInstanceFromNode$1(nextBlockedOn);\n\n    if (_fiber3 !== null) {\n      attemptContinuousHydration(_fiber3);\n    }\n\n    queuedEvent.blockedOn = nextBlockedOn;\n    return false;\n  }\n\n  return true;\n}\n\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  if (attemptReplayContinuousQueuedEvent(queuedEvent)) {\n    map.delete(key);\n  }\n}\n\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = false; // First replay discrete events.\n\n  while (queuedDiscreteEvents.length > 0) {\n    var nextDiscreteEvent = queuedDiscreteEvents[0];\n\n    if (nextDiscreteEvent.blockedOn !== null) {\n      // We're still blocked.\n      // Increase the priority of this boundary to unblock\n      // the next discrete event.\n      var _fiber4 = getInstanceFromNode$1(nextDiscreteEvent.blockedOn);\n\n      if (_fiber4 !== null) {\n        attemptUserBlockingHydration(_fiber4);\n      }\n\n      break;\n    }\n\n    var nextBlockedOn = attemptToDispatchEvent(nextDiscreteEvent.topLevelType, nextDiscreteEvent.eventSystemFlags, nextDiscreteEvent.container, nextDiscreteEvent.nativeEvent);\n\n    if (nextBlockedOn !== null) {\n      // We're still blocked. Try again later.\n      nextDiscreteEvent.blockedOn = nextBlockedOn;\n    } else {\n      // We've successfully replayed the first event. Let's try the next one.\n      queuedDiscreteEvents.shift();\n    }\n  } // Next replay any continuous events.\n\n\n  if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {\n    queuedFocus = null;\n  }\n\n  if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {\n    queuedDrag = null;\n  }\n\n  if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {\n    queuedMouse = null;\n  }\n\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\n\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  if (queuedEvent.blockedOn === unblocked) {\n    queuedEvent.blockedOn = null;\n\n    if (!hasScheduledReplayAttempt) {\n      hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are\n      // now unblocked. This first might not actually be unblocked yet.\n      // We could check it early to avoid scheduling an unnecessary callback.\n\n      Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents);\n    }\n  }\n}\n\nfunction retryIfBlockedOn(unblocked) {\n  // Mark anything that was blocked on this as no longer blocked\n  // and eligible for a replay.\n  if (queuedDiscreteEvents.length > 0) {\n    scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's\n    // worth it because we expect very few discrete events to queue up and once\n    // we are actually fully unblocked it will be fast to replay them.\n\n    for (var i = 1; i < queuedDiscreteEvents.length; i++) {\n      var queuedEvent = queuedDiscreteEvents[i];\n\n      if (queuedEvent.blockedOn === unblocked) {\n        queuedEvent.blockedOn = null;\n      }\n    }\n  }\n\n  if (queuedFocus !== null) {\n    scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  }\n\n  if (queuedDrag !== null) {\n    scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  }\n\n  if (queuedMouse !== null) {\n    scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  }\n\n  var unblock = function (queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  };\n\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n\n  for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[_i];\n\n    if (queuedTarget.blockedOn === unblocked) {\n      queuedTarget.blockedOn = null;\n    }\n  }\n\n  while (queuedExplicitHydrationTargets.length > 0) {\n    var nextExplicitTarget = queuedExplicitHydrationTargets[0];\n\n    if (nextExplicitTarget.blockedOn !== null) {\n      // We're still blocked.\n      break;\n    } else {\n      attemptExplicitHydrationTarget(nextExplicitTarget);\n\n      if (nextExplicitTarget.blockedOn === null) {\n        // We're unblocked.\n        queuedExplicitHydrationTargets.shift();\n      }\n    }\n  }\n}\n\nfunction addEventBubbleListener(element, eventType, listener) {\n  element.addEventListener(eventType, listener, false);\n}\nfunction addEventCaptureListener(element, eventType, listener) {\n  element.addEventListener(eventType, listener, true);\n}\n\n// do it in two places, which duplicates logic\n// and increases the bundle size, we do it all\n// here once. If we remove or refactor the\n// SimpleEventPlugin, we should also remove or\n// update the below line.\n\nvar simpleEventPluginEventTypes = {};\nvar topLevelEventsToDispatchConfig = new Map();\nvar eventPriorities = new Map(); // We store most of the events in this module in pairs of two strings so we can re-use\n// the code required to apply the same logic for event prioritization and that of the\n// SimpleEventPlugin. This complicates things slightly, but the aim is to reduce code\n// duplication (for which there would be quite a bit). For the events that are not needed\n// for the SimpleEventPlugin (otherDiscreteEvents) we process them separately as an\n// array of top level events.\n// Lastly, we ignore prettier so we can keep the formatting sane.\n// prettier-ignore\n\nvar discreteEventPairsForSimpleEventPlugin = [TOP_BLUR, 'blur', TOP_CANCEL, 'cancel', TOP_CLICK, 'click', TOP_CLOSE, 'close', TOP_CONTEXT_MENU, 'contextMenu', TOP_COPY, 'copy', TOP_CUT, 'cut', TOP_AUX_CLICK, 'auxClick', TOP_DOUBLE_CLICK, 'doubleClick', TOP_DRAG_END, 'dragEnd', TOP_DRAG_START, 'dragStart', TOP_DROP, 'drop', TOP_FOCUS, 'focus', TOP_INPUT, 'input', TOP_INVALID, 'invalid', TOP_KEY_DOWN, 'keyDown', TOP_KEY_PRESS, 'keyPress', TOP_KEY_UP, 'keyUp', TOP_MOUSE_DOWN, 'mouseDown', TOP_MOUSE_UP, 'mouseUp', TOP_PASTE, 'paste', TOP_PAUSE, 'pause', TOP_PLAY, 'play', TOP_POINTER_CANCEL, 'pointerCancel', TOP_POINTER_DOWN, 'pointerDown', TOP_POINTER_UP, 'pointerUp', TOP_RATE_CHANGE, 'rateChange', TOP_RESET, 'reset', TOP_SEEKED, 'seeked', TOP_SUBMIT, 'submit', TOP_TOUCH_CANCEL, 'touchCancel', TOP_TOUCH_END, 'touchEnd', TOP_TOUCH_START, 'touchStart', TOP_VOLUME_CHANGE, 'volumeChange'];\nvar otherDiscreteEvents = [TOP_CHANGE, TOP_SELECTION_CHANGE, TOP_TEXT_INPUT, TOP_COMPOSITION_START, TOP_COMPOSITION_END, TOP_COMPOSITION_UPDATE]; // prettier-ignore\n\nvar userBlockingPairsForSimpleEventPlugin = [TOP_DRAG, 'drag', TOP_DRAG_ENTER, 'dragEnter', TOP_DRAG_EXIT, 'dragExit', TOP_DRAG_LEAVE, 'dragLeave', TOP_DRAG_OVER, 'dragOver', TOP_MOUSE_MOVE, 'mouseMove', TOP_MOUSE_OUT, 'mouseOut', TOP_MOUSE_OVER, 'mouseOver', TOP_POINTER_MOVE, 'pointerMove', TOP_POINTER_OUT, 'pointerOut', TOP_POINTER_OVER, 'pointerOver', TOP_SCROLL, 'scroll', TOP_TOGGLE, 'toggle', TOP_TOUCH_MOVE, 'touchMove', TOP_WHEEL, 'wheel']; // prettier-ignore\n\nvar continuousPairsForSimpleEventPlugin = [TOP_ABORT, 'abort', TOP_ANIMATION_END, 'animationEnd', TOP_ANIMATION_ITERATION, 'animationIteration', TOP_ANIMATION_START, 'animationStart', TOP_CAN_PLAY, 'canPlay', TOP_CAN_PLAY_THROUGH, 'canPlayThrough', TOP_DURATION_CHANGE, 'durationChange', TOP_EMPTIED, 'emptied', TOP_ENCRYPTED, 'encrypted', TOP_ENDED, 'ended', TOP_ERROR, 'error', TOP_GOT_POINTER_CAPTURE, 'gotPointerCapture', TOP_LOAD, 'load', TOP_LOADED_DATA, 'loadedData', TOP_LOADED_METADATA, 'loadedMetadata', TOP_LOAD_START, 'loadStart', TOP_LOST_POINTER_CAPTURE, 'lostPointerCapture', TOP_PLAYING, 'playing', TOP_PROGRESS, 'progress', TOP_SEEKING, 'seeking', TOP_STALLED, 'stalled', TOP_SUSPEND, 'suspend', TOP_TIME_UPDATE, 'timeUpdate', TOP_TRANSITION_END, 'transitionEnd', TOP_WAITING, 'waiting'];\n/**\n * Turns\n * ['abort', ...]\n * into\n * eventTypes = {\n *   'abort': {\n *     phasedRegistrationNames: {\n *       bubbled: 'onAbort',\n *       captured: 'onAbortCapture',\n *     },\n *     dependencies: [TOP_ABORT],\n *   },\n *   ...\n * };\n * topLevelEventsToDispatchConfig = new Map([\n *   [TOP_ABORT, { sameConfig }],\n * ]);\n */\n\nfunction processSimpleEventPluginPairsByPriority(eventTypes, priority) {\n  // As the event types are in pairs of two, we need to iterate\n  // through in twos. The events are in pairs of two to save code\n  // and improve init perf of processing this array, as it will\n  // result in far fewer object allocations and property accesses\n  // if we only use three arrays to process all the categories of\n  // instead of tuples.\n  for (var i = 0; i < eventTypes.length; i += 2) {\n    var topEvent = eventTypes[i];\n    var event = eventTypes[i + 1];\n    var capitalizedEvent = event[0].toUpperCase() + event.slice(1);\n    var onEvent = 'on' + capitalizedEvent;\n    var config = {\n      phasedRegistrationNames: {\n        bubbled: onEvent,\n        captured: onEvent + 'Capture'\n      },\n      dependencies: [topEvent],\n      eventPriority: priority\n    };\n    eventPriorities.set(topEvent, priority);\n    topLevelEventsToDispatchConfig.set(topEvent, config);\n    simpleEventPluginEventTypes[event] = config;\n  }\n}\n\nfunction processTopEventPairsByPriority(eventTypes, priority) {\n  for (var i = 0; i < eventTypes.length; i++) {\n    eventPriorities.set(eventTypes[i], priority);\n  }\n} // SimpleEventPlugin\n\n\nprocessSimpleEventPluginPairsByPriority(discreteEventPairsForSimpleEventPlugin, DiscreteEvent);\nprocessSimpleEventPluginPairsByPriority(userBlockingPairsForSimpleEventPlugin, UserBlockingEvent);\nprocessSimpleEventPluginPairsByPriority(continuousPairsForSimpleEventPlugin, ContinuousEvent); // Not used by SimpleEventPlugin\n\nprocessTopEventPairsByPriority(otherDiscreteEvents, DiscreteEvent);\nfunction getEventPriorityForPluginSystem(topLevelType) {\n  var priority = eventPriorities.get(topLevelType); // Default to a ContinuousEvent. Note: we might\n  // want to warn if we can't detect the priority\n  // for the event.\n\n  return priority === undefined ? ContinuousEvent : priority;\n}\n\n// Intentionally not named imports because Rollup would use dynamic dispatch for\nvar UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n    runWithPriority = Scheduler.unstable_runWithPriority; // TODO: can we stop exporting these?\n\nvar _enabled = true;\nfunction setEnabled(enabled) {\n  _enabled = !!enabled;\n}\nfunction isEnabled() {\n  return _enabled;\n}\nfunction trapBubbledEvent(topLevelType, element) {\n  trapEventForPluginEventSystem(element, topLevelType, false);\n}\nfunction trapCapturedEvent(topLevelType, element) {\n  trapEventForPluginEventSystem(element, topLevelType, true);\n}\n\nfunction trapEventForPluginEventSystem(container, topLevelType, capture) {\n  var listener;\n\n  switch (getEventPriorityForPluginSystem(topLevelType)) {\n    case DiscreteEvent:\n      listener = dispatchDiscreteEvent.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n      break;\n\n    case UserBlockingEvent:\n      listener = dispatchUserBlockingUpdate.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n      break;\n\n    case ContinuousEvent:\n    default:\n      listener = dispatchEvent.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n      break;\n  }\n\n  var rawEventName = getRawEventName(topLevelType);\n\n  if (capture) {\n    addEventCaptureListener(container, rawEventName, listener);\n  } else {\n    addEventBubbleListener(container, rawEventName, listener);\n  }\n}\n\nfunction dispatchDiscreteEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n  flushDiscreteUpdatesIfNeeded(nativeEvent.timeStamp);\n  discreteUpdates(dispatchEvent, topLevelType, eventSystemFlags, container, nativeEvent);\n}\n\nfunction dispatchUserBlockingUpdate(topLevelType, eventSystemFlags, container, nativeEvent) {\n  runWithPriority(UserBlockingPriority, dispatchEvent.bind(null, topLevelType, eventSystemFlags, container, nativeEvent));\n}\n\nfunction dispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n  if (!_enabled) {\n    return;\n  }\n\n  if (hasQueuedDiscreteEvents() && isReplayableDiscreteEvent(topLevelType)) {\n    // If we already have a queue of discrete events, and this is another discrete\n    // event, then we can't dispatch it regardless of its target, since they\n    // need to dispatch in order.\n    queueDiscreteEvent(null, // Flags that we're not actually blocked on anything as far as we know.\n    topLevelType, eventSystemFlags, container, nativeEvent);\n    return;\n  }\n\n  var blockedOn = attemptToDispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent);\n\n  if (blockedOn === null) {\n    // We successfully dispatched this event.\n    clearIfContinuousEvent(topLevelType, nativeEvent);\n    return;\n  }\n\n  if (isReplayableDiscreteEvent(topLevelType)) {\n    // This this to be replayed later once the target is available.\n    queueDiscreteEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n    return;\n  }\n\n  if (queueIfContinuousEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent)) {\n    return;\n  } // We need to clear only if we didn't queue because\n  // queueing is accummulative.\n\n\n  clearIfContinuousEvent(topLevelType, nativeEvent); // This is not replayable so we'll invoke it but without a target,\n  // in case the event system needs to trace it.\n\n  {\n    dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, null);\n  }\n} // Attempt dispatching an event. Returns a SuspenseInstance or Container if it's blocked.\n\nfunction attemptToDispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n  // TODO: Warn if _enabled is false.\n  var nativeEventTarget = getEventTarget(nativeEvent);\n  var targetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n  if (targetInst !== null) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n\n    if (nearestMounted === null) {\n      // This tree has been unmounted already. Dispatch without a target.\n      targetInst = null;\n    } else {\n      var tag = nearestMounted.tag;\n\n      if (tag === SuspenseComponent) {\n        var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n        if (instance !== null) {\n          // Queue the event to be replayed later. Abort dispatching since we\n          // don't want this event dispatched twice through the event system.\n          // TODO: If this is the first discrete event in the queue. Schedule an increased\n          // priority for this boundary.\n          return instance;\n        } // This shouldn't happen, something went wrong but to avoid blocking\n        // the whole system, dispatch the event without a target.\n        // TODO: Warn.\n\n\n        targetInst = null;\n      } else if (tag === HostRoot) {\n        var root = nearestMounted.stateNode;\n\n        if (root.hydrate) {\n          // If this happens during a replay something went wrong and it might block\n          // the whole system.\n          return getContainerFromFiber(nearestMounted);\n        }\n\n        targetInst = null;\n      } else if (nearestMounted !== targetInst) {\n        // If we get an event (ex: img onload) before committing that\n        // component's mount, ignore it for now (that is, treat it as if it was an\n        // event on a non-React tree). We might also consider queueing events and\n        // dispatching them after the mount.\n        targetInst = null;\n      }\n    }\n  }\n\n  {\n    dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, targetInst);\n  } // We're not blocked on anything.\n\n\n  return null;\n}\n\n// List derived from Gecko source code:\n// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js\nvar shorthandToLonghand = {\n  animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],\n  background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],\n  backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n  border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n  borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],\n  borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],\n  borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],\n  borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],\n  borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],\n  borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],\n  borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],\n  borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],\n  borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],\n  borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],\n  borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],\n  borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n  borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],\n  columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],\n  columns: ['columnCount', 'columnWidth'],\n  flex: ['flexBasis', 'flexGrow', 'flexShrink'],\n  flexFlow: ['flexDirection', 'flexWrap'],\n  font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],\n  fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],\n  gap: ['columnGap', 'rowGap'],\n  grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n  gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],\n  gridColumn: ['gridColumnEnd', 'gridColumnStart'],\n  gridColumnGap: ['columnGap'],\n  gridGap: ['columnGap', 'rowGap'],\n  gridRow: ['gridRowEnd', 'gridRowStart'],\n  gridRowGap: ['rowGap'],\n  gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n  listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],\n  margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],\n  marker: ['markerEnd', 'markerMid', 'markerStart'],\n  mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],\n  maskPosition: ['maskPositionX', 'maskPositionY'],\n  outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n  overflow: ['overflowX', 'overflowY'],\n  padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],\n  placeContent: ['alignContent', 'justifyContent'],\n  placeItems: ['alignItems', 'justifyItems'],\n  placeSelf: ['alignSelf', 'justifySelf'],\n  textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],\n  textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],\n  transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],\n  wordWrap: ['overflowWrap']\n};\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  columns: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridArea: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowSpan: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnSpan: true,\n  gridColumnStart: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\n\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n\n  if (isEmpty) {\n    return '';\n  }\n\n  if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n    return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n  }\n\n  return ('' + value).trim();\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n  return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\nvar warnValidStyle = function () {};\n\n{\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n  var msPattern$1 = /^-ms-/;\n  var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n  var warnedForNaNValue = false;\n  var warnedForInfinityValue = false;\n\n  var camelize = function (string) {\n    return string.replace(hyphenPattern, function (_, character) {\n      return character.toUpperCase();\n    });\n  };\n\n  var warnHyphenatedStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n    // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n    // is converted to lowercase `ms`.\n    camelize(name.replace(msPattern$1, 'ms-')));\n  };\n\n  var warnBadVendoredStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n\n    error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n  };\n\n  var warnStyleValueIsNaN = function (name, value) {\n    if (warnedForNaNValue) {\n      return;\n    }\n\n    warnedForNaNValue = true;\n\n    error('`NaN` is an invalid value for the `%s` css style property.', name);\n  };\n\n  var warnStyleValueIsInfinity = function (name, value) {\n    if (warnedForInfinityValue) {\n      return;\n    }\n\n    warnedForInfinityValue = true;\n\n    error('`Infinity` is an invalid value for the `%s` css style property.', name);\n  };\n\n  warnValidStyle = function (name, value) {\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value);\n    }\n\n    if (typeof value === 'number') {\n      if (isNaN(value)) {\n        warnStyleValueIsNaN(name, value);\n      } else if (!isFinite(value)) {\n        warnStyleValueIsInfinity(name, value);\n      }\n    }\n  };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n/**\n * Operations for dealing with CSS properties.\n */\n\n/**\n * This creates a string that is expected to be equivalent to the style\n * attribute generated by server-side rendering. It by-passes warnings and\n * security checks so it's not safe to use this value for anything other than\n * comparison. It is only used in DEV for SSR validation.\n */\n\nfunction createDangerousStringForStyles(styles) {\n  {\n    var serialized = '';\n    var delimiter = '';\n\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n\n      var styleValue = styles[styleName];\n\n      if (styleValue != null) {\n        var isCustomProperty = styleName.indexOf('--') === 0;\n        serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';\n        serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);\n        delimiter = ';';\n      }\n    }\n\n    return serialized || null;\n  }\n}\n/**\n * Sets the value for multiple styles on a node.  If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n\nfunction setValueForStyles(node, styles) {\n  var style = node.style;\n\n  for (var styleName in styles) {\n    if (!styles.hasOwnProperty(styleName)) {\n      continue;\n    }\n\n    var isCustomProperty = styleName.indexOf('--') === 0;\n\n    {\n      if (!isCustomProperty) {\n        warnValidStyle$1(styleName, styles[styleName]);\n      }\n    }\n\n    var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n\n    if (styleName === 'float') {\n      styleName = 'cssFloat';\n    }\n\n    if (isCustomProperty) {\n      style.setProperty(styleName, styleValue);\n    } else {\n      style[styleName] = styleValue;\n    }\n  }\n}\n\nfunction isValueEmpty(value) {\n  return value == null || typeof value === 'boolean' || value === '';\n}\n/**\n * Given {color: 'red', overflow: 'hidden'} returns {\n *   color: 'color',\n *   overflowX: 'overflow',\n *   overflowY: 'overflow',\n * }. This can be read as \"the overflowY property was set by the overflow\n * shorthand\". That is, the values are the property that each was derived from.\n */\n\n\nfunction expandShorthandMap(styles) {\n  var expanded = {};\n\n  for (var key in styles) {\n    var longhands = shorthandToLonghand[key] || [key];\n\n    for (var i = 0; i < longhands.length; i++) {\n      expanded[longhands[i]] = key;\n    }\n  }\n\n  return expanded;\n}\n/**\n * When mixing shorthand and longhand property names, we warn during updates if\n * we expect an incorrect result to occur. In particular, we warn for:\n *\n * Updating a shorthand property (longhand gets overwritten):\n *   {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}\n *   becomes .style.font = 'baz'\n * Removing a shorthand property (longhand gets lost too):\n *   {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}\n *   becomes .style.font = ''\n * Removing a longhand property (should revert to shorthand; doesn't):\n *   {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}\n *   becomes .style.fontVariant = ''\n */\n\n\nfunction validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {\n  {\n\n    if (!nextStyles) {\n      return;\n    }\n\n    var expandedUpdates = expandShorthandMap(styleUpdates);\n    var expandedStyles = expandShorthandMap(nextStyles);\n    var warnedAbout = {};\n\n    for (var key in expandedUpdates) {\n      var originalKey = expandedUpdates[key];\n      var correctOriginalKey = expandedStyles[key];\n\n      if (correctOriginalKey && originalKey !== correctOriginalKey) {\n        var warningKey = originalKey + ',' + correctOriginalKey;\n\n        if (warnedAbout[warningKey]) {\n          continue;\n        }\n\n        warnedAbout[warningKey] = true;\n\n        error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + \"avoid this, don't mix shorthand and non-shorthand properties \" + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);\n      }\n    }\n  }\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\nvar omittedCloseTags = {\n  area: true,\n  base: true,\n  br: true,\n  col: true,\n  embed: true,\n  hr: true,\n  img: true,\n  input: true,\n  keygen: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.\n\n};\n\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = _assign({\n  menuitem: true\n}, omittedCloseTags);\n\nvar HTML = '__html';\nvar ReactDebugCurrentFrame$3 = null;\n\n{\n  ReactDebugCurrentFrame$3 = ReactSharedInternals.ReactDebugCurrentFrame;\n}\n\nfunction assertValidProps(tag, props) {\n  if (!props) {\n    return;\n  } // Note the use of `==` which checks for null or undefined.\n\n\n  if (voidElementTags[tag]) {\n    if (!(props.children == null && props.dangerouslySetInnerHTML == null)) {\n      {\n        throw Error( tag + \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\" + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );\n      }\n    }\n  }\n\n  if (props.dangerouslySetInnerHTML != null) {\n    if (!(props.children == null)) {\n      {\n        throw Error( \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\" );\n      }\n    }\n\n    if (!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML)) {\n      {\n        throw Error( \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.\" );\n      }\n    }\n  }\n\n  {\n    if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {\n      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.');\n    }\n  }\n\n  if (!(props.style == null || typeof props.style === 'object')) {\n    {\n      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() ) );\n    }\n  }\n}\n\nfunction isCustomComponent(tagName, props) {\n  if (tagName.indexOf('-') === -1) {\n    return typeof props.is === 'string';\n  }\n\n  switch (tagName) {\n    // These are reserved SVG and MathML elements.\n    // We don't mind this whitelist too much because we expect it to never grow.\n    // The alternative is to track the namespace in a few places which is convoluted.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n    case 'annotation-xml':\n    case 'color-profile':\n    case 'font-face':\n    case 'font-face-src':\n    case 'font-face-uri':\n    case 'font-face-format':\n    case 'font-face-name':\n    case 'missing-glyph':\n      return false;\n\n    default:\n      return true;\n  }\n}\n\n// When adding attributes to the HTML or SVG whitelist, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n  // HTML\n  accept: 'accept',\n  acceptcharset: 'acceptCharset',\n  'accept-charset': 'acceptCharset',\n  accesskey: 'accessKey',\n  action: 'action',\n  allowfullscreen: 'allowFullScreen',\n  alt: 'alt',\n  as: 'as',\n  async: 'async',\n  autocapitalize: 'autoCapitalize',\n  autocomplete: 'autoComplete',\n  autocorrect: 'autoCorrect',\n  autofocus: 'autoFocus',\n  autoplay: 'autoPlay',\n  autosave: 'autoSave',\n  capture: 'capture',\n  cellpadding: 'cellPadding',\n  cellspacing: 'cellSpacing',\n  challenge: 'challenge',\n  charset: 'charSet',\n  checked: 'checked',\n  children: 'children',\n  cite: 'cite',\n  class: 'className',\n  classid: 'classID',\n  classname: 'className',\n  cols: 'cols',\n  colspan: 'colSpan',\n  content: 'content',\n  contenteditable: 'contentEditable',\n  contextmenu: 'contextMenu',\n  controls: 'controls',\n  controlslist: 'controlsList',\n  coords: 'coords',\n  crossorigin: 'crossOrigin',\n  dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n  data: 'data',\n  datetime: 'dateTime',\n  default: 'default',\n  defaultchecked: 'defaultChecked',\n  defaultvalue: 'defaultValue',\n  defer: 'defer',\n  dir: 'dir',\n  disabled: 'disabled',\n  disablepictureinpicture: 'disablePictureInPicture',\n  download: 'download',\n  draggable: 'draggable',\n  enctype: 'encType',\n  for: 'htmlFor',\n  form: 'form',\n  formmethod: 'formMethod',\n  formaction: 'formAction',\n  formenctype: 'formEncType',\n  formnovalidate: 'formNoValidate',\n  formtarget: 'formTarget',\n  frameborder: 'frameBorder',\n  headers: 'headers',\n  height: 'height',\n  hidden: 'hidden',\n  high: 'high',\n  href: 'href',\n  hreflang: 'hrefLang',\n  htmlfor: 'htmlFor',\n  httpequiv: 'httpEquiv',\n  'http-equiv': 'httpEquiv',\n  icon: 'icon',\n  id: 'id',\n  innerhtml: 'innerHTML',\n  inputmode: 'inputMode',\n  integrity: 'integrity',\n  is: 'is',\n  itemid: 'itemID',\n  itemprop: 'itemProp',\n  itemref: 'itemRef',\n  itemscope: 'itemScope',\n  itemtype: 'itemType',\n  keyparams: 'keyParams',\n  keytype: 'keyType',\n  kind: 'kind',\n  label: 'label',\n  lang: 'lang',\n  list: 'list',\n  loop: 'loop',\n  low: 'low',\n  manifest: 'manifest',\n  marginwidth: 'marginWidth',\n  marginheight: 'marginHeight',\n  max: 'max',\n  maxlength: 'maxLength',\n  media: 'media',\n  mediagroup: 'mediaGroup',\n  method: 'method',\n  min: 'min',\n  minlength: 'minLength',\n  multiple: 'multiple',\n  muted: 'muted',\n  name: 'name',\n  nomodule: 'noModule',\n  nonce: 'nonce',\n  novalidate: 'noValidate',\n  open: 'open',\n  optimum: 'optimum',\n  pattern: 'pattern',\n  placeholder: 'placeholder',\n  playsinline: 'playsInline',\n  poster: 'poster',\n  preload: 'preload',\n  profile: 'profile',\n  radiogroup: 'radioGroup',\n  readonly: 'readOnly',\n  referrerpolicy: 'referrerPolicy',\n  rel: 'rel',\n  required: 'required',\n  reversed: 'reversed',\n  role: 'role',\n  rows: 'rows',\n  rowspan: 'rowSpan',\n  sandbox: 'sandbox',\n  scope: 'scope',\n  scoped: 'scoped',\n  scrolling: 'scrolling',\n  seamless: 'seamless',\n  selected: 'selected',\n  shape: 'shape',\n  size: 'size',\n  sizes: 'sizes',\n  span: 'span',\n  spellcheck: 'spellCheck',\n  src: 'src',\n  srcdoc: 'srcDoc',\n  srclang: 'srcLang',\n  srcset: 'srcSet',\n  start: 'start',\n  step: 'step',\n  style: 'style',\n  summary: 'summary',\n  tabindex: 'tabIndex',\n  target: 'target',\n  title: 'title',\n  type: 'type',\n  usemap: 'useMap',\n  value: 'value',\n  width: 'width',\n  wmode: 'wmode',\n  wrap: 'wrap',\n  // SVG\n  about: 'about',\n  accentheight: 'accentHeight',\n  'accent-height': 'accentHeight',\n  accumulate: 'accumulate',\n  additive: 'additive',\n  alignmentbaseline: 'alignmentBaseline',\n  'alignment-baseline': 'alignmentBaseline',\n  allowreorder: 'allowReorder',\n  alphabetic: 'alphabetic',\n  amplitude: 'amplitude',\n  arabicform: 'arabicForm',\n  'arabic-form': 'arabicForm',\n  ascent: 'ascent',\n  attributename: 'attributeName',\n  attributetype: 'attributeType',\n  autoreverse: 'autoReverse',\n  azimuth: 'azimuth',\n  basefrequency: 'baseFrequency',\n  baselineshift: 'baselineShift',\n  'baseline-shift': 'baselineShift',\n  baseprofile: 'baseProfile',\n  bbox: 'bbox',\n  begin: 'begin',\n  bias: 'bias',\n  by: 'by',\n  calcmode: 'calcMode',\n  capheight: 'capHeight',\n  'cap-height': 'capHeight',\n  clip: 'clip',\n  clippath: 'clipPath',\n  'clip-path': 'clipPath',\n  clippathunits: 'clipPathUnits',\n  cliprule: 'clipRule',\n  'clip-rule': 'clipRule',\n  color: 'color',\n  colorinterpolation: 'colorInterpolation',\n  'color-interpolation': 'colorInterpolation',\n  colorinterpolationfilters: 'colorInterpolationFilters',\n  'color-interpolation-filters': 'colorInterpolationFilters',\n  colorprofile: 'colorProfile',\n  'color-profile': 'colorProfile',\n  colorrendering: 'colorRendering',\n  'color-rendering': 'colorRendering',\n  contentscripttype: 'contentScriptType',\n  contentstyletype: 'contentStyleType',\n  cursor: 'cursor',\n  cx: 'cx',\n  cy: 'cy',\n  d: 'd',\n  datatype: 'datatype',\n  decelerate: 'decelerate',\n  descent: 'descent',\n  diffuseconstant: 'diffuseConstant',\n  direction: 'direction',\n  display: 'display',\n  divisor: 'divisor',\n  dominantbaseline: 'dominantBaseline',\n  'dominant-baseline': 'dominantBaseline',\n  dur: 'dur',\n  dx: 'dx',\n  dy: 'dy',\n  edgemode: 'edgeMode',\n  elevation: 'elevation',\n  enablebackground: 'enableBackground',\n  'enable-background': 'enableBackground',\n  end: 'end',\n  exponent: 'exponent',\n  externalresourcesrequired: 'externalResourcesRequired',\n  fill: 'fill',\n  fillopacity: 'fillOpacity',\n  'fill-opacity': 'fillOpacity',\n  fillrule: 'fillRule',\n  'fill-rule': 'fillRule',\n  filter: 'filter',\n  filterres: 'filterRes',\n  filterunits: 'filterUnits',\n  floodopacity: 'floodOpacity',\n  'flood-opacity': 'floodOpacity',\n  floodcolor: 'floodColor',\n  'flood-color': 'floodColor',\n  focusable: 'focusable',\n  fontfamily: 'fontFamily',\n  'font-family': 'fontFamily',\n  fontsize: 'fontSize',\n  'font-size': 'fontSize',\n  fontsizeadjust: 'fontSizeAdjust',\n  'font-size-adjust': 'fontSizeAdjust',\n  fontstretch: 'fontStretch',\n  'font-stretch': 'fontStretch',\n  fontstyle: 'fontStyle',\n  'font-style': 'fontStyle',\n  fontvariant: 'fontVariant',\n  'font-variant': 'fontVariant',\n  fontweight: 'fontWeight',\n  'font-weight': 'fontWeight',\n  format: 'format',\n  from: 'from',\n  fx: 'fx',\n  fy: 'fy',\n  g1: 'g1',\n  g2: 'g2',\n  glyphname: 'glyphName',\n  'glyph-name': 'glyphName',\n  glyphorientationhorizontal: 'glyphOrientationHorizontal',\n  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n  glyphorientationvertical: 'glyphOrientationVertical',\n  'glyph-orientation-vertical': 'glyphOrientationVertical',\n  glyphref: 'glyphRef',\n  gradienttransform: 'gradientTransform',\n  gradientunits: 'gradientUnits',\n  hanging: 'hanging',\n  horizadvx: 'horizAdvX',\n  'horiz-adv-x': 'horizAdvX',\n  horizoriginx: 'horizOriginX',\n  'horiz-origin-x': 'horizOriginX',\n  ideographic: 'ideographic',\n  imagerendering: 'imageRendering',\n  'image-rendering': 'imageRendering',\n  in2: 'in2',\n  in: 'in',\n  inlist: 'inlist',\n  intercept: 'intercept',\n  k1: 'k1',\n  k2: 'k2',\n  k3: 'k3',\n  k4: 'k4',\n  k: 'k',\n  kernelmatrix: 'kernelMatrix',\n  kernelunitlength: 'kernelUnitLength',\n  kerning: 'kerning',\n  keypoints: 'keyPoints',\n  keysplines: 'keySplines',\n  keytimes: 'keyTimes',\n  lengthadjust: 'lengthAdjust',\n  letterspacing: 'letterSpacing',\n  'letter-spacing': 'letterSpacing',\n  lightingcolor: 'lightingColor',\n  'lighting-color': 'lightingColor',\n  limitingconeangle: 'limitingConeAngle',\n  local: 'local',\n  markerend: 'markerEnd',\n  'marker-end': 'markerEnd',\n  markerheight: 'markerHeight',\n  markermid: 'markerMid',\n  'marker-mid': 'markerMid',\n  markerstart: 'markerStart',\n  'marker-start': 'markerStart',\n  markerunits: 'markerUnits',\n  markerwidth: 'markerWidth',\n  mask: 'mask',\n  maskcontentunits: 'maskContentUnits',\n  maskunits: 'maskUnits',\n  mathematical: 'mathematical',\n  mode: 'mode',\n  numoctaves: 'numOctaves',\n  offset: 'offset',\n  opacity: 'opacity',\n  operator: 'operator',\n  order: 'order',\n  orient: 'orient',\n  orientation: 'orientation',\n  origin: 'origin',\n  overflow: 'overflow',\n  overlineposition: 'overlinePosition',\n  'overline-position': 'overlinePosition',\n  overlinethickness: 'overlineThickness',\n  'overline-thickness': 'overlineThickness',\n  paintorder: 'paintOrder',\n  'paint-order': 'paintOrder',\n  panose1: 'panose1',\n  'panose-1': 'panose1',\n  pathlength: 'pathLength',\n  patterncontentunits: 'patternContentUnits',\n  patterntransform: 'patternTransform',\n  patternunits: 'patternUnits',\n  pointerevents: 'pointerEvents',\n  'pointer-events': 'pointerEvents',\n  points: 'points',\n  pointsatx: 'pointsAtX',\n  pointsaty: 'pointsAtY',\n  pointsatz: 'pointsAtZ',\n  prefix: 'prefix',\n  preservealpha: 'preserveAlpha',\n  preserveaspectratio: 'preserveAspectRatio',\n  primitiveunits: 'primitiveUnits',\n  property: 'property',\n  r: 'r',\n  radius: 'radius',\n  refx: 'refX',\n  refy: 'refY',\n  renderingintent: 'renderingIntent',\n  'rendering-intent': 'renderingIntent',\n  repeatcount: 'repeatCount',\n  repeatdur: 'repeatDur',\n  requiredextensions: 'requiredExtensions',\n  requiredfeatures: 'requiredFeatures',\n  resource: 'resource',\n  restart: 'restart',\n  result: 'result',\n  results: 'results',\n  rotate: 'rotate',\n  rx: 'rx',\n  ry: 'ry',\n  scale: 'scale',\n  security: 'security',\n  seed: 'seed',\n  shaperendering: 'shapeRendering',\n  'shape-rendering': 'shapeRendering',\n  slope: 'slope',\n  spacing: 'spacing',\n  specularconstant: 'specularConstant',\n  specularexponent: 'specularExponent',\n  speed: 'speed',\n  spreadmethod: 'spreadMethod',\n  startoffset: 'startOffset',\n  stddeviation: 'stdDeviation',\n  stemh: 'stemh',\n  stemv: 'stemv',\n  stitchtiles: 'stitchTiles',\n  stopcolor: 'stopColor',\n  'stop-color': 'stopColor',\n  stopopacity: 'stopOpacity',\n  'stop-opacity': 'stopOpacity',\n  strikethroughposition: 'strikethroughPosition',\n  'strikethrough-position': 'strikethroughPosition',\n  strikethroughthickness: 'strikethroughThickness',\n  'strikethrough-thickness': 'strikethroughThickness',\n  string: 'string',\n  stroke: 'stroke',\n  strokedasharray: 'strokeDasharray',\n  'stroke-dasharray': 'strokeDasharray',\n  strokedashoffset: 'strokeDashoffset',\n  'stroke-dashoffset': 'strokeDashoffset',\n  strokelinecap: 'strokeLinecap',\n  'stroke-linecap': 'strokeLinecap',\n  strokelinejoin: 'strokeLinejoin',\n  'stroke-linejoin': 'strokeLinejoin',\n  strokemiterlimit: 'strokeMiterlimit',\n  'stroke-miterlimit': 'strokeMiterlimit',\n  strokewidth: 'strokeWidth',\n  'stroke-width': 'strokeWidth',\n  strokeopacity: 'strokeOpacity',\n  'stroke-opacity': 'strokeOpacity',\n  suppresscontenteditablewarning: 'suppressContentEditableWarning',\n  suppresshydrationwarning: 'suppressHydrationWarning',\n  surfacescale: 'surfaceScale',\n  systemlanguage: 'systemLanguage',\n  tablevalues: 'tableValues',\n  targetx: 'targetX',\n  targety: 'targetY',\n  textanchor: 'textAnchor',\n  'text-anchor': 'textAnchor',\n  textdecoration: 'textDecoration',\n  'text-decoration': 'textDecoration',\n  textlength: 'textLength',\n  textrendering: 'textRendering',\n  'text-rendering': 'textRendering',\n  to: 'to',\n  transform: 'transform',\n  typeof: 'typeof',\n  u1: 'u1',\n  u2: 'u2',\n  underlineposition: 'underlinePosition',\n  'underline-position': 'underlinePosition',\n  underlinethickness: 'underlineThickness',\n  'underline-thickness': 'underlineThickness',\n  unicode: 'unicode',\n  unicodebidi: 'unicodeBidi',\n  'unicode-bidi': 'unicodeBidi',\n  unicoderange: 'unicodeRange',\n  'unicode-range': 'unicodeRange',\n  unitsperem: 'unitsPerEm',\n  'units-per-em': 'unitsPerEm',\n  unselectable: 'unselectable',\n  valphabetic: 'vAlphabetic',\n  'v-alphabetic': 'vAlphabetic',\n  values: 'values',\n  vectoreffect: 'vectorEffect',\n  'vector-effect': 'vectorEffect',\n  version: 'version',\n  vertadvy: 'vertAdvY',\n  'vert-adv-y': 'vertAdvY',\n  vertoriginx: 'vertOriginX',\n  'vert-origin-x': 'vertOriginX',\n  vertoriginy: 'vertOriginY',\n  'vert-origin-y': 'vertOriginY',\n  vhanging: 'vHanging',\n  'v-hanging': 'vHanging',\n  videographic: 'vIdeographic',\n  'v-ideographic': 'vIdeographic',\n  viewbox: 'viewBox',\n  viewtarget: 'viewTarget',\n  visibility: 'visibility',\n  vmathematical: 'vMathematical',\n  'v-mathematical': 'vMathematical',\n  vocab: 'vocab',\n  widths: 'widths',\n  wordspacing: 'wordSpacing',\n  'word-spacing': 'wordSpacing',\n  writingmode: 'writingMode',\n  'writing-mode': 'writingMode',\n  x1: 'x1',\n  x2: 'x2',\n  x: 'x',\n  xchannelselector: 'xChannelSelector',\n  xheight: 'xHeight',\n  'x-height': 'xHeight',\n  xlinkactuate: 'xlinkActuate',\n  'xlink:actuate': 'xlinkActuate',\n  xlinkarcrole: 'xlinkArcrole',\n  'xlink:arcrole': 'xlinkArcrole',\n  xlinkhref: 'xlinkHref',\n  'xlink:href': 'xlinkHref',\n  xlinkrole: 'xlinkRole',\n  'xlink:role': 'xlinkRole',\n  xlinkshow: 'xlinkShow',\n  'xlink:show': 'xlinkShow',\n  xlinktitle: 'xlinkTitle',\n  'xlink:title': 'xlinkTitle',\n  xlinktype: 'xlinkType',\n  'xlink:type': 'xlinkType',\n  xmlbase: 'xmlBase',\n  'xml:base': 'xmlBase',\n  xmllang: 'xmlLang',\n  'xml:lang': 'xmlLang',\n  xmlns: 'xmlns',\n  'xml:space': 'xmlSpace',\n  xmlnsxlink: 'xmlnsXlink',\n  'xmlns:xlink': 'xmlnsXlink',\n  xmlspace: 'xmlSpace',\n  y1: 'y1',\n  y2: 'y2',\n  y: 'y',\n  ychannelselector: 'yChannelSelector',\n  z: 'z',\n  zoomandpan: 'zoomAndPan'\n};\n\nvar ariaProperties = {\n  'aria-current': 0,\n  // state\n  'aria-details': 0,\n  'aria-disabled': 0,\n  // state\n  'aria-hidden': 0,\n  // state\n  'aria-invalid': 0,\n  // state\n  'aria-keyshortcuts': 0,\n  'aria-label': 0,\n  'aria-roledescription': 0,\n  // Widget Attributes\n  'aria-autocomplete': 0,\n  'aria-checked': 0,\n  'aria-expanded': 0,\n  'aria-haspopup': 0,\n  'aria-level': 0,\n  'aria-modal': 0,\n  'aria-multiline': 0,\n  'aria-multiselectable': 0,\n  'aria-orientation': 0,\n  'aria-placeholder': 0,\n  'aria-pressed': 0,\n  'aria-readonly': 0,\n  'aria-required': 0,\n  'aria-selected': 0,\n  'aria-sort': 0,\n  'aria-valuemax': 0,\n  'aria-valuemin': 0,\n  'aria-valuenow': 0,\n  'aria-valuetext': 0,\n  // Live Region Attributes\n  'aria-atomic': 0,\n  'aria-busy': 0,\n  'aria-live': 0,\n  'aria-relevant': 0,\n  // Drag-and-Drop Attributes\n  'aria-dropeffect': 0,\n  'aria-grabbed': 0,\n  // Relationship Attributes\n  'aria-activedescendant': 0,\n  'aria-colcount': 0,\n  'aria-colindex': 0,\n  'aria-colspan': 0,\n  'aria-controls': 0,\n  'aria-describedby': 0,\n  'aria-errormessage': 0,\n  'aria-flowto': 0,\n  'aria-labelledby': 0,\n  'aria-owns': 0,\n  'aria-posinset': 0,\n  'aria-rowcount': 0,\n  'aria-rowindex': 0,\n  'aria-rowspan': 0,\n  'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\nfunction validateProperty(tagName, name) {\n  {\n    if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) {\n      return true;\n    }\n\n    if (rARIACamel.test(name)) {\n      var ariaName = 'aria-' + name.slice(4).toLowerCase();\n      var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (correctName == null) {\n        error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n        warnedProperties[name] = true;\n        return true;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== correctName) {\n        error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n\n    if (rARIA.test(name)) {\n      var lowerCasedName = name.toLowerCase();\n      var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (standardName == null) {\n        warnedProperties[name] = true;\n        return false;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== standardName) {\n        error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n  }\n\n  return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n  {\n    var invalidProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty(type, key);\n\n      if (!isValid) {\n        invalidProps.push(key);\n      }\n    }\n\n    var unknownPropString = invalidProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (invalidProps.length === 1) {\n      error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n    } else if (invalidProps.length > 1) {\n      error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n    }\n  }\n}\n\nfunction validateProperties(type, props) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n  {\n    if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n      return;\n    }\n\n    if (props != null && props.value === null && !didWarnValueNull) {\n      didWarnValueNull = true;\n\n      if (type === 'select' && props.multiple) {\n        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);\n      } else {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n      }\n    }\n  }\n}\n\nvar validateProperty$1 = function () {};\n\n{\n  var warnedProperties$1 = {};\n  var _hasOwnProperty = Object.prototype.hasOwnProperty;\n  var EVENT_NAME_REGEX = /^on./;\n  var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n  var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n  var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n  validateProperty$1 = function (tagName, name, value, canUseEventSystem) {\n    if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n      return true;\n    }\n\n    var lowerCasedName = name.toLowerCase();\n\n    if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n      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.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // We can't rely on the event system being injected on the server.\n\n\n    if (canUseEventSystem) {\n      if (registrationNameModules.hasOwnProperty(name)) {\n        return true;\n      }\n\n      var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n      if (registrationName != null) {\n        error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n\n      if (EVENT_NAME_REGEX.test(name)) {\n        error('Unknown event handler property `%s`. It will be ignored.', name);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (EVENT_NAME_REGEX.test(name)) {\n      // If no event plugins have been injected, we are in a server environment.\n      // So we can't tell if the event name is correct for sure, but we can filter\n      // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n      if (INVALID_EVENT_NAME_REGEX.test(name)) {\n        error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Let the ARIA attribute hook validate ARIA attributes\n\n\n    if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n      return true;\n    }\n\n    if (lowerCasedName === 'innerhtml') {\n      error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'aria') {\n      error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n      error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'number' && isNaN(value)) {\n      error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    var propertyInfo = getPropertyInfo(name);\n    var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n    if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n      var standardName = possibleStandardNames[lowerCasedName];\n\n      if (standardName !== name) {\n        error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (!isReserved && name !== lowerCasedName) {\n      // Unknown attributes should have lowercase casing since that's how they\n      // will be cased anyway with server rendering.\n      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);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      if (value) {\n        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);\n      } else {\n        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);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Now that we've validated casing, do not validate\n    // data types for reserved props\n\n\n    if (isReserved) {\n      return true;\n    } // Warn when a known attribute is a bad type\n\n\n    if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      warnedProperties$1[name] = true;\n      return false;\n    } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n    if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n      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);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    return true;\n  };\n}\n\nvar warnUnknownProperties = function (type, props, canUseEventSystem) {\n  {\n    var unknownProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty$1(type, key, props[key], canUseEventSystem);\n\n      if (!isValid) {\n        unknownProps.push(key);\n      }\n    }\n\n    var unknownPropString = unknownProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (unknownProps.length === 1) {\n      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);\n    } else if (unknownProps.length > 1) {\n      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);\n    }\n  }\n};\n\nfunction validateProperties$2(type, props, canUseEventSystem) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnUnknownProperties(type, props, canUseEventSystem);\n}\n\nvar didWarnInvalidHydration = false;\nvar DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';\nvar SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';\nvar SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';\nvar AUTOFOCUS = 'autoFocus';\nvar CHILDREN = 'children';\nvar STYLE = 'style';\nvar HTML$1 = '__html';\nvar HTML_NAMESPACE$1 = Namespaces.html;\nvar warnedUnknownTags;\nvar suppressHydrationWarning;\nvar validatePropertiesInDevelopment;\nvar warnForTextDifference;\nvar warnForPropDifference;\nvar warnForExtraAttributes;\nvar warnForInvalidEventListener;\nvar canDiffStyleForHydrationWarning;\nvar normalizeMarkupForTextOrAttribute;\nvar normalizeHTML;\n\n{\n  warnedUnknownTags = {\n    // Chrome is the only major browser not shipping <time>. But as of July\n    // 2017 it intends to ship it due to widespread usage. We intentionally\n    // *don't* warn for <time> even if it's unrecognized by Chrome because\n    // it soon will be, and many apps have been using it anyway.\n    time: true,\n    // There are working polyfills for <dialog>. Let people use it.\n    dialog: true,\n    // Electron ships a custom <webview> tag to display external web content in\n    // an isolated frame and process.\n    // This tag is not present in non Electron environments such as JSDom which\n    // is often used for testing purposes.\n    // @see https://electronjs.org/docs/api/webview-tag\n    webview: true\n  };\n\n  validatePropertiesInDevelopment = function (type, props) {\n    validateProperties(type, props);\n    validateProperties$1(type, props);\n    validateProperties$2(type, props,\n    /* canUseEventSystem */\n    true);\n  }; // IE 11 parses & normalizes the style attribute as opposed to other\n  // browsers. It adds spaces and sorts the properties in some\n  // non-alphabetical order. Handling that would require sorting CSS\n  // properties in the client & server versions or applying\n  // `expectedStyle` to a temporary DOM node to read its `style` attribute\n  // normalized. Since it only affects IE, we're skipping style warnings\n  // in that browser completely in favor of doing all that work.\n  // See https://github.com/facebook/react/issues/11807\n\n\n  canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode; // HTML parsing normalizes CR and CRLF to LF.\n  // It also can turn \\u0000 into \\uFFFD inside attributes.\n  // https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream\n  // If we have a mismatch, it might be caused by that.\n  // We will still patch up in this case but not fire the warning.\n\n  var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g;\n  var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\n\n  normalizeMarkupForTextOrAttribute = function (markup) {\n    var markupString = typeof markup === 'string' ? markup : '' + markup;\n    return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');\n  };\n\n  warnForTextDifference = function (serverText, clientText) {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);\n    var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);\n\n    if (normalizedServerText === normalizedClientText) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Text content did not match. Server: \"%s\" Client: \"%s\"', normalizedServerText, normalizedClientText);\n  };\n\n  warnForPropDifference = function (propName, serverValue, clientValue) {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);\n    var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);\n\n    if (normalizedServerValue === normalizedClientValue) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));\n  };\n\n  warnForExtraAttributes = function (attributeNames) {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n    var names = [];\n    attributeNames.forEach(function (name) {\n      names.push(name);\n    });\n\n    error('Extra attributes from the server: %s', names);\n  };\n\n  warnForInvalidEventListener = function (registrationName, listener) {\n    if (listener === false) {\n      error('Expected `%s` listener to be a function, instead got `false`.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);\n    } else {\n      error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);\n    }\n  }; // Parse the HTML and read it back to normalize the HTML string so that it\n  // can be used for comparison.\n\n\n  normalizeHTML = function (parent, html) {\n    // We could have created a separate document here to avoid\n    // re-initializing custom elements if they exist. But this breaks\n    // how <noscript> is being handled. So we use the same document.\n    // See the discussion in https://github.com/facebook/react/pull/11157.\n    var testElement = parent.namespaceURI === HTML_NAMESPACE$1 ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);\n    testElement.innerHTML = html;\n    return testElement.innerHTML;\n  };\n}\n\nfunction ensureListeningTo(rootContainerElement, registrationName) {\n  var isDocumentOrFragment = rootContainerElement.nodeType === DOCUMENT_NODE || rootContainerElement.nodeType === DOCUMENT_FRAGMENT_NODE;\n  var doc = isDocumentOrFragment ? rootContainerElement : rootContainerElement.ownerDocument;\n  legacyListenToEvent(registrationName, doc);\n}\n\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n}\n\nfunction noop() {}\n\nfunction trapClickOnNonInteractiveElement(node) {\n  // Mobile Safari does not fire properly bubble click events on\n  // non-interactive elements, which means delegated click listeners do not\n  // fire. The workaround for this bug involves attaching an empty click\n  // listener on the target node.\n  // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n  // Just set it using the onclick property so that we don't have to manage any\n  // bookkeeping for it. Not sure if we need to clear it when the listener is\n  // removed.\n  // TODO: Only do this for the relevant Safaris maybe?\n  node.onclick = noop;\n}\n\nfunction setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {\n  for (var propKey in nextProps) {\n    if (!nextProps.hasOwnProperty(propKey)) {\n      continue;\n    }\n\n    var nextProp = nextProps[propKey];\n\n    if (propKey === STYLE) {\n      {\n        if (nextProp) {\n          // Freeze the next style object so that we can assume it won't be\n          // mutated. We have already warned for this in the past.\n          Object.freeze(nextProp);\n        }\n      } // Relies on `updateStylesByID` not mutating `styleUpdates`.\n\n\n      setValueForStyles(domElement, nextProp);\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n\n      if (nextHtml != null) {\n        setInnerHTML(domElement, nextHtml);\n      }\n    } else if (propKey === CHILDREN) {\n      if (typeof nextProp === 'string') {\n        // Avoid setting initial textContent when the text is empty. In IE11 setting\n        // textContent on a <textarea> will cause the placeholder to not\n        // show within the <textarea> until it has been focused and blurred again.\n        // https://github.com/facebook/react/issues/6731#issuecomment-254874553\n        var canSetTextContent = tag !== 'textarea' || nextProp !== '';\n\n        if (canSetTextContent) {\n          setTextContent(domElement, nextProp);\n        }\n      } else if (typeof nextProp === 'number') {\n        setTextContent(domElement, '' + nextProp);\n      }\n    } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        ensureListeningTo(rootContainerElement, propKey);\n      }\n    } else if (nextProp != null) {\n      setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);\n    }\n  }\n}\n\nfunction updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {\n  // TODO: Handle wasCustomComponentTag\n  for (var i = 0; i < updatePayload.length; i += 2) {\n    var propKey = updatePayload[i];\n    var propValue = updatePayload[i + 1];\n\n    if (propKey === STYLE) {\n      setValueForStyles(domElement, propValue);\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      setInnerHTML(domElement, propValue);\n    } else if (propKey === CHILDREN) {\n      setTextContent(domElement, propValue);\n    } else {\n      setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);\n    }\n  }\n}\n\nfunction createElement(type, props, rootContainerElement, parentNamespace) {\n  var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML\n  // tags get no namespace.\n\n  var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);\n  var domElement;\n  var namespaceURI = parentNamespace;\n\n  if (namespaceURI === HTML_NAMESPACE$1) {\n    namespaceURI = getIntrinsicNamespace(type);\n  }\n\n  if (namespaceURI === HTML_NAMESPACE$1) {\n    {\n      isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to\n      // allow <SVG> or <mATH>.\n\n      if (!isCustomComponentTag && type !== type.toLowerCase()) {\n        error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n      }\n    }\n\n    if (type === 'script') {\n      // Create the script via .innerHTML so its \"parser-inserted\" flag is\n      // set to true and it does not execute\n      var div = ownerDocument.createElement('div');\n\n      div.innerHTML = '<script><' + '/script>'; // eslint-disable-line\n      // This is guaranteed to yield a script element.\n\n      var firstChild = div.firstChild;\n      domElement = div.removeChild(firstChild);\n    } else if (typeof props.is === 'string') {\n      // $FlowIssue `createElement` should be updated for Web Components\n      domElement = ownerDocument.createElement(type, {\n        is: props.is\n      });\n    } else {\n      // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n      // See discussion in https://github.com/facebook/react/pull/6896\n      // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n      domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`\n      // attributes on `select`s needs to be added before `option`s are inserted.\n      // This prevents:\n      // - a bug where the `select` does not scroll to the correct option because singular\n      //  `select` elements automatically pick the first item #13222\n      // - a bug where the `select` set the first item as selected despite the `size` attribute #14239\n      // See https://github.com/facebook/react/issues/13222\n      // and https://github.com/facebook/react/issues/14239\n\n      if (type === 'select') {\n        var node = domElement;\n\n        if (props.multiple) {\n          node.multiple = true;\n        } else if (props.size) {\n          // Setting a size greater than 1 causes a select to behave like `multiple=true`, where\n          // it is possible that no option is selected.\n          //\n          // This is only necessary when a select in \"single selection mode\".\n          node.size = props.size;\n        }\n      }\n    }\n  } else {\n    domElement = ownerDocument.createElementNS(namespaceURI, type);\n  }\n\n  {\n    if (namespaceURI === HTML_NAMESPACE$1) {\n      if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !Object.prototype.hasOwnProperty.call(warnedUnknownTags, type)) {\n        warnedUnknownTags[type] = true;\n\n        error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);\n      }\n    }\n  }\n\n  return domElement;\n}\nfunction createTextNode(text, rootContainerElement) {\n  return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);\n}\nfunction setInitialProperties(domElement, tag, rawProps, rootContainerElement) {\n  var isCustomComponentTag = isCustomComponent(tag, rawProps);\n\n  {\n    validatePropertiesInDevelopment(tag, rawProps);\n  } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n  var props;\n\n  switch (tag) {\n    case 'iframe':\n    case 'object':\n    case 'embed':\n      trapBubbledEvent(TOP_LOAD, domElement);\n      props = rawProps;\n      break;\n\n    case 'video':\n    case 'audio':\n      // Create listener for each media event\n      for (var i = 0; i < mediaEventTypes.length; i++) {\n        trapBubbledEvent(mediaEventTypes[i], domElement);\n      }\n\n      props = rawProps;\n      break;\n\n    case 'source':\n      trapBubbledEvent(TOP_ERROR, domElement);\n      props = rawProps;\n      break;\n\n    case 'img':\n    case 'image':\n    case 'link':\n      trapBubbledEvent(TOP_ERROR, domElement);\n      trapBubbledEvent(TOP_LOAD, domElement);\n      props = rawProps;\n      break;\n\n    case 'form':\n      trapBubbledEvent(TOP_RESET, domElement);\n      trapBubbledEvent(TOP_SUBMIT, domElement);\n      props = rawProps;\n      break;\n\n    case 'details':\n      trapBubbledEvent(TOP_TOGGLE, domElement);\n      props = rawProps;\n      break;\n\n    case 'input':\n      initWrapperState(domElement, rawProps);\n      props = getHostProps(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    case 'option':\n      validateProps(domElement, rawProps);\n      props = getHostProps$1(domElement, rawProps);\n      break;\n\n    case 'select':\n      initWrapperState$1(domElement, rawProps);\n      props = getHostProps$2(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    case 'textarea':\n      initWrapperState$2(domElement, rawProps);\n      props = getHostProps$3(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    default:\n      props = rawProps;\n  }\n\n  assertValidProps(tag, props);\n  setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);\n\n  switch (tag) {\n    case 'input':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper(domElement, rawProps, false);\n      break;\n\n    case 'textarea':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper$3(domElement);\n      break;\n\n    case 'option':\n      postMountWrapper$1(domElement, rawProps);\n      break;\n\n    case 'select':\n      postMountWrapper$2(domElement, rawProps);\n      break;\n\n    default:\n      if (typeof props.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n} // Calculate the diff between the two objects.\n\nfunction diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {\n  {\n    validatePropertiesInDevelopment(tag, nextRawProps);\n  }\n\n  var updatePayload = null;\n  var lastProps;\n  var nextProps;\n\n  switch (tag) {\n    case 'input':\n      lastProps = getHostProps(domElement, lastRawProps);\n      nextProps = getHostProps(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    case 'option':\n      lastProps = getHostProps$1(domElement, lastRawProps);\n      nextProps = getHostProps$1(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    case 'select':\n      lastProps = getHostProps$2(domElement, lastRawProps);\n      nextProps = getHostProps$2(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    case 'textarea':\n      lastProps = getHostProps$3(domElement, lastRawProps);\n      nextProps = getHostProps$3(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    default:\n      lastProps = lastRawProps;\n      nextProps = nextRawProps;\n\n      if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n\n  assertValidProps(tag, nextProps);\n  var propKey;\n  var styleName;\n  var styleUpdates = null;\n\n  for (propKey in lastProps) {\n    if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n      continue;\n    }\n\n    if (propKey === STYLE) {\n      var lastStyle = lastProps[propKey];\n\n      for (styleName in lastStyle) {\n        if (lastStyle.hasOwnProperty(styleName)) {\n          if (!styleUpdates) {\n            styleUpdates = {};\n          }\n\n          styleUpdates[styleName] = '';\n        }\n      }\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n      // This is a special case. If any listener updates we need to ensure\n      // that the \"current\" fiber pointer gets updated so we need a commit\n      // to update this element.\n      if (!updatePayload) {\n        updatePayload = [];\n      }\n    } else {\n      // For all other deleted properties we add it to the queue. We use\n      // the whitelist in the commit phase instead.\n      (updatePayload = updatePayload || []).push(propKey, null);\n    }\n  }\n\n  for (propKey in nextProps) {\n    var nextProp = nextProps[propKey];\n    var lastProp = lastProps != null ? lastProps[propKey] : undefined;\n\n    if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n      continue;\n    }\n\n    if (propKey === STYLE) {\n      {\n        if (nextProp) {\n          // Freeze the next style object so that we can assume it won't be\n          // mutated. We have already warned for this in the past.\n          Object.freeze(nextProp);\n        }\n      }\n\n      if (lastProp) {\n        // Unset styles on `lastProp` but not on `nextProp`.\n        for (styleName in lastProp) {\n          if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n            if (!styleUpdates) {\n              styleUpdates = {};\n            }\n\n            styleUpdates[styleName] = '';\n          }\n        } // Update styles that changed since `lastProp`.\n\n\n        for (styleName in nextProp) {\n          if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n            if (!styleUpdates) {\n              styleUpdates = {};\n            }\n\n            styleUpdates[styleName] = nextProp[styleName];\n          }\n        }\n      } else {\n        // Relies on `updateStylesByID` not mutating `styleUpdates`.\n        if (!styleUpdates) {\n          if (!updatePayload) {\n            updatePayload = [];\n          }\n\n          updatePayload.push(propKey, styleUpdates);\n        }\n\n        styleUpdates = nextProp;\n      }\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n      var lastHtml = lastProp ? lastProp[HTML$1] : undefined;\n\n      if (nextHtml != null) {\n        if (lastHtml !== nextHtml) {\n          (updatePayload = updatePayload || []).push(propKey, nextHtml);\n        }\n      }\n    } else if (propKey === CHILDREN) {\n      if (lastProp !== nextProp && (typeof nextProp === 'string' || typeof nextProp === 'number')) {\n        (updatePayload = updatePayload || []).push(propKey, '' + nextProp);\n      }\n    } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        // We eagerly listen to this even though we haven't committed yet.\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        ensureListeningTo(rootContainerElement, propKey);\n      }\n\n      if (!updatePayload && lastProp !== nextProp) {\n        // This is a special case. If any listener updates we need to ensure\n        // that the \"current\" props pointer gets updated so we need a commit\n        // to update this element.\n        updatePayload = [];\n      }\n    } else {\n      // For any other property we always add it to the queue and then we\n      // filter it out using the whitelist during the commit.\n      (updatePayload = updatePayload || []).push(propKey, nextProp);\n    }\n  }\n\n  if (styleUpdates) {\n    {\n      validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);\n    }\n\n    (updatePayload = updatePayload || []).push(STYLE, styleUpdates);\n  }\n\n  return updatePayload;\n} // Apply the diff.\n\nfunction updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {\n  // Update checked *before* name.\n  // In the middle of an update, it is possible to have multiple checked.\n  // When a checked radio tries to change name, browser makes another radio's checked false.\n  if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {\n    updateChecked(domElement, nextRawProps);\n  }\n\n  var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);\n  var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.\n\n  updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props\n  // changed.\n\n  switch (tag) {\n    case 'input':\n      // Update the wrapper around inputs *after* updating props. This has to\n      // happen after `updateDOMProperties`. Otherwise HTML5 input validations\n      // raise warnings and prevent the new value from being assigned.\n      updateWrapper(domElement, nextRawProps);\n      break;\n\n    case 'textarea':\n      updateWrapper$1(domElement, nextRawProps);\n      break;\n\n    case 'select':\n      // <select> value update needs to occur after <option> children\n      // reconciliation\n      postUpdateWrapper(domElement, nextRawProps);\n      break;\n  }\n}\n\nfunction getPossibleStandardName(propName) {\n  {\n    var lowerCasedName = propName.toLowerCase();\n\n    if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n      return null;\n    }\n\n    return possibleStandardNames[lowerCasedName] || null;\n  }\n}\n\nfunction diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement) {\n  var isCustomComponentTag;\n  var extraAttributeNames;\n\n  {\n    suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING] === true;\n    isCustomComponentTag = isCustomComponent(tag, rawProps);\n    validatePropertiesInDevelopment(tag, rawProps);\n  } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n  switch (tag) {\n    case 'iframe':\n    case 'object':\n    case 'embed':\n      trapBubbledEvent(TOP_LOAD, domElement);\n      break;\n\n    case 'video':\n    case 'audio':\n      // Create listener for each media event\n      for (var i = 0; i < mediaEventTypes.length; i++) {\n        trapBubbledEvent(mediaEventTypes[i], domElement);\n      }\n\n      break;\n\n    case 'source':\n      trapBubbledEvent(TOP_ERROR, domElement);\n      break;\n\n    case 'img':\n    case 'image':\n    case 'link':\n      trapBubbledEvent(TOP_ERROR, domElement);\n      trapBubbledEvent(TOP_LOAD, domElement);\n      break;\n\n    case 'form':\n      trapBubbledEvent(TOP_RESET, domElement);\n      trapBubbledEvent(TOP_SUBMIT, domElement);\n      break;\n\n    case 'details':\n      trapBubbledEvent(TOP_TOGGLE, domElement);\n      break;\n\n    case 'input':\n      initWrapperState(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    case 'option':\n      validateProps(domElement, rawProps);\n      break;\n\n    case 'select':\n      initWrapperState$1(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n\n    case 'textarea':\n      initWrapperState$2(domElement, rawProps);\n      trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n      // to onChange. Even if there is no listener.\n\n      ensureListeningTo(rootContainerElement, 'onChange');\n      break;\n  }\n\n  assertValidProps(tag, rawProps);\n\n  {\n    extraAttributeNames = new Set();\n    var attributes = domElement.attributes;\n\n    for (var _i = 0; _i < attributes.length; _i++) {\n      var name = attributes[_i].name.toLowerCase();\n\n      switch (name) {\n        // Built-in SSR attribute is whitelisted\n        case 'data-reactroot':\n          break;\n        // Controlled attributes are not validated\n        // TODO: Only ignore them on controlled tags.\n\n        case 'value':\n          break;\n\n        case 'checked':\n          break;\n\n        case 'selected':\n          break;\n\n        default:\n          // Intentionally use the original name.\n          // See discussion in https://github.com/facebook/react/pull/10676.\n          extraAttributeNames.add(attributes[_i].name);\n      }\n    }\n  }\n\n  var updatePayload = null;\n\n  for (var propKey in rawProps) {\n    if (!rawProps.hasOwnProperty(propKey)) {\n      continue;\n    }\n\n    var nextProp = rawProps[propKey];\n\n    if (propKey === CHILDREN) {\n      // For text content children we compare against textContent. This\n      // might match additional HTML that is hidden when we read it using\n      // textContent. E.g. \"foo\" will match \"f<span>oo</span>\" but that still\n      // satisfies our requirement. Our requirement is not to produce perfect\n      // HTML and attributes. Ideally we should preserve structure but it's\n      // ok not to if the visible content is still enough to indicate what\n      // even listeners these nodes might be wired up to.\n      // TODO: Warn if there is more than a single textNode as a child.\n      // TODO: Should we use domElement.firstChild.nodeValue to compare?\n      if (typeof nextProp === 'string') {\n        if (domElement.textContent !== nextProp) {\n          if ( !suppressHydrationWarning) {\n            warnForTextDifference(domElement.textContent, nextProp);\n          }\n\n          updatePayload = [CHILDREN, nextProp];\n        }\n      } else if (typeof nextProp === 'number') {\n        if (domElement.textContent !== '' + nextProp) {\n          if ( !suppressHydrationWarning) {\n            warnForTextDifference(domElement.textContent, nextProp);\n          }\n\n          updatePayload = [CHILDREN, '' + nextProp];\n        }\n      }\n    } else if (registrationNameModules.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        ensureListeningTo(rootContainerElement, propKey);\n      }\n    } else if ( // Convince Flow we've calculated it (it's DEV-only in this method.)\n    typeof isCustomComponentTag === 'boolean') {\n      // Validate that the properties correspond to their expected values.\n      var serverValue = void 0;\n      var propertyInfo = getPropertyInfo(propKey);\n\n      if (suppressHydrationWarning) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated\n      // TODO: Only ignore them on controlled tags.\n      propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n        var serverHTML = domElement.innerHTML;\n        var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n        var expectedHTML = normalizeHTML(domElement, nextHtml != null ? nextHtml : '');\n\n        if (expectedHTML !== serverHTML) {\n          warnForPropDifference(propKey, serverHTML, expectedHTML);\n        }\n      } else if (propKey === STYLE) {\n        // $FlowFixMe - Should be inferred as not undefined.\n        extraAttributeNames.delete(propKey);\n\n        if (canDiffStyleForHydrationWarning) {\n          var expectedStyle = createDangerousStringForStyles(nextProp);\n          serverValue = domElement.getAttribute('style');\n\n          if (expectedStyle !== serverValue) {\n            warnForPropDifference(propKey, serverValue, expectedStyle);\n          }\n        }\n      } else if (isCustomComponentTag) {\n        // $FlowFixMe - Should be inferred as not undefined.\n        extraAttributeNames.delete(propKey.toLowerCase());\n        serverValue = getValueForAttribute(domElement, propKey, nextProp);\n\n        if (nextProp !== serverValue) {\n          warnForPropDifference(propKey, serverValue, nextProp);\n        }\n      } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {\n        var isMismatchDueToBadCasing = false;\n\n        if (propertyInfo !== null) {\n          // $FlowFixMe - Should be inferred as not undefined.\n          extraAttributeNames.delete(propertyInfo.attributeName);\n          serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);\n        } else {\n          var ownNamespace = parentNamespace;\n\n          if (ownNamespace === HTML_NAMESPACE$1) {\n            ownNamespace = getIntrinsicNamespace(tag);\n          }\n\n          if (ownNamespace === HTML_NAMESPACE$1) {\n            // $FlowFixMe - Should be inferred as not undefined.\n            extraAttributeNames.delete(propKey.toLowerCase());\n          } else {\n            var standardName = getPossibleStandardName(propKey);\n\n            if (standardName !== null && standardName !== propKey) {\n              // If an SVG prop is supplied with bad casing, it will\n              // be successfully parsed from HTML, but will produce a mismatch\n              // (and would be incorrectly rendered on the client).\n              // However, we already warn about bad casing elsewhere.\n              // So we'll skip the misleading extra mismatch warning in this case.\n              isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.\n\n              extraAttributeNames.delete(standardName);\n            } // $FlowFixMe - Should be inferred as not undefined.\n\n\n            extraAttributeNames.delete(propKey);\n          }\n\n          serverValue = getValueForAttribute(domElement, propKey, nextProp);\n        }\n\n        if (nextProp !== serverValue && !isMismatchDueToBadCasing) {\n          warnForPropDifference(propKey, serverValue, nextProp);\n        }\n      }\n    }\n  }\n\n  {\n    // $FlowFixMe - Should be inferred as not undefined.\n    if (extraAttributeNames.size > 0 && !suppressHydrationWarning) {\n      // $FlowFixMe - Should be inferred as not undefined.\n      warnForExtraAttributes(extraAttributeNames);\n    }\n  }\n\n  switch (tag) {\n    case 'input':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper(domElement, rawProps, true);\n      break;\n\n    case 'textarea':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper$3(domElement);\n      break;\n\n    case 'select':\n    case 'option':\n      // For input and textarea we current always set the value property at\n      // post mount to force it to diverge from attributes. However, for\n      // option and select we don't quite do the same thing and select\n      // is not resilient to the DOM state changing so we don't do that here.\n      // TODO: Consider not doing this for input and textarea.\n      break;\n\n    default:\n      if (typeof rawProps.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n\n  return updatePayload;\n}\nfunction diffHydratedText(textNode, text) {\n  var isDifferent = textNode.nodeValue !== text;\n  return isDifferent;\n}\nfunction warnForUnmatchedText(textNode, text) {\n  {\n    warnForTextDifference(textNode.nodeValue, text);\n  }\n}\nfunction warnForDeletedHydratableElement(parentNode, child) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForDeletedHydratableText(parentNode, child) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Did not expect server HTML to contain the text node \"%s\" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForInsertedHydratedElement(parentNode, tag, props) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForInsertedHydratedText(parentNode, text) {\n  {\n    if (text === '') {\n      // We expect to insert empty text nodes since they're not represented in\n      // the HTML.\n      // TODO: Remove this special case if we can just avoid inserting empty\n      // text nodes.\n      return;\n    }\n\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Expected server HTML to contain a matching text node for \"%s\" in <%s>.', text, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction restoreControlledState$3(domElement, tag, props) {\n  switch (tag) {\n    case 'input':\n      restoreControlledState(domElement, props);\n      return;\n\n    case 'textarea':\n      restoreControlledState$2(domElement, props);\n      return;\n\n    case 'select':\n      restoreControlledState$1(domElement, props);\n      return;\n  }\n}\n\nfunction getActiveElement(doc) {\n  doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n  if (typeof doc === 'undefined') {\n    return null;\n  }\n\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n  while (node && node.firstChild) {\n    node = node.firstChild;\n  }\n\n  return node;\n}\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\n\n\nfunction getSiblingNode(node) {\n  while (node) {\n    if (node.nextSibling) {\n      return node.nextSibling;\n    }\n\n    node = node.parentNode;\n  }\n}\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\n\n\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  var nodeStart = 0;\n  var nodeEnd = 0;\n\n  while (node) {\n    if (node.nodeType === TEXT_NODE) {\n      nodeEnd = nodeStart + node.textContent.length;\n\n      if (nodeStart <= offset && nodeEnd >= offset) {\n        return {\n          node: node,\n          offset: offset - nodeStart\n        };\n      }\n\n      nodeStart = nodeEnd;\n    }\n\n    node = getLeafNode(getSiblingNode(node));\n  }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\n\nfunction getOffsets(outerNode) {\n  var ownerDocument = outerNode.ownerDocument;\n  var win = ownerDocument && ownerDocument.defaultView || window;\n  var selection = win.getSelection && win.getSelection();\n\n  if (!selection || selection.rangeCount === 0) {\n    return null;\n  }\n\n  var anchorNode = selection.anchorNode,\n      anchorOffset = selection.anchorOffset,\n      focusNode = selection.focusNode,\n      focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n  // up/down buttons on an <input type=\"number\">. Anonymous divs do not seem to\n  // expose properties, triggering a \"Permission denied error\" if any of its\n  // properties are accessed. The only seemingly possible way to avoid erroring\n  // is to access a property that typically works for non-anonymous divs and\n  // catch any error that may otherwise arise. See\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n  try {\n    /* eslint-disable no-unused-expressions */\n    anchorNode.nodeType;\n    focusNode.nodeType;\n    /* eslint-enable no-unused-expressions */\n  } catch (e) {\n    return null;\n  }\n\n  return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);\n}\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\n\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {\n  var length = 0;\n  var start = -1;\n  var end = -1;\n  var indexWithinAnchor = 0;\n  var indexWithinFocus = 0;\n  var node = outerNode;\n  var parentNode = null;\n\n  outer: while (true) {\n    var next = null;\n\n    while (true) {\n      if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n        start = length + anchorOffset;\n      }\n\n      if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n        end = length + focusOffset;\n      }\n\n      if (node.nodeType === TEXT_NODE) {\n        length += node.nodeValue.length;\n      }\n\n      if ((next = node.firstChild) === null) {\n        break;\n      } // Moving from `node` to its first child `next`.\n\n\n      parentNode = node;\n      node = next;\n    }\n\n    while (true) {\n      if (node === outerNode) {\n        // If `outerNode` has children, this is always the second time visiting\n        // it. If it has no children, this is still the first loop, and the only\n        // valid selection is anchorNode and focusNode both equal to this node\n        // and both offsets 0, in which case we will have handled above.\n        break outer;\n      }\n\n      if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n        start = length;\n      }\n\n      if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {\n        end = length;\n      }\n\n      if ((next = node.nextSibling) !== null) {\n        break;\n      }\n\n      node = parentNode;\n      parentNode = node.parentNode;\n    } // Moving from `node` to its next sibling `next`.\n\n\n    node = next;\n  }\n\n  if (start === -1 || end === -1) {\n    // This should never happen. (Would happen if the anchor/focus nodes aren't\n    // actually inside the passed-in node.)\n    return null;\n  }\n\n  return {\n    start: start,\n    end: end\n  };\n}\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n\nfunction setOffsets(node, offsets) {\n  var doc = node.ownerDocument || document;\n  var win = doc && doc.defaultView || window; // Edge fails with \"Object expected\" in some scenarios.\n  // (For instance: TinyMCE editor used in a list component that supports pasting to add more,\n  // fails when pasting 100+ items)\n\n  if (!win.getSelection) {\n    return;\n  }\n\n  var selection = win.getSelection();\n  var length = node.textContent.length;\n  var start = Math.min(offsets.start, length);\n  var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.\n  // Flip backward selections, so we can set with a single range.\n\n  if (!selection.extend && start > end) {\n    var temp = end;\n    end = start;\n    start = temp;\n  }\n\n  var startMarker = getNodeForCharacterOffset(node, start);\n  var endMarker = getNodeForCharacterOffset(node, end);\n\n  if (startMarker && endMarker) {\n    if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n      return;\n    }\n\n    var range = doc.createRange();\n    range.setStart(startMarker.node, startMarker.offset);\n    selection.removeAllRanges();\n\n    if (start > end) {\n      selection.addRange(range);\n      selection.extend(endMarker.node, endMarker.offset);\n    } else {\n      range.setEnd(endMarker.node, endMarker.offset);\n      selection.addRange(range);\n    }\n  }\n}\n\nfunction isTextNode(node) {\n  return node && node.nodeType === TEXT_NODE;\n}\n\nfunction containsNode(outerNode, innerNode) {\n  if (!outerNode || !innerNode) {\n    return false;\n  } else if (outerNode === innerNode) {\n    return true;\n  } else if (isTextNode(outerNode)) {\n    return false;\n  } else if (isTextNode(innerNode)) {\n    return containsNode(outerNode, innerNode.parentNode);\n  } else if ('contains' in outerNode) {\n    return outerNode.contains(innerNode);\n  } else if (outerNode.compareDocumentPosition) {\n    return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n  } else {\n    return false;\n  }\n}\n\nfunction isInDocument(node) {\n  return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);\n}\n\nfunction isSameOriginFrame(iframe) {\n  try {\n    // Accessing the contentDocument of a HTMLIframeElement can cause the browser\n    // to throw, e.g. if it has a cross-origin src attribute.\n    // Safari will show an error in the console when the access results in \"Blocked a frame with origin\". e.g:\n    // iframe.contentDocument.defaultView;\n    // A safety way is to access one of the cross origin properties: Window or Location\n    // Which might result in \"SecurityError\" DOM Exception and it is compatible to Safari.\n    // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl\n    return typeof iframe.contentWindow.location.href === 'string';\n  } catch (err) {\n    return false;\n  }\n}\n\nfunction getActiveElementDeep() {\n  var win = window;\n  var element = getActiveElement();\n\n  while (element instanceof win.HTMLIFrameElement) {\n    if (isSameOriginFrame(element)) {\n      win = element.contentWindow;\n    } else {\n      return element;\n    }\n\n    element = getActiveElement(win.document);\n  }\n\n  return element;\n}\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\n/**\n * @hasSelectionCapabilities: we get the element types that support selection\n * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`\n * and `selectionEnd` rows.\n */\n\n\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\nfunction getSelectionInformation() {\n  var focusedElem = getActiveElementDeep();\n  return {\n    // Used by Flare\n    activeElementDetached: null,\n    focusedElem: focusedElem,\n    selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null\n  };\n}\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n\nfunction restoreSelection(priorSelectionInformation) {\n  var curFocusedElem = getActiveElementDeep();\n  var priorFocusedElem = priorSelectionInformation.focusedElem;\n  var priorSelectionRange = priorSelectionInformation.selectionRange;\n\n  if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n    if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {\n      setSelection(priorFocusedElem, priorSelectionRange);\n    } // Focusing a node can change the scroll position, which is undesirable\n\n\n    var ancestors = [];\n    var ancestor = priorFocusedElem;\n\n    while (ancestor = ancestor.parentNode) {\n      if (ancestor.nodeType === ELEMENT_NODE) {\n        ancestors.push({\n          element: ancestor,\n          left: ancestor.scrollLeft,\n          top: ancestor.scrollTop\n        });\n      }\n    }\n\n    if (typeof priorFocusedElem.focus === 'function') {\n      priorFocusedElem.focus();\n    }\n\n    for (var i = 0; i < ancestors.length; i++) {\n      var info = ancestors[i];\n      info.element.scrollLeft = info.left;\n      info.element.scrollTop = info.top;\n    }\n  }\n}\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n\nfunction getSelection(input) {\n  var selection;\n\n  if ('selectionStart' in input) {\n    // Modern browser with input or textarea.\n    selection = {\n      start: input.selectionStart,\n      end: input.selectionEnd\n    };\n  } else {\n    // Content editable or old IE textarea.\n    selection = getOffsets(input);\n  }\n\n  return selection || {\n    start: 0,\n    end: 0\n  };\n}\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input     Set selection bounds of this input or textarea\n * -@offsets   Object of same form that is returned from get*\n */\n\nfunction setSelection(input, offsets) {\n  var start = offsets.start,\n      end = offsets.end;\n\n  if (end === undefined) {\n    end = start;\n  }\n\n  if ('selectionStart' in input) {\n    input.selectionStart = start;\n    input.selectionEnd = Math.min(end, input.value.length);\n  } else {\n    setOffsets(input, offsets);\n  }\n}\n\nvar validateDOMNesting = function () {};\n\nvar updatedAncestorInfo = function () {};\n\n{\n  // This validation code was written based on the HTML5 parsing spec:\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  //\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\n  // not clear what practical benefit doing so provides); instead, we warn only\n  // for cases where the parser will give a parse tree differing from what React\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\n  // because it still parses correctly; we do warn for other cases like nested\n  // <p> tags where the beginning of the second element implicitly closes the\n  // first, causing a confusing mess.\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n  // TODO: Distinguish by namespace here -- for <title>, including it here\n  // errs on the side of fewer warnings\n  'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n\n  var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n  var emptyAncestorInfo = {\n    current: null,\n    formTag: null,\n    aTagInScope: null,\n    buttonTagInScope: null,\n    nobrTagInScope: null,\n    pTagInButtonScope: null,\n    listItemTagAutoclosing: null,\n    dlItemTagAutoclosing: null\n  };\n\n  updatedAncestorInfo = function (oldInfo, tag) {\n    var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n\n    var info = {\n      tag: tag\n    };\n\n    if (inScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.aTagInScope = null;\n      ancestorInfo.buttonTagInScope = null;\n      ancestorInfo.nobrTagInScope = null;\n    }\n\n    if (buttonScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.pTagInButtonScope = null;\n    } // See rules for 'li', 'dd', 'dt' start tags in\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n      ancestorInfo.listItemTagAutoclosing = null;\n      ancestorInfo.dlItemTagAutoclosing = null;\n    }\n\n    ancestorInfo.current = info;\n\n    if (tag === 'form') {\n      ancestorInfo.formTag = info;\n    }\n\n    if (tag === 'a') {\n      ancestorInfo.aTagInScope = info;\n    }\n\n    if (tag === 'button') {\n      ancestorInfo.buttonTagInScope = info;\n    }\n\n    if (tag === 'nobr') {\n      ancestorInfo.nobrTagInScope = info;\n    }\n\n    if (tag === 'p') {\n      ancestorInfo.pTagInButtonScope = info;\n    }\n\n    if (tag === 'li') {\n      ancestorInfo.listItemTagAutoclosing = info;\n    }\n\n    if (tag === 'dd' || tag === 'dt') {\n      ancestorInfo.dlItemTagAutoclosing = info;\n    }\n\n    return ancestorInfo;\n  };\n  /**\n   * Returns whether\n   */\n\n\n  var isTagValidWithParent = function (tag, parentTag) {\n    // First, let's check if we're in an unusual parsing mode...\n    switch (parentTag) {\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n      case 'select':\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\n\n      case 'optgroup':\n        return tag === 'option' || tag === '#text';\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n      // but\n\n      case 'option':\n        return tag === '#text';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n      // No special behavior since these rules fall back to \"in body\" mode for\n      // all except special table nodes which cause bad parsing behavior anyway.\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n\n      case 'tr':\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n\n      case 'tbody':\n      case 'thead':\n      case 'tfoot':\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n\n      case 'colgroup':\n        return tag === 'col' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n\n      case 'table':\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n\n      case 'head':\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n\n      case 'html':\n        return tag === 'head' || tag === 'body' || tag === 'frameset';\n\n      case 'frameset':\n        return tag === 'frame';\n\n      case '#document':\n        return tag === 'html';\n    } // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n    // where the parsing rules cause implicit opens or closes to be added.\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n    switch (tag) {\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n      case 'rp':\n      case 'rt':\n        return impliedEndTags.indexOf(parentTag) === -1;\n\n      case 'body':\n      case 'caption':\n      case 'col':\n      case 'colgroup':\n      case 'frameset':\n      case 'frame':\n      case 'head':\n      case 'html':\n      case 'tbody':\n      case 'td':\n      case 'tfoot':\n      case 'th':\n      case 'thead':\n      case 'tr':\n        // These tags are only valid with a few parents that have special child\n        // parsing rules -- if we're down here, then none of those matched and\n        // so we allow it only if we don't know what the parent is, as all other\n        // cases are invalid.\n        return parentTag == null;\n    }\n\n    return true;\n  };\n  /**\n   * Returns whether\n   */\n\n\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n    switch (tag) {\n      case 'address':\n      case 'article':\n      case 'aside':\n      case 'blockquote':\n      case 'center':\n      case 'details':\n      case 'dialog':\n      case 'dir':\n      case 'div':\n      case 'dl':\n      case 'fieldset':\n      case 'figcaption':\n      case 'figure':\n      case 'footer':\n      case 'header':\n      case 'hgroup':\n      case 'main':\n      case 'menu':\n      case 'nav':\n      case 'ol':\n      case 'p':\n      case 'section':\n      case 'summary':\n      case 'ul':\n      case 'pre':\n      case 'listing':\n      case 'table':\n      case 'hr':\n      case 'xmp':\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return ancestorInfo.pTagInButtonScope;\n\n      case 'form':\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n      case 'li':\n        return ancestorInfo.listItemTagAutoclosing;\n\n      case 'dd':\n      case 'dt':\n        return ancestorInfo.dlItemTagAutoclosing;\n\n      case 'button':\n        return ancestorInfo.buttonTagInScope;\n\n      case 'a':\n        // Spec says something about storing a list of markers, but it sounds\n        // equivalent to this check.\n        return ancestorInfo.aTagInScope;\n\n      case 'nobr':\n        return ancestorInfo.nobrTagInScope;\n    }\n\n    return null;\n  };\n\n  var didWarn$1 = {};\n\n  validateDOMNesting = function (childTag, childText, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n\n    if (childText != null) {\n      if (childTag != null) {\n        error('validateDOMNesting: when childText is passed, childTag should be null');\n      }\n\n      childTag = '#text';\n    }\n\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n    var invalidParentOrAncestor = invalidParent || invalidAncestor;\n\n    if (!invalidParentOrAncestor) {\n      return;\n    }\n\n    var ancestorTag = invalidParentOrAncestor.tag;\n    var addendum = getCurrentFiberStackInDev();\n    var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + addendum;\n\n    if (didWarn$1[warnKey]) {\n      return;\n    }\n\n    didWarn$1[warnKey] = true;\n    var tagDisplayName = childTag;\n    var whitespaceInfo = '';\n\n    if (childTag === '#text') {\n      if (/\\S/.test(childText)) {\n        tagDisplayName = 'Text nodes';\n      } else {\n        tagDisplayName = 'Whitespace text nodes';\n        whitespaceInfo = \" Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.';\n      }\n    } else {\n      tagDisplayName = '<' + childTag + '>';\n    }\n\n    if (invalidParent) {\n      var info = '';\n\n      if (ancestorTag === 'table' && childTag === 'tr') {\n        info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';\n      }\n\n      error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);\n    } else {\n      error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);\n    }\n  };\n}\n\nvar SUPPRESS_HYDRATION_WARNING$1;\n\n{\n  SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';\n}\n\nvar SUSPENSE_START_DATA = '$';\nvar SUSPENSE_END_DATA = '/$';\nvar SUSPENSE_PENDING_START_DATA = '$?';\nvar SUSPENSE_FALLBACK_START_DATA = '$!';\nvar STYLE$1 = 'style';\nvar eventsEnabled = null;\nvar selectionInformation = null;\n\nfunction shouldAutoFocusHostComponent(type, props) {\n  switch (type) {\n    case 'button':\n    case 'input':\n    case 'select':\n    case 'textarea':\n      return !!props.autoFocus;\n  }\n\n  return false;\n}\nfunction getRootHostContext(rootContainerInstance) {\n  var type;\n  var namespace;\n  var nodeType = rootContainerInstance.nodeType;\n\n  switch (nodeType) {\n    case DOCUMENT_NODE:\n    case DOCUMENT_FRAGMENT_NODE:\n      {\n        type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';\n        var root = rootContainerInstance.documentElement;\n        namespace = root ? root.namespaceURI : getChildNamespace(null, '');\n        break;\n      }\n\n    default:\n      {\n        var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;\n        var ownNamespace = container.namespaceURI || null;\n        type = container.tagName;\n        namespace = getChildNamespace(ownNamespace, type);\n        break;\n      }\n  }\n\n  {\n    var validatedTag = type.toLowerCase();\n    var ancestorInfo = updatedAncestorInfo(null, validatedTag);\n    return {\n      namespace: namespace,\n      ancestorInfo: ancestorInfo\n    };\n  }\n}\nfunction getChildHostContext(parentHostContext, type, rootContainerInstance) {\n  {\n    var parentHostContextDev = parentHostContext;\n    var namespace = getChildNamespace(parentHostContextDev.namespace, type);\n    var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);\n    return {\n      namespace: namespace,\n      ancestorInfo: ancestorInfo\n    };\n  }\n}\nfunction getPublicInstance(instance) {\n  return instance;\n}\nfunction prepareForCommit(containerInfo) {\n  eventsEnabled = isEnabled();\n  selectionInformation = getSelectionInformation();\n  setEnabled(false);\n}\nfunction resetAfterCommit(containerInfo) {\n  restoreSelection(selectionInformation);\n  setEnabled(eventsEnabled);\n  eventsEnabled = null;\n\n  selectionInformation = null;\n}\nfunction createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n  var parentNamespace;\n\n  {\n    // TODO: take namespace into account when validating.\n    var hostContextDev = hostContext;\n    validateDOMNesting(type, null, hostContextDev.ancestorInfo);\n\n    if (typeof props.children === 'string' || typeof props.children === 'number') {\n      var string = '' + props.children;\n      var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n      validateDOMNesting(null, string, ownAncestorInfo);\n    }\n\n    parentNamespace = hostContextDev.namespace;\n  }\n\n  var domElement = createElement(type, props, rootContainerInstance, parentNamespace);\n  precacheFiberNode(internalInstanceHandle, domElement);\n  updateFiberProps(domElement, props);\n  return domElement;\n}\nfunction appendInitialChild(parentInstance, child) {\n  parentInstance.appendChild(child);\n}\nfunction finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {\n  setInitialProperties(domElement, type, props, rootContainerInstance);\n  return shouldAutoFocusHostComponent(type, props);\n}\nfunction prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {\n  {\n    var hostContextDev = hostContext;\n\n    if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {\n      var string = '' + newProps.children;\n      var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n      validateDOMNesting(null, string, ownAncestorInfo);\n    }\n  }\n\n  return diffProperties(domElement, type, oldProps, newProps, rootContainerInstance);\n}\nfunction shouldSetTextContent(type, props) {\n  return type === 'textarea' || type === 'option' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;\n}\nfunction shouldDeprioritizeSubtree(type, props) {\n  return !!props.hidden;\n}\nfunction createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {\n  {\n    var hostContextDev = hostContext;\n    validateDOMNesting(null, text, hostContextDev.ancestorInfo);\n  }\n\n  var textNode = createTextNode(text, rootContainerInstance);\n  precacheFiberNode(internalInstanceHandle, textNode);\n  return textNode;\n}\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\n\nvar scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\nvar noTimeout = -1; // -------------------\nfunction commitMount(domElement, type, newProps, internalInstanceHandle) {\n  // Despite the naming that might imply otherwise, this method only\n  // fires if there is an `Update` effect scheduled during mounting.\n  // This happens if `finalizeInitialChildren` returns `true` (which it\n  // does to implement the `autoFocus` attribute on the client). But\n  // there are also other cases when this might happen (such as patching\n  // up text content during hydration mismatch). So we'll check this again.\n  if (shouldAutoFocusHostComponent(type, newProps)) {\n    domElement.focus();\n  }\n}\nfunction commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {\n  // Update the props handle so that we know which props are the ones with\n  // with current event handlers.\n  updateFiberProps(domElement, newProps); // Apply the diff to the DOM node.\n\n  updateProperties(domElement, updatePayload, type, oldProps, newProps);\n}\nfunction resetTextContent(domElement) {\n  setTextContent(domElement, '');\n}\nfunction commitTextUpdate(textInstance, oldText, newText) {\n  textInstance.nodeValue = newText;\n}\nfunction appendChild(parentInstance, child) {\n  parentInstance.appendChild(child);\n}\nfunction appendChildToContainer(container, child) {\n  var parentNode;\n\n  if (container.nodeType === COMMENT_NODE) {\n    parentNode = container.parentNode;\n    parentNode.insertBefore(child, container);\n  } else {\n    parentNode = container;\n    parentNode.appendChild(child);\n  } // This container might be used for a portal.\n  // If something inside a portal is clicked, that click should bubble\n  // through the React tree. However, on Mobile Safari the click would\n  // never bubble through the *DOM* tree unless an ancestor with onclick\n  // event exists. So we wouldn't see it and dispatch it.\n  // This is why we ensure that non React root containers have inline onclick\n  // defined.\n  // https://github.com/facebook/react/issues/11918\n\n\n  var reactRootContainer = container._reactRootContainer;\n\n  if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {\n    // TODO: This cast may not be sound for SVG, MathML or custom elements.\n    trapClickOnNonInteractiveElement(parentNode);\n  }\n}\nfunction insertBefore(parentInstance, child, beforeChild) {\n  parentInstance.insertBefore(child, beforeChild);\n}\nfunction insertInContainerBefore(container, child, beforeChild) {\n  if (container.nodeType === COMMENT_NODE) {\n    container.parentNode.insertBefore(child, beforeChild);\n  } else {\n    container.insertBefore(child, beforeChild);\n  }\n}\nfunction removeChild(parentInstance, child) {\n  parentInstance.removeChild(child);\n}\nfunction removeChildFromContainer(container, child) {\n  if (container.nodeType === COMMENT_NODE) {\n    container.parentNode.removeChild(child);\n  } else {\n    container.removeChild(child);\n  }\n}\n\nfunction hideInstance(instance) {\n  // pass host context to this method?\n\n\n  instance = instance;\n  var style = instance.style;\n\n  if (typeof style.setProperty === 'function') {\n    style.setProperty('display', 'none', 'important');\n  } else {\n    style.display = 'none';\n  }\n}\nfunction hideTextInstance(textInstance) {\n  textInstance.nodeValue = '';\n}\nfunction unhideInstance(instance, props) {\n  instance = instance;\n  var styleProp = props[STYLE$1];\n  var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;\n  instance.style.display = dangerousStyleValue('display', display);\n}\nfunction unhideTextInstance(textInstance, text) {\n  textInstance.nodeValue = text;\n} // -------------------\nfunction canHydrateInstance(instance, type, props) {\n  if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {\n    return null;\n  } // This has now been refined to an element node.\n\n\n  return instance;\n}\nfunction canHydrateTextInstance(instance, text) {\n  if (text === '' || instance.nodeType !== TEXT_NODE) {\n    // Empty strings are not parsed by HTML so there won't be a correct match here.\n    return null;\n  } // This has now been refined to a text node.\n\n\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return instance.data === SUSPENSE_PENDING_START_DATA;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return instance.data === SUSPENSE_FALLBACK_START_DATA;\n}\n\nfunction getNextHydratable(node) {\n  // Skip non-hydratable nodes.\n  for (; node != null; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n\n    if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {\n      break;\n    }\n  }\n\n  return node;\n}\n\nfunction getNextHydratableSibling(instance) {\n  return getNextHydratable(instance.nextSibling);\n}\nfunction getFirstHydratableChild(parentInstance) {\n  return getNextHydratable(parentInstance.firstChild);\n}\nfunction hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n  precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events\n  // get attached.\n\n  updateFiberProps(instance, props);\n  var parentNamespace;\n\n  {\n    var hostContextDev = hostContext;\n    parentNamespace = hostContextDev.namespace;\n  }\n\n  return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance);\n}\nfunction hydrateTextInstance(textInstance, text, internalInstanceHandle) {\n  precacheFiberNode(internalInstanceHandle, textInstance);\n  return diffHydratedText(textInstance, text);\n}\nfunction getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n  var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.\n  // There might be nested nodes so we need to keep track of how\n  // deep we are and only break out when we're back on top.\n\n  var depth = 0;\n\n  while (node) {\n    if (node.nodeType === COMMENT_NODE) {\n      var data = node.data;\n\n      if (data === SUSPENSE_END_DATA) {\n        if (depth === 0) {\n          return getNextHydratableSibling(node);\n        } else {\n          depth--;\n        }\n      } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n        depth++;\n      }\n    }\n\n    node = node.nextSibling;\n  } // TODO: Warn, we didn't find the end comment boundary.\n\n\n  return null;\n} // Returns the SuspenseInstance if this node is a direct child of a\n// SuspenseInstance. I.e. if its previous sibling is a Comment with\n// SUSPENSE_x_START_DATA. Otherwise, null.\n\nfunction getParentSuspenseInstance(targetInstance) {\n  var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.\n  // There might be nested nodes so we need to keep track of how\n  // deep we are and only break out when we're back on top.\n\n  var depth = 0;\n\n  while (node) {\n    if (node.nodeType === COMMENT_NODE) {\n      var data = node.data;\n\n      if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n        if (depth === 0) {\n          return node;\n        } else {\n          depth--;\n        }\n      } else if (data === SUSPENSE_END_DATA) {\n        depth++;\n      }\n    }\n\n    node = node.previousSibling;\n  }\n\n  return null;\n}\nfunction commitHydratedContainer(container) {\n  // Retry if any event replaying was blocked on this.\n  retryIfBlockedOn(container);\n}\nfunction commitHydratedSuspenseInstance(suspenseInstance) {\n  // Retry if any event replaying was blocked on this.\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text) {\n  {\n    warnForUnmatchedText(textInstance, text);\n  }\n}\nfunction didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    warnForUnmatchedText(textInstance, text);\n  }\n}\nfunction didNotHydrateContainerInstance(parentContainer, instance) {\n  {\n    if (instance.nodeType === ELEMENT_NODE) {\n      warnForDeletedHydratableElement(parentContainer, instance);\n    } else if (instance.nodeType === COMMENT_NODE) ; else {\n      warnForDeletedHydratableText(parentContainer, instance);\n    }\n  }\n}\nfunction didNotHydrateInstance(parentType, parentProps, parentInstance, instance) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    if (instance.nodeType === ELEMENT_NODE) {\n      warnForDeletedHydratableElement(parentInstance, instance);\n    } else if (instance.nodeType === COMMENT_NODE) ; else {\n      warnForDeletedHydratableText(parentInstance, instance);\n    }\n  }\n}\nfunction didNotFindHydratableContainerInstance(parentContainer, type, props) {\n  {\n    warnForInsertedHydratedElement(parentContainer, type);\n  }\n}\nfunction didNotFindHydratableContainerTextInstance(parentContainer, text) {\n  {\n    warnForInsertedHydratedText(parentContainer, text);\n  }\n}\nfunction didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    warnForInsertedHydratedElement(parentInstance, type);\n  }\n}\nfunction didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    warnForInsertedHydratedText(parentInstance, text);\n  }\n}\nfunction didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance) {\n  if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) ;\n}\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactInternalInstance$' + randomKey;\nvar internalEventHandlersKey = '__reactEventHandlers$' + randomKey;\nvar internalContainerInstanceKey = '__reactContainere$' + randomKey;\nfunction precacheFiberNode(hostInst, node) {\n  node[internalInstanceKey] = hostInst;\n}\nfunction markContainerAsRoot(hostRoot, node) {\n  node[internalContainerInstanceKey] = hostRoot;\n}\nfunction unmarkContainerAsRoot(node) {\n  node[internalContainerInstanceKey] = null;\n}\nfunction isContainerMarkedAsRoot(node) {\n  return !!node[internalContainerInstanceKey];\n} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.\n// If the target node is part of a hydrated or not yet rendered subtree, then\n// this may also return a SuspenseComponent or HostRoot to indicate that.\n// Conceptually the HostRoot fiber is a child of the Container node. So if you\n// pass the Container node as the targetNode, you will not actually get the\n// HostRoot back. To get to the HostRoot, you need to pass a child of it.\n// The same thing applies to Suspense boundaries.\n\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n\n  if (targetInst) {\n    // Don't return HostRoot or SuspenseComponent here.\n    return targetInst;\n  } // If the direct event target isn't a React owned DOM node, we need to look\n  // to see if one of its parents is a React owned DOM node.\n\n\n  var parentNode = targetNode.parentNode;\n\n  while (parentNode) {\n    // We'll check if this is a container root that could include\n    // React nodes in the future. We need to check this first because\n    // if we're a child of a dehydrated container, we need to first\n    // find that inner container before moving on to finding the parent\n    // instance. Note that we don't check this field on  the targetNode\n    // itself because the fibers are conceptually between the container\n    // node and the first child. It isn't surrounding the container node.\n    // If it's not a container, we check if it's an instance.\n    targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];\n\n    if (targetInst) {\n      // Since this wasn't the direct target of the event, we might have\n      // stepped past dehydrated DOM nodes to get here. However they could\n      // also have been non-React nodes. We need to answer which one.\n      // If we the instance doesn't have any children, then there can't be\n      // a nested suspense boundary within it. So we can use this as a fast\n      // bailout. Most of the time, when people add non-React children to\n      // the tree, it is using a ref to a child-less DOM node.\n      // Normally we'd only need to check one of the fibers because if it\n      // has ever gone from having children to deleting them or vice versa\n      // it would have deleted the dehydrated boundary nested inside already.\n      // However, since the HostRoot starts out with an alternate it might\n      // have one on the alternate so we need to check in case this was a\n      // root.\n      var alternate = targetInst.alternate;\n\n      if (targetInst.child !== null || alternate !== null && alternate.child !== null) {\n        // Next we need to figure out if the node that skipped past is\n        // nested within a dehydrated boundary and if so, which one.\n        var suspenseInstance = getParentSuspenseInstance(targetNode);\n\n        while (suspenseInstance !== null) {\n          // We found a suspense instance. That means that we haven't\n          // hydrated it yet. Even though we leave the comments in the\n          // DOM after hydrating, and there are boundaries in the DOM\n          // that could already be hydrated, we wouldn't have found them\n          // through this pass since if the target is hydrated it would\n          // have had an internalInstanceKey on it.\n          // Let's get the fiber associated with the SuspenseComponent\n          // as the deepest instance.\n          var targetSuspenseInst = suspenseInstance[internalInstanceKey];\n\n          if (targetSuspenseInst) {\n            return targetSuspenseInst;\n          } // If we don't find a Fiber on the comment, it might be because\n          // we haven't gotten to hydrate it yet. There might still be a\n          // parent boundary that hasn't above this one so we need to find\n          // the outer most that is known.\n\n\n          suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent\n          // host component also hasn't hydrated yet. We can return it\n          // below since it will bail out on the isMounted check later.\n        }\n      }\n\n      return targetInst;\n    }\n\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n\n  return null;\n}\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\n\nfunction getInstanceFromNode$1(node) {\n  var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];\n\n  if (inst) {\n    if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {\n      return inst;\n    } else {\n      return null;\n    }\n  }\n\n  return null;\n}\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\n\nfunction getNodeFromInstance$1(inst) {\n  if (inst.tag === HostComponent || inst.tag === HostText) {\n    // In Fiber this, is just the state node right now. We assume it will be\n    // a host component or host text.\n    return inst.stateNode;\n  } // Without this first invariant, passing a non-DOM-component triggers the next\n  // invariant for a missing parent, which is super confusing.\n\n\n  {\n    {\n      throw Error( \"getNodeFromInstance: Invalid argument.\" );\n    }\n  }\n}\nfunction getFiberCurrentPropsFromNode$1(node) {\n  return node[internalEventHandlersKey] || null;\n}\nfunction updateFiberProps(node, props) {\n  node[internalEventHandlersKey] = props;\n}\n\nfunction getParent(inst) {\n  do {\n    inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.\n    // That is depending on if we want nested subtrees (layers) to bubble\n    // events to their parent. We could also go through parentNode on the\n    // host node but that wouldn't work for React Native and doesn't let us\n    // do the portal feature.\n  } while (inst && inst.tag !== HostComponent);\n\n  if (inst) {\n    return inst;\n  }\n\n  return null;\n}\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\n\n\nfunction getLowestCommonAncestor(instA, instB) {\n  var depthA = 0;\n\n  for (var tempA = instA; tempA; tempA = getParent(tempA)) {\n    depthA++;\n  }\n\n  var depthB = 0;\n\n  for (var tempB = instB; tempB; tempB = getParent(tempB)) {\n    depthB++;\n  } // If A is deeper, crawl up.\n\n\n  while (depthA - depthB > 0) {\n    instA = getParent(instA);\n    depthA--;\n  } // If B is deeper, crawl up.\n\n\n  while (depthB - depthA > 0) {\n    instB = getParent(instB);\n    depthB--;\n  } // Walk in lockstep until we find a match.\n\n\n  var depth = depthA;\n\n  while (depth--) {\n    if (instA === instB || instA === instB.alternate) {\n      return instA;\n    }\n\n    instA = getParent(instA);\n    instB = getParent(instB);\n  }\n\n  return null;\n}\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\n\nfunction traverseTwoPhase(inst, fn, arg) {\n  var path = [];\n\n  while (inst) {\n    path.push(inst);\n    inst = getParent(inst);\n  }\n\n  var i;\n\n  for (i = path.length; i-- > 0;) {\n    fn(path[i], 'captured', arg);\n  }\n\n  for (i = 0; i < path.length; i++) {\n    fn(path[i], 'bubbled', arg);\n  }\n}\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\n\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n  var common = from && to ? getLowestCommonAncestor(from, to) : null;\n  var pathFrom = [];\n\n  while (true) {\n    if (!from) {\n      break;\n    }\n\n    if (from === common) {\n      break;\n    }\n\n    var alternate = from.alternate;\n\n    if (alternate !== null && alternate === common) {\n      break;\n    }\n\n    pathFrom.push(from);\n    from = getParent(from);\n  }\n\n  var pathTo = [];\n\n  while (true) {\n    if (!to) {\n      break;\n    }\n\n    if (to === common) {\n      break;\n    }\n\n    var _alternate = to.alternate;\n\n    if (_alternate !== null && _alternate === common) {\n      break;\n    }\n\n    pathTo.push(to);\n    to = getParent(to);\n  }\n\n  for (var i = 0; i < pathFrom.length; i++) {\n    fn(pathFrom[i], 'bubbled', argFrom);\n  }\n\n  for (var _i = pathTo.length; _i-- > 0;) {\n    fn(pathTo[_i], 'captured', argTo);\n  }\n}\n\nfunction isInteractive(tag) {\n  return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n  switch (name) {\n    case 'onClick':\n    case 'onClickCapture':\n    case 'onDoubleClick':\n    case 'onDoubleClickCapture':\n    case 'onMouseDown':\n    case 'onMouseDownCapture':\n    case 'onMouseMove':\n    case 'onMouseMoveCapture':\n    case 'onMouseUp':\n    case 'onMouseUpCapture':\n    case 'onMouseEnter':\n      return !!(props.disabled && isInteractive(type));\n\n    default:\n      return false;\n  }\n}\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n\n\nfunction getListener(inst, registrationName) {\n  var listener; // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\n  // live here; needs to be moved to a better place soon\n\n  var stateNode = inst.stateNode;\n\n  if (!stateNode) {\n    // Work in progress (ex: onload events in incremental mode).\n    return null;\n  }\n\n  var props = getFiberCurrentPropsFromNode(stateNode);\n\n  if (!props) {\n    // Work in progress.\n    return null;\n  }\n\n  listener = props[registrationName];\n\n  if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n    return null;\n  }\n\n  if (!(!listener || typeof listener === 'function')) {\n    {\n      throw Error( \"Expected `\" + registrationName + \"` listener to be a function, instead got a value of `\" + typeof listener + \"` type.\" );\n    }\n  }\n\n  return listener;\n}\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n  return getListener(inst, registrationName);\n}\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing even a\n * single one.\n */\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\n\n\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n  {\n    if (!inst) {\n      error('Dispatching inst must not be null');\n    }\n  }\n\n  var listener = listenerAtPhase(inst, event, phase);\n\n  if (listener) {\n    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n    event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n  }\n}\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory.  We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\n\n\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n  }\n}\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\n\n\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n  if (inst && event && event.dispatchConfig.registrationName) {\n    var registrationName = event.dispatchConfig.registrationName;\n    var listener = getListener(inst, registrationName);\n\n    if (listener) {\n      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n      event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n    }\n  }\n}\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\n\n\nfunction accumulateDirectDispatchesSingle(event) {\n  if (event && event.dispatchConfig.registrationName) {\n    accumulateDispatches(event._targetInst, null, event);\n  }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n  traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\nfunction accumulateDirectDispatches(events) {\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\nvar root = null;\nvar startText = null;\nvar fallbackText = null;\nfunction initialize(nativeEventTarget) {\n  root = nativeEventTarget;\n  startText = getText();\n  return true;\n}\nfunction reset() {\n  root = null;\n  startText = null;\n  fallbackText = null;\n}\nfunction getData() {\n  if (fallbackText) {\n    return fallbackText;\n  }\n\n  var start;\n  var startValue = startText;\n  var startLength = startValue.length;\n  var end;\n  var endValue = getText();\n  var endLength = endValue.length;\n\n  for (start = 0; start < startLength; start++) {\n    if (startValue[start] !== endValue[start]) {\n      break;\n    }\n  }\n\n  var minEnd = startLength - start;\n\n  for (end = 1; end <= minEnd; end++) {\n    if (startValue[startLength - end] !== endValue[endLength - end]) {\n      break;\n    }\n  }\n\n  var sliceTail = end > 1 ? 1 - end : undefined;\n  fallbackText = endValue.slice(start, sliceTail);\n  return fallbackText;\n}\nfunction getText() {\n  if ('value' in root) {\n    return root.value;\n  }\n\n  return root.textContent;\n}\n\nvar EVENT_POOL_SIZE = 10;\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar EventInterface = {\n  type: null,\n  target: null,\n  // currentTarget is set when dispatching; no use in copying it here\n  currentTarget: function () {\n    return null;\n  },\n  eventPhase: null,\n  bubbles: null,\n  cancelable: null,\n  timeStamp: function (event) {\n    return event.timeStamp || Date.now();\n  },\n  defaultPrevented: null,\n  isTrusted: null\n};\n\nfunction functionThatReturnsTrue() {\n  return true;\n}\n\nfunction functionThatReturnsFalse() {\n  return false;\n}\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\n\n\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n  {\n    // these have a getter/setter for warnings\n    delete this.nativeEvent;\n    delete this.preventDefault;\n    delete this.stopPropagation;\n    delete this.isDefaultPrevented;\n    delete this.isPropagationStopped;\n  }\n\n  this.dispatchConfig = dispatchConfig;\n  this._targetInst = targetInst;\n  this.nativeEvent = nativeEvent;\n  var Interface = this.constructor.Interface;\n\n  for (var propName in Interface) {\n    if (!Interface.hasOwnProperty(propName)) {\n      continue;\n    }\n\n    {\n      delete this[propName]; // this has a getter/setter for warnings\n    }\n\n    var normalize = Interface[propName];\n\n    if (normalize) {\n      this[propName] = normalize(nativeEvent);\n    } else {\n      if (propName === 'target') {\n        this.target = nativeEventTarget;\n      } else {\n        this[propName] = nativeEvent[propName];\n      }\n    }\n  }\n\n  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n\n  if (defaultPrevented) {\n    this.isDefaultPrevented = functionThatReturnsTrue;\n  } else {\n    this.isDefaultPrevented = functionThatReturnsFalse;\n  }\n\n  this.isPropagationStopped = functionThatReturnsFalse;\n  return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n  preventDefault: function () {\n    this.defaultPrevented = true;\n    var event = this.nativeEvent;\n\n    if (!event) {\n      return;\n    }\n\n    if (event.preventDefault) {\n      event.preventDefault();\n    } else if (typeof event.returnValue !== 'unknown') {\n      event.returnValue = false;\n    }\n\n    this.isDefaultPrevented = functionThatReturnsTrue;\n  },\n  stopPropagation: function () {\n    var event = this.nativeEvent;\n\n    if (!event) {\n      return;\n    }\n\n    if (event.stopPropagation) {\n      event.stopPropagation();\n    } else if (typeof event.cancelBubble !== 'unknown') {\n      // The ChangeEventPlugin registers a \"propertychange\" event for\n      // IE. This event does not support bubbling or cancelling, and\n      // any references to cancelBubble throw \"Member not found\".  A\n      // typeof check of \"unknown\" circumvents this issue (and is also\n      // IE specific).\n      event.cancelBubble = true;\n    }\n\n    this.isPropagationStopped = functionThatReturnsTrue;\n  },\n\n  /**\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\n   * them back into the pool. This allows a way to hold onto a reference that\n   * won't be added back into the pool.\n   */\n  persist: function () {\n    this.isPersistent = functionThatReturnsTrue;\n  },\n\n  /**\n   * Checks if this event should be released back into the pool.\n   *\n   * @return {boolean} True if this should not be released, false otherwise.\n   */\n  isPersistent: functionThatReturnsFalse,\n\n  /**\n   * `PooledClass` looks for `destructor` on each instance it releases.\n   */\n  destructor: function () {\n    var Interface = this.constructor.Interface;\n\n    for (var propName in Interface) {\n      {\n        Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n      }\n    }\n\n    this.dispatchConfig = null;\n    this._targetInst = null;\n    this.nativeEvent = null;\n    this.isDefaultPrevented = functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    this._dispatchListeners = null;\n    this._dispatchInstances = null;\n\n    {\n      Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n      Object.defineProperty(this, 'isDefaultPrevented', getPooledWarningPropertyDefinition('isDefaultPrevented', functionThatReturnsFalse));\n      Object.defineProperty(this, 'isPropagationStopped', getPooledWarningPropertyDefinition('isPropagationStopped', functionThatReturnsFalse));\n      Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', function () {}));\n      Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', function () {}));\n    }\n  }\n});\n\nSyntheticEvent.Interface = EventInterface;\n/**\n * Helper to reduce boilerplate when creating subclasses.\n */\n\nSyntheticEvent.extend = function (Interface) {\n  var Super = this;\n\n  var E = function () {};\n\n  E.prototype = Super.prototype;\n  var prototype = new E();\n\n  function Class() {\n    return Super.apply(this, arguments);\n  }\n\n  _assign(prototype, Class.prototype);\n\n  Class.prototype = prototype;\n  Class.prototype.constructor = Class;\n  Class.Interface = _assign({}, Super.Interface, Interface);\n  Class.extend = Super.extend;\n  addEventPoolingTo(Class);\n  return Class;\n};\n\naddEventPoolingTo(SyntheticEvent);\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {String} propName\n * @param {?object} getVal\n * @return {object} defineProperty object\n */\n\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n  var isFunction = typeof getVal === 'function';\n  return {\n    configurable: true,\n    set: set,\n    get: get\n  };\n\n  function set(val) {\n    var action = isFunction ? 'setting the method' : 'setting the property';\n    warn(action, 'This is effectively a no-op');\n    return val;\n  }\n\n  function get() {\n    var action = isFunction ? 'accessing the method' : 'accessing the property';\n    var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n    warn(action, result);\n    return getVal;\n  }\n\n  function warn(action, result) {\n    {\n      error(\"This synthetic event is reused for performance reasons. If you're seeing this, \" + \"you're %s `%s` on a released/nullified synthetic event. %s. \" + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result);\n    }\n  }\n}\n\nfunction getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) {\n  var EventConstructor = this;\n\n  if (EventConstructor.eventPool.length) {\n    var instance = EventConstructor.eventPool.pop();\n    EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);\n    return instance;\n  }\n\n  return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst);\n}\n\nfunction releasePooledEvent(event) {\n  var EventConstructor = this;\n\n  if (!(event instanceof EventConstructor)) {\n    {\n      throw Error( \"Trying to release an event instance into a pool of a different type.\" );\n    }\n  }\n\n  event.destructor();\n\n  if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) {\n    EventConstructor.eventPool.push(event);\n  }\n}\n\nfunction addEventPoolingTo(EventConstructor) {\n  EventConstructor.eventPool = [];\n  EventConstructor.getPooled = getPooledEvent;\n  EventConstructor.release = releasePooledEvent;\n}\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\n\nvar SyntheticCompositionEvent = SyntheticEvent.extend({\n  data: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n *      /#events-inputevents\n */\n\nvar SyntheticInputEvent = SyntheticEvent.extend({\n  data: null\n});\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\n\nvar START_KEYCODE = 229;\nvar canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\nvar documentMode = null;\n\nif (canUseDOM && 'documentMode' in document) {\n  documentMode = document.documentMode;\n} // Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\n\n\nvar canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\n\nvar useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); // Events and their corresponding property names.\n\nvar eventTypes = {\n  beforeInput: {\n    phasedRegistrationNames: {\n      bubbled: 'onBeforeInput',\n      captured: 'onBeforeInputCapture'\n    },\n    dependencies: [TOP_COMPOSITION_END, TOP_KEY_PRESS, TOP_TEXT_INPUT, TOP_PASTE]\n  },\n  compositionEnd: {\n    phasedRegistrationNames: {\n      bubbled: 'onCompositionEnd',\n      captured: 'onCompositionEndCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_COMPOSITION_END, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n  },\n  compositionStart: {\n    phasedRegistrationNames: {\n      bubbled: 'onCompositionStart',\n      captured: 'onCompositionStartCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n  },\n  compositionUpdate: {\n    phasedRegistrationNames: {\n      bubbled: 'onCompositionUpdate',\n      captured: 'onCompositionUpdateCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_COMPOSITION_UPDATE, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n  }\n}; // Track whether we've ever handled a keypress on the space key.\n\nvar hasSpaceKeypress = false;\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\n\nfunction isKeypressCommand(nativeEvent) {\n  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n  !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\n\n\nfunction getCompositionEventType(topLevelType) {\n  switch (topLevelType) {\n    case TOP_COMPOSITION_START:\n      return eventTypes.compositionStart;\n\n    case TOP_COMPOSITION_END:\n      return eventTypes.compositionEnd;\n\n    case TOP_COMPOSITION_UPDATE:\n      return eventTypes.compositionUpdate;\n  }\n}\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n  return topLevelType === TOP_KEY_DOWN && nativeEvent.keyCode === START_KEYCODE;\n}\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case TOP_KEY_UP:\n      // Command keys insert or clear IME input.\n      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n\n    case TOP_KEY_DOWN:\n      // Expect IME keyCode on each keydown. If we get any other\n      // code we must have exited earlier.\n      return nativeEvent.keyCode !== START_KEYCODE;\n\n    case TOP_KEY_PRESS:\n    case TOP_MOUSE_DOWN:\n    case TOP_BLUR:\n      // Events are not possible without cancelling IME.\n      return true;\n\n    default:\n      return false;\n  }\n}\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\n\n\nfunction getDataFromCustomEvent(nativeEvent) {\n  var detail = nativeEvent.detail;\n\n  if (typeof detail === 'object' && 'data' in detail) {\n    return detail.data;\n  }\n\n  return null;\n}\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isUsingKoreanIME(nativeEvent) {\n  return nativeEvent.locale === 'ko';\n} // Track the current IME composition status, if any.\n\n\nvar isComposing = false;\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\n\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n  var eventType;\n  var fallbackData;\n\n  if (canUseCompositionEvent) {\n    eventType = getCompositionEventType(topLevelType);\n  } else if (!isComposing) {\n    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n      eventType = eventTypes.compositionStart;\n    }\n  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n    eventType = eventTypes.compositionEnd;\n  }\n\n  if (!eventType) {\n    return null;\n  }\n\n  if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {\n    // The current composition is stored statically and must not be\n    // overwritten while composition continues.\n    if (!isComposing && eventType === eventTypes.compositionStart) {\n      isComposing = initialize(nativeEventTarget);\n    } else if (eventType === eventTypes.compositionEnd) {\n      if (isComposing) {\n        fallbackData = getData();\n      }\n    }\n  }\n\n  var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n  if (fallbackData) {\n    // Inject data generated from fallback path into the synthetic event.\n    // This matches the property of native CompositionEventInterface.\n    event.data = fallbackData;\n  } else {\n    var customData = getDataFromCustomEvent(nativeEvent);\n\n    if (customData !== null) {\n      event.data = customData;\n    }\n  }\n\n  accumulateTwoPhaseDispatches(event);\n  return event;\n}\n/**\n * @param {TopLevelType} topLevelType Number from `TopLevelType`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\n\n\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case TOP_COMPOSITION_END:\n      return getDataFromCustomEvent(nativeEvent);\n\n    case TOP_KEY_PRESS:\n      /**\n       * If native `textInput` events are available, our goal is to make\n       * use of them. However, there is a special case: the spacebar key.\n       * In Webkit, preventing default on a spacebar `textInput` event\n       * cancels character insertion, but it *also* causes the browser\n       * to fall back to its default spacebar behavior of scrolling the\n       * page.\n       *\n       * Tracking at:\n       * https://code.google.com/p/chromium/issues/detail?id=355103\n       *\n       * To avoid this issue, use the keypress event as if no `textInput`\n       * event is available.\n       */\n      var which = nativeEvent.which;\n\n      if (which !== SPACEBAR_CODE) {\n        return null;\n      }\n\n      hasSpaceKeypress = true;\n      return SPACEBAR_CHAR;\n\n    case TOP_TEXT_INPUT:\n      // Record the characters to be added to the DOM.\n      var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled\n      // it at the keypress level and bail immediately. Android Chrome\n      // doesn't give us keycodes, so we need to ignore it.\n\n      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n        return null;\n      }\n\n      return chars;\n\n    default:\n      // For other native event types, do nothing.\n      return null;\n  }\n}\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {number} topLevelType Number from `TopLevelEventTypes`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\n\n\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n  // If we are currently composing (IME) and using a fallback to do so,\n  // try to extract the composed characters from the fallback object.\n  // If composition event is available, we extract a string only at\n  // compositionevent, otherwise extract it at fallback events.\n  if (isComposing) {\n    if (topLevelType === TOP_COMPOSITION_END || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n      var chars = getData();\n      reset();\n      isComposing = false;\n      return chars;\n    }\n\n    return null;\n  }\n\n  switch (topLevelType) {\n    case TOP_PASTE:\n      // If a paste event occurs after a keypress, throw out the input\n      // chars. Paste events should not lead to BeforeInput events.\n      return null;\n\n    case TOP_KEY_PRESS:\n      /**\n       * As of v27, Firefox may fire keypress events even when no character\n       * will be inserted. A few possibilities:\n       *\n       * - `which` is `0`. Arrow keys, Esc key, etc.\n       *\n       * - `which` is the pressed key code, but no char is available.\n       *   Ex: 'AltGr + d` in Polish. There is no modified character for\n       *   this key combination and no character is inserted into the\n       *   document, but FF fires the keypress for char code `100` anyway.\n       *   No `input` event will occur.\n       *\n       * - `which` is the pressed key code, but a command combination is\n       *   being used. Ex: `Cmd+C`. No character is inserted, and no\n       *   `input` event will occur.\n       */\n      if (!isKeypressCommand(nativeEvent)) {\n        // IE fires the `keypress` event when a user types an emoji via\n        // Touch keyboard of Windows.  In such a case, the `char` property\n        // holds an emoji character like `\\uD83D\\uDE0A`.  Because its length\n        // is 2, the property `which` does not represent an emoji correctly.\n        // In such a case, we directly return the `char` property instead of\n        // using `which`.\n        if (nativeEvent.char && nativeEvent.char.length > 1) {\n          return nativeEvent.char;\n        } else if (nativeEvent.which) {\n          return String.fromCharCode(nativeEvent.which);\n        }\n      }\n\n      return null;\n\n    case TOP_COMPOSITION_END:\n      return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n\n    default:\n      return null;\n  }\n}\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\n\n\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n  var chars;\n\n  if (canUseTextInputEvent) {\n    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n  } else {\n    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n  } // If no characters are being inserted, no BeforeInput event should\n  // be fired.\n\n\n  if (!chars) {\n    return null;\n  }\n\n  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n  event.data = chars;\n  accumulateTwoPhaseDispatches(event);\n  return event;\n}\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\n\n\nvar BeforeInputEventPlugin = {\n  eventTypes: eventTypes,\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n    var composition = extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n    var beforeInput = extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n\n    if (composition === null) {\n      return beforeInput;\n    }\n\n    if (beforeInput === null) {\n      return composition;\n    }\n\n    return [composition, beforeInput];\n  }\n};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n  color: true,\n  date: true,\n  datetime: true,\n  'datetime-local': true,\n  email: true,\n  month: true,\n  number: true,\n  password: true,\n  range: true,\n  search: true,\n  tel: true,\n  text: true,\n  time: true,\n  url: true,\n  week: true\n};\n\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n  if (nodeName === 'input') {\n    return !!supportedInputTypes[elem.type];\n  }\n\n  if (nodeName === 'textarea') {\n    return true;\n  }\n\n  return false;\n}\n\nvar eventTypes$1 = {\n  change: {\n    phasedRegistrationNames: {\n      bubbled: 'onChange',\n      captured: 'onChangeCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_CHANGE, TOP_CLICK, TOP_FOCUS, TOP_INPUT, TOP_KEY_DOWN, TOP_KEY_UP, TOP_SELECTION_CHANGE]\n  }\n};\n\nfunction createAndAccumulateChangeEvent(inst, nativeEvent, target) {\n  var event = SyntheticEvent.getPooled(eventTypes$1.change, inst, nativeEvent, target);\n  event.type = 'change'; // Flag this event loop as needing state restore.\n\n  enqueueStateRestore(target);\n  accumulateTwoPhaseDispatches(event);\n  return event;\n}\n/**\n * For IE shims\n */\n\n\nvar activeElement = null;\nvar activeElementInst = null;\n/**\n * SECTION: handle `change` event\n */\n\nfunction shouldUseChangeEvent(elem) {\n  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n  var event = createAndAccumulateChangeEvent(activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the\n  // other events and have it go through ReactBrowserEventEmitter. Since it\n  // doesn't, we manually listen for the events and so we have to enqueue and\n  // process the abstract event manually.\n  //\n  // Batching is necessary here in order to ensure that all event handlers run\n  // before the next rerender (including event handlers attached to ancestor\n  // elements instead of directly on the input). Without this, controlled\n  // components don't work properly in conjunction with event bubbling because\n  // the component is rerendered and the value reverted before all the event\n  // handlers can run. See https://github.com/facebook/react/issues/708.\n\n  batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n  runEventsInBatch(event);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance$1(targetInst);\n\n  if (updateValueIfChanged(targetNode)) {\n    return targetInst;\n  }\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n  if (topLevelType === TOP_CHANGE) {\n    return targetInst;\n  }\n}\n/**\n * SECTION: handle `input` event\n */\n\n\nvar isInputEventSupported = false;\n\nif (canUseDOM) {\n  // IE9 claims to support the input event but fails to trigger it when\n  // deleting text, so we ignore its input events.\n  isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\n\n\nfunction startWatchingForValueChange(target, targetInst) {\n  activeElement = target;\n  activeElementInst = targetInst;\n  activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\n\n\nfunction stopWatchingForValueChange() {\n  if (!activeElement) {\n    return;\n  }\n\n  activeElement.detachEvent('onpropertychange', handlePropertyChange);\n  activeElement = null;\n  activeElementInst = null;\n}\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\n\n\nfunction handlePropertyChange(nativeEvent) {\n  if (nativeEvent.propertyName !== 'value') {\n    return;\n  }\n\n  if (getInstIfValueChanged(activeElementInst)) {\n    manualDispatchChangeEvent(nativeEvent);\n  }\n}\n\nfunction handleEventsForInputEventPolyfill(topLevelType, target, targetInst) {\n  if (topLevelType === TOP_FOCUS) {\n    // In IE9, propertychange fires for most input events but is buggy and\n    // doesn't fire when text is deleted, but conveniently, selectionchange\n    // appears to fire in all of the remaining cases so we catch those and\n    // forward the event if the value has changed\n    // In either case, we don't want to call the event handler if the value\n    // is changed from JS so we redefine a setter for `.value` that updates\n    // our activeElementValue variable, allowing us to ignore those changes\n    //\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForValueChange();\n    startWatchingForValueChange(target, targetInst);\n  } else if (topLevelType === TOP_BLUR) {\n    stopWatchingForValueChange();\n  }\n} // For IE8 and IE9.\n\n\nfunction getTargetInstForInputEventPolyfill(topLevelType, targetInst) {\n  if (topLevelType === TOP_SELECTION_CHANGE || topLevelType === TOP_KEY_UP || topLevelType === TOP_KEY_DOWN) {\n    // On the selectionchange event, the target is just document which isn't\n    // helpful for us so just check activeElement instead.\n    //\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n    // propertychange on the first input event after setting `value` from a\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\n    // gets it and catching keydown lets us fire an event for the first\n    // keystroke if user does a key repeat (it'll be a little delayed: right\n    // before the second keystroke). Other input methods (e.g., paste) seem to\n    // fire selectionchange normally.\n    return getInstIfValueChanged(activeElementInst);\n  }\n}\n/**\n * SECTION: handle `click` event\n */\n\n\nfunction shouldUseClickEvent(elem) {\n  // Use the `click` event to detect changes to checkbox and radio inputs.\n  // This approach works across all browsers, whereas `change` does not fire\n  // until `blur` in IE8.\n  var nodeName = elem.nodeName;\n  return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n  if (topLevelType === TOP_CLICK) {\n    return getInstIfValueChanged(targetInst);\n  }\n}\n\nfunction getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {\n  if (topLevelType === TOP_INPUT || topLevelType === TOP_CHANGE) {\n    return getInstIfValueChanged(targetInst);\n  }\n}\n\nfunction handleControlledInputBlur(node) {\n  var state = node._wrapperState;\n\n  if (!state || !state.controlled || node.type !== 'number') {\n    return;\n  }\n\n  {\n    // If controlled, assign the value attribute to the current value on blur\n    setDefaultValue(node, 'number', node.value);\n  }\n}\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\n\n\nvar ChangeEventPlugin = {\n  eventTypes: eventTypes$1,\n  _isInputEventSupported: isInputEventSupported,\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n    var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n    var getTargetInstFunc, handleEventFunc;\n\n    if (shouldUseChangeEvent(targetNode)) {\n      getTargetInstFunc = getTargetInstForChangeEvent;\n    } else if (isTextInputElement(targetNode)) {\n      if (isInputEventSupported) {\n        getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n      } else {\n        getTargetInstFunc = getTargetInstForInputEventPolyfill;\n        handleEventFunc = handleEventsForInputEventPolyfill;\n      }\n    } else if (shouldUseClickEvent(targetNode)) {\n      getTargetInstFunc = getTargetInstForClickEvent;\n    }\n\n    if (getTargetInstFunc) {\n      var inst = getTargetInstFunc(topLevelType, targetInst);\n\n      if (inst) {\n        var event = createAndAccumulateChangeEvent(inst, nativeEvent, nativeEventTarget);\n        return event;\n      }\n    }\n\n    if (handleEventFunc) {\n      handleEventFunc(topLevelType, targetNode, targetInst);\n    } // When blurring, set the value attribute for number inputs\n\n\n    if (topLevelType === TOP_BLUR) {\n      handleControlledInputBlur(targetNode);\n    }\n  }\n};\n\nvar SyntheticUIEvent = SyntheticEvent.extend({\n  view: null,\n  detail: null\n});\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\nvar modifierKeyToProp = {\n  Alt: 'altKey',\n  Control: 'ctrlKey',\n  Meta: 'metaKey',\n  Shift: 'shiftKey'\n}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support\n// getModifierState. If getModifierState is not supported, we map it to a set of\n// modifier keys exposed by the event. In this case, Lock-keys are not supported.\n\nfunction modifierStateGetter(keyArg) {\n  var syntheticEvent = this;\n  var nativeEvent = syntheticEvent.nativeEvent;\n\n  if (nativeEvent.getModifierState) {\n    return nativeEvent.getModifierState(keyArg);\n  }\n\n  var keyProp = modifierKeyToProp[keyArg];\n  return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n  return modifierStateGetter;\n}\n\nvar previousScreenX = 0;\nvar previousScreenY = 0; // Use flags to signal movementX/Y has already been set\n\nvar isMovementXSet = false;\nvar isMovementYSet = false;\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticMouseEvent = SyntheticUIEvent.extend({\n  screenX: null,\n  screenY: null,\n  clientX: null,\n  clientY: null,\n  pageX: null,\n  pageY: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  getModifierState: getEventModifierState,\n  button: null,\n  buttons: null,\n  relatedTarget: function (event) {\n    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n  },\n  movementX: function (event) {\n    if ('movementX' in event) {\n      return event.movementX;\n    }\n\n    var screenX = previousScreenX;\n    previousScreenX = event.screenX;\n\n    if (!isMovementXSet) {\n      isMovementXSet = true;\n      return 0;\n    }\n\n    return event.type === 'mousemove' ? event.screenX - screenX : 0;\n  },\n  movementY: function (event) {\n    if ('movementY' in event) {\n      return event.movementY;\n    }\n\n    var screenY = previousScreenY;\n    previousScreenY = event.screenY;\n\n    if (!isMovementYSet) {\n      isMovementYSet = true;\n      return 0;\n    }\n\n    return event.type === 'mousemove' ? event.screenY - screenY : 0;\n  }\n});\n\n/**\n * @interface PointerEvent\n * @see http://www.w3.org/TR/pointerevents/\n */\n\nvar SyntheticPointerEvent = SyntheticMouseEvent.extend({\n  pointerId: null,\n  width: null,\n  height: null,\n  pressure: null,\n  tangentialPressure: null,\n  tiltX: null,\n  tiltY: null,\n  twist: null,\n  pointerType: null,\n  isPrimary: null\n});\n\nvar eventTypes$2 = {\n  mouseEnter: {\n    registrationName: 'onMouseEnter',\n    dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n  },\n  mouseLeave: {\n    registrationName: 'onMouseLeave',\n    dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n  },\n  pointerEnter: {\n    registrationName: 'onPointerEnter',\n    dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n  },\n  pointerLeave: {\n    registrationName: 'onPointerLeave',\n    dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n  }\n};\nvar EnterLeaveEventPlugin = {\n  eventTypes: eventTypes$2,\n\n  /**\n   * For almost every interaction we care about, there will be both a top-level\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n   * we do not extract duplicate events. However, moving the mouse into the\n   * browser from outside will not fire a `mouseout` event. In this case, we use\n   * the `mouseover` top-level event.\n   */\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n    var isOverEvent = topLevelType === TOP_MOUSE_OVER || topLevelType === TOP_POINTER_OVER;\n    var isOutEvent = topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_POINTER_OUT;\n\n    if (isOverEvent && (eventSystemFlags & IS_REPLAYED) === 0 && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n      // If this is an over event with a target, then we've already dispatched\n      // the event in the out event of the other target. If this is replayed,\n      // then it's because we couldn't dispatch against this target previously\n      // so we have to do it now instead.\n      return null;\n    }\n\n    if (!isOutEvent && !isOverEvent) {\n      // Must not be a mouse or pointer in or out - ignoring.\n      return null;\n    }\n\n    var win;\n\n    if (nativeEventTarget.window === nativeEventTarget) {\n      // `nativeEventTarget` is probably a window object.\n      win = nativeEventTarget;\n    } else {\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n      var doc = nativeEventTarget.ownerDocument;\n\n      if (doc) {\n        win = doc.defaultView || doc.parentWindow;\n      } else {\n        win = window;\n      }\n    }\n\n    var from;\n    var to;\n\n    if (isOutEvent) {\n      from = targetInst;\n      var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n      to = related ? getClosestInstanceFromNode(related) : null;\n\n      if (to !== null) {\n        var nearestMounted = getNearestMountedFiber(to);\n\n        if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {\n          to = null;\n        }\n      }\n    } else {\n      // Moving to a node from outside the window.\n      from = null;\n      to = targetInst;\n    }\n\n    if (from === to) {\n      // Nothing pertains to our managed components.\n      return null;\n    }\n\n    var eventInterface, leaveEventType, enterEventType, eventTypePrefix;\n\n    if (topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_MOUSE_OVER) {\n      eventInterface = SyntheticMouseEvent;\n      leaveEventType = eventTypes$2.mouseLeave;\n      enterEventType = eventTypes$2.mouseEnter;\n      eventTypePrefix = 'mouse';\n    } else if (topLevelType === TOP_POINTER_OUT || topLevelType === TOP_POINTER_OVER) {\n      eventInterface = SyntheticPointerEvent;\n      leaveEventType = eventTypes$2.pointerLeave;\n      enterEventType = eventTypes$2.pointerEnter;\n      eventTypePrefix = 'pointer';\n    }\n\n    var fromNode = from == null ? win : getNodeFromInstance$1(from);\n    var toNode = to == null ? win : getNodeFromInstance$1(to);\n    var leave = eventInterface.getPooled(leaveEventType, from, nativeEvent, nativeEventTarget);\n    leave.type = eventTypePrefix + 'leave';\n    leave.target = fromNode;\n    leave.relatedTarget = toNode;\n    var enter = eventInterface.getPooled(enterEventType, to, nativeEvent, nativeEventTarget);\n    enter.type = eventTypePrefix + 'enter';\n    enter.target = toNode;\n    enter.relatedTarget = fromNode;\n    accumulateEnterLeaveDispatches(leave, enter, from, to); // If we are not processing the first ancestor, then we\n    // should not process the same nativeEvent again, as we\n    // will have already processed it in the first ancestor.\n\n    if ((eventSystemFlags & IS_FIRST_ANCESTOR) === 0) {\n      return [leave];\n    }\n\n    return [leave, enter];\n  }\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n  ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\n\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  } // Test for A's keys different from B.\n\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwnProperty$2.call(objB, keysA[i]) || !objectIs(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvar skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;\nvar eventTypes$3 = {\n  select: {\n    phasedRegistrationNames: {\n      bubbled: 'onSelect',\n      captured: 'onSelectCapture'\n    },\n    dependencies: [TOP_BLUR, TOP_CONTEXT_MENU, TOP_DRAG_END, TOP_FOCUS, TOP_KEY_DOWN, TOP_KEY_UP, TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_SELECTION_CHANGE]\n  }\n};\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\nvar lastSelection = null;\nvar mouseDown = false;\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\n\nfunction getSelection$1(node) {\n  if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n    return {\n      start: node.selectionStart,\n      end: node.selectionEnd\n    };\n  } else {\n    var win = node.ownerDocument && node.ownerDocument.defaultView || window;\n    var selection = win.getSelection();\n    return {\n      anchorNode: selection.anchorNode,\n      anchorOffset: selection.anchorOffset,\n      focusNode: selection.focusNode,\n      focusOffset: selection.focusOffset\n    };\n  }\n}\n/**\n * Get document associated with the event target.\n *\n * @param {object} nativeEventTarget\n * @return {Document}\n */\n\n\nfunction getEventTargetDocument(eventTarget) {\n  return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;\n}\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */\n\n\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n  // Ensure we have the right element, and that the user is not dragging a\n  // selection (this matches native `select` event behavior). In HTML5, select\n  // fires only on input and textarea thus if there's no focused element we\n  // won't dispatch.\n  var doc = getEventTargetDocument(nativeEventTarget);\n\n  if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {\n    return null;\n  } // Only fire when selection has actually changed.\n\n\n  var currentSelection = getSelection$1(activeElement$1);\n\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n    lastSelection = currentSelection;\n    var syntheticEvent = SyntheticEvent.getPooled(eventTypes$3.select, activeElementInst$1, nativeEvent, nativeEventTarget);\n    syntheticEvent.type = 'select';\n    syntheticEvent.target = activeElement$1;\n    accumulateTwoPhaseDispatches(syntheticEvent);\n    return syntheticEvent;\n  }\n\n  return null;\n}\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\n\n\nvar SelectEventPlugin = {\n  eventTypes: eventTypes$3,\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, container) {\n    var containerOrDoc = container || getEventTargetDocument(nativeEventTarget); // Track whether all listeners exists for this plugin. If none exist, we do\n    // not extract events. See #3639.\n\n    if (!containerOrDoc || !isListeningToAllDependencies('onSelect', containerOrDoc)) {\n      return null;\n    }\n\n    var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n\n    switch (topLevelType) {\n      // Track the input node that has focus.\n      case TOP_FOCUS:\n        if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n          activeElement$1 = targetNode;\n          activeElementInst$1 = targetInst;\n          lastSelection = null;\n        }\n\n        break;\n\n      case TOP_BLUR:\n        activeElement$1 = null;\n        activeElementInst$1 = null;\n        lastSelection = null;\n        break;\n      // Don't fire the event while the user is dragging. This matches the\n      // semantics of the native select event.\n\n      case TOP_MOUSE_DOWN:\n        mouseDown = true;\n        break;\n\n      case TOP_CONTEXT_MENU:\n      case TOP_MOUSE_UP:\n      case TOP_DRAG_END:\n        mouseDown = false;\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n      // Chrome and IE fire non-standard event when selection is changed (and\n      // sometimes when it hasn't). IE's event fires out of order with respect\n      // to key and input events on deletion, so we discard it.\n      //\n      // Firefox doesn't support selectionchange, so check selection status\n      // after each key entry. The selection changes after keydown and before\n      // keyup, but we check on keydown as well in the case of holding down a\n      // key, when multiple keydown events are fired but only one keyup is.\n      // This is also our approach for IE handling, for the reason above.\n\n      case TOP_SELECTION_CHANGE:\n        if (skipSelectionChangeEvent) {\n          break;\n        }\n\n      // falls through\n\n      case TOP_KEY_DOWN:\n      case TOP_KEY_UP:\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n    }\n\n    return null;\n  }\n};\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\n\nvar SyntheticAnimationEvent = SyntheticEvent.extend({\n  animationName: null,\n  elapsedTime: null,\n  pseudoElement: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\n\nvar SyntheticClipboardEvent = SyntheticEvent.extend({\n  clipboardData: function (event) {\n    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n  }\n});\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticFocusEvent = SyntheticUIEvent.extend({\n  relatedTarget: null\n});\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n  var charCode;\n  var keyCode = nativeEvent.keyCode;\n\n  if ('charCode' in nativeEvent) {\n    charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n\n    if (charCode === 0 && keyCode === 13) {\n      charCode = 13;\n    }\n  } else {\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n    charCode = keyCode;\n  } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)\n  // report Enter as charCode 10 when ctrl is pressed.\n\n\n  if (charCode === 10) {\n    charCode = 13;\n  } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n  // Must not discard the (non-)printable Enter-key.\n\n\n  if (charCode >= 32 || charCode === 13) {\n    return charCode;\n  }\n\n  return 0;\n}\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar normalizeKey = {\n  Esc: 'Escape',\n  Spacebar: ' ',\n  Left: 'ArrowLeft',\n  Up: 'ArrowUp',\n  Right: 'ArrowRight',\n  Down: 'ArrowDown',\n  Del: 'Delete',\n  Win: 'OS',\n  Menu: 'ContextMenu',\n  Apps: 'ContextMenu',\n  Scroll: 'ScrollLock',\n  MozPrintableKey: 'Unidentified'\n};\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar translateToKey = {\n  '8': 'Backspace',\n  '9': 'Tab',\n  '12': 'Clear',\n  '13': 'Enter',\n  '16': 'Shift',\n  '17': 'Control',\n  '18': 'Alt',\n  '19': 'Pause',\n  '20': 'CapsLock',\n  '27': 'Escape',\n  '32': ' ',\n  '33': 'PageUp',\n  '34': 'PageDown',\n  '35': 'End',\n  '36': 'Home',\n  '37': 'ArrowLeft',\n  '38': 'ArrowUp',\n  '39': 'ArrowRight',\n  '40': 'ArrowDown',\n  '45': 'Insert',\n  '46': 'Delete',\n  '112': 'F1',\n  '113': 'F2',\n  '114': 'F3',\n  '115': 'F4',\n  '116': 'F5',\n  '117': 'F6',\n  '118': 'F7',\n  '119': 'F8',\n  '120': 'F9',\n  '121': 'F10',\n  '122': 'F11',\n  '123': 'F12',\n  '144': 'NumLock',\n  '145': 'ScrollLock',\n  '224': 'Meta'\n};\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\n\nfunction getEventKey(nativeEvent) {\n  if (nativeEvent.key) {\n    // Normalize inconsistent values reported by browsers due to\n    // implementations of a working draft specification.\n    // FireFox implements `key` but returns `MozPrintableKey` for all\n    // printable characters (normalized to `Unidentified`), ignore it.\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n\n    if (key !== 'Unidentified') {\n      return key;\n    }\n  } // Browser does not implement `key`, polyfill as much of it as we can.\n\n\n  if (nativeEvent.type === 'keypress') {\n    var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can\n    // thus be captured by `keypress`, no other non-printable key should.\n\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n  }\n\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n    // While user keyboard layout determines the actual meaning of each\n    // `keyCode` value, almost all function keys have a universal value.\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n  }\n\n  return '';\n}\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticKeyboardEvent = SyntheticUIEvent.extend({\n  key: getEventKey,\n  location: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  repeat: null,\n  locale: null,\n  getModifierState: getEventModifierState,\n  // Legacy Interface\n  charCode: function (event) {\n    // `charCode` is the result of a KeyPress event and represents the value of\n    // the actual printable character.\n    // KeyPress is deprecated, but its replacement is not yet final and not\n    // implemented in any major browser. Only KeyPress has charCode.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n\n    return 0;\n  },\n  keyCode: function (event) {\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\n    // physical keyboard key.\n    // The actual meaning of the value depends on the users' keyboard layout\n    // which cannot be detected. Assuming that it is a US keyboard layout\n    // provides a surprisingly accurate mapping for US and European users.\n    // Due to this, it is left to the user to implement at this time.\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n\n    return 0;\n  },\n  which: function (event) {\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\n    // type of the event.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n\n    return 0;\n  }\n});\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticDragEvent = SyntheticMouseEvent.extend({\n  dataTransfer: null\n});\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\n\nvar SyntheticTouchEvent = SyntheticUIEvent.extend({\n  touches: null,\n  targetTouches: null,\n  changedTouches: null,\n  altKey: null,\n  metaKey: null,\n  ctrlKey: null,\n  shiftKey: null,\n  getModifierState: getEventModifierState\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\n\nvar SyntheticTransitionEvent = SyntheticEvent.extend({\n  propertyName: null,\n  elapsedTime: null,\n  pseudoElement: null\n});\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticWheelEvent = SyntheticMouseEvent.extend({\n  deltaX: function (event) {\n    return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n  },\n  deltaY: function (event) {\n    return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n    'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n    'wheelDelta' in event ? -event.wheelDelta : 0;\n  },\n  deltaZ: null,\n  // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n  deltaMode: null\n});\n\nvar knownHTMLTopLevelTypes = [TOP_ABORT, TOP_CANCEL, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_CLOSE, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_INPUT, TOP_INVALID, TOP_LOAD, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_RESET, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUBMIT, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_TOGGLE, TOP_VOLUME_CHANGE, TOP_WAITING];\nvar SimpleEventPlugin = {\n  // simpleEventPluginEventTypes gets populated from\n  // the DOMEventProperties module.\n  eventTypes: simpleEventPluginEventTypes,\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n    var dispatchConfig = topLevelEventsToDispatchConfig.get(topLevelType);\n\n    if (!dispatchConfig) {\n      return null;\n    }\n\n    var EventConstructor;\n\n    switch (topLevelType) {\n      case TOP_KEY_PRESS:\n        // Firefox creates a keypress event for function keys too. This removes\n        // the unwanted keypress events. Enter is however both printable and\n        // non-printable. One would expect Tab to be as well (but it isn't).\n        if (getEventCharCode(nativeEvent) === 0) {\n          return null;\n        }\n\n      /* falls through */\n\n      case TOP_KEY_DOWN:\n      case TOP_KEY_UP:\n        EventConstructor = SyntheticKeyboardEvent;\n        break;\n\n      case TOP_BLUR:\n      case TOP_FOCUS:\n        EventConstructor = SyntheticFocusEvent;\n        break;\n\n      case TOP_CLICK:\n        // Firefox creates a click event on right mouse clicks. This removes the\n        // unwanted click events.\n        if (nativeEvent.button === 2) {\n          return null;\n        }\n\n      /* falls through */\n\n      case TOP_AUX_CLICK:\n      case TOP_DOUBLE_CLICK:\n      case TOP_MOUSE_DOWN:\n      case TOP_MOUSE_MOVE:\n      case TOP_MOUSE_UP: // TODO: Disabled elements should not respond to mouse events\n\n      /* falls through */\n\n      case TOP_MOUSE_OUT:\n      case TOP_MOUSE_OVER:\n      case TOP_CONTEXT_MENU:\n        EventConstructor = SyntheticMouseEvent;\n        break;\n\n      case TOP_DRAG:\n      case TOP_DRAG_END:\n      case TOP_DRAG_ENTER:\n      case TOP_DRAG_EXIT:\n      case TOP_DRAG_LEAVE:\n      case TOP_DRAG_OVER:\n      case TOP_DRAG_START:\n      case TOP_DROP:\n        EventConstructor = SyntheticDragEvent;\n        break;\n\n      case TOP_TOUCH_CANCEL:\n      case TOP_TOUCH_END:\n      case TOP_TOUCH_MOVE:\n      case TOP_TOUCH_START:\n        EventConstructor = SyntheticTouchEvent;\n        break;\n\n      case TOP_ANIMATION_END:\n      case TOP_ANIMATION_ITERATION:\n      case TOP_ANIMATION_START:\n        EventConstructor = SyntheticAnimationEvent;\n        break;\n\n      case TOP_TRANSITION_END:\n        EventConstructor = SyntheticTransitionEvent;\n        break;\n\n      case TOP_SCROLL:\n        EventConstructor = SyntheticUIEvent;\n        break;\n\n      case TOP_WHEEL:\n        EventConstructor = SyntheticWheelEvent;\n        break;\n\n      case TOP_COPY:\n      case TOP_CUT:\n      case TOP_PASTE:\n        EventConstructor = SyntheticClipboardEvent;\n        break;\n\n      case TOP_GOT_POINTER_CAPTURE:\n      case TOP_LOST_POINTER_CAPTURE:\n      case TOP_POINTER_CANCEL:\n      case TOP_POINTER_DOWN:\n      case TOP_POINTER_MOVE:\n      case TOP_POINTER_OUT:\n      case TOP_POINTER_OVER:\n      case TOP_POINTER_UP:\n        EventConstructor = SyntheticPointerEvent;\n        break;\n\n      default:\n        {\n          if (knownHTMLTopLevelTypes.indexOf(topLevelType) === -1) {\n            error('SimpleEventPlugin: Unhandled event type, `%s`. This warning ' + 'is likely caused by a bug in React. Please file an issue.', topLevelType);\n          }\n        } // HTML Events\n        // @see http://www.w3.org/TR/html5/index.html#events-0\n\n\n        EventConstructor = SyntheticEvent;\n        break;\n    }\n\n    var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n    accumulateTwoPhaseDispatches(event);\n    return event;\n  }\n};\n\n/**\n * Specifies a deterministic ordering of `EventPlugin`s. A convenient way to\n * reason about plugins, without having to package every one of them. This\n * is better than having plugins be ordered in the same order that they\n * are injected because that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\n\nvar DOMEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin'];\n/**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\n\ninjectEventPluginOrder(DOMEventPluginOrder);\nsetComponentTree(getFiberCurrentPropsFromNode$1, getInstanceFromNode$1, getNodeFromInstance$1);\n/**\n * Some important event plugins included by default (without having to require\n * them).\n */\n\ninjectEventPluginsByName({\n  SimpleEventPlugin: SimpleEventPlugin,\n  EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n  ChangeEventPlugin: ChangeEventPlugin,\n  SelectEventPlugin: SelectEventPlugin,\n  BeforeInputEventPlugin: BeforeInputEventPlugin\n});\n\n// Prefix measurements so that it's possible to filter them.\n// Longer prefixes are hard to read in DevTools.\nvar reactEmoji = \"\\u269B\";\nvar warningEmoji = \"\\u26D4\";\nvar supportsUserTiming = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function'; // Keep track of current fiber so that we know the path to unwind on pause.\n// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them?\n\nvar currentFiber = null; // If we're in the middle of user code, which fiber and method is it?\n// Reusing `currentFiber` would be confusing for this because user code fiber\n// can change during commit phase too, but we don't need to unwind it (since\n// lifecycles in the commit phase don't resemble a tree).\n\nvar currentPhase = null;\nvar currentPhaseFiber = null; // Did lifecycle hook schedule an update? This is often a performance problem,\n// so we will keep track of it, and include it in the report.\n// Track commits caused by cascading updates.\n\nvar isCommitting = false;\nvar hasScheduledUpdateInCurrentCommit = false;\nvar hasScheduledUpdateInCurrentPhase = false;\nvar commitCountInCurrentWorkLoop = 0;\nvar effectCountInCurrentCommit = 0;\n// to avoid stretch the commit phase with measurement overhead.\n\nvar labelsInCurrentCommit = new Set();\n\nvar formatMarkName = function (markName) {\n  return reactEmoji + \" \" + markName;\n};\n\nvar formatLabel = function (label, warning) {\n  var prefix = warning ? warningEmoji + \" \" : reactEmoji + \" \";\n  var suffix = warning ? \" Warning: \" + warning : '';\n  return \"\" + prefix + label + suffix;\n};\n\nvar beginMark = function (markName) {\n  performance.mark(formatMarkName(markName));\n};\n\nvar clearMark = function (markName) {\n  performance.clearMarks(formatMarkName(markName));\n};\n\nvar endMark = function (label, markName, warning) {\n  var formattedMarkName = formatMarkName(markName);\n  var formattedLabel = formatLabel(label, warning);\n\n  try {\n    performance.measure(formattedLabel, formattedMarkName);\n  } catch (err) {} // If previous mark was missing for some reason, this will throw.\n  // This could only happen if React crashed in an unexpected place earlier.\n  // Don't pile on with more errors.\n  // Clear marks immediately to avoid growing buffer.\n\n\n  performance.clearMarks(formattedMarkName);\n  performance.clearMeasures(formattedLabel);\n};\n\nvar getFiberMarkName = function (label, debugID) {\n  return label + \" (#\" + debugID + \")\";\n};\n\nvar getFiberLabel = function (componentName, isMounted, phase) {\n  if (phase === null) {\n    // These are composite component total time measurements.\n    return componentName + \" [\" + (isMounted ? 'update' : 'mount') + \"]\";\n  } else {\n    // Composite component methods.\n    return componentName + \".\" + phase;\n  }\n};\n\nvar beginFiberMark = function (fiber, phase) {\n  var componentName = getComponentName(fiber.type) || 'Unknown';\n  var debugID = fiber._debugID;\n  var isMounted = fiber.alternate !== null;\n  var label = getFiberLabel(componentName, isMounted, phase);\n\n  if (isCommitting && labelsInCurrentCommit.has(label)) {\n    // During the commit phase, we don't show duplicate labels because\n    // there is a fixed overhead for every measurement, and we don't\n    // want to stretch the commit phase beyond necessary.\n    return false;\n  }\n\n  labelsInCurrentCommit.add(label);\n  var markName = getFiberMarkName(label, debugID);\n  beginMark(markName);\n  return true;\n};\n\nvar clearFiberMark = function (fiber, phase) {\n  var componentName = getComponentName(fiber.type) || 'Unknown';\n  var debugID = fiber._debugID;\n  var isMounted = fiber.alternate !== null;\n  var label = getFiberLabel(componentName, isMounted, phase);\n  var markName = getFiberMarkName(label, debugID);\n  clearMark(markName);\n};\n\nvar endFiberMark = function (fiber, phase, warning) {\n  var componentName = getComponentName(fiber.type) || 'Unknown';\n  var debugID = fiber._debugID;\n  var isMounted = fiber.alternate !== null;\n  var label = getFiberLabel(componentName, isMounted, phase);\n  var markName = getFiberMarkName(label, debugID);\n  endMark(label, markName, warning);\n};\n\nvar shouldIgnoreFiber = function (fiber) {\n  // Host components should be skipped in the timeline.\n  // We could check typeof fiber.type, but does this work with RN?\n  switch (fiber.tag) {\n    case HostRoot:\n    case HostComponent:\n    case HostText:\n    case HostPortal:\n    case Fragment:\n    case ContextProvider:\n    case ContextConsumer:\n    case Mode:\n      return true;\n\n    default:\n      return false;\n  }\n};\n\nvar clearPendingPhaseMeasurement = function () {\n  if (currentPhase !== null && currentPhaseFiber !== null) {\n    clearFiberMark(currentPhaseFiber, currentPhase);\n  }\n\n  currentPhaseFiber = null;\n  currentPhase = null;\n  hasScheduledUpdateInCurrentPhase = false;\n};\n\nvar pauseTimers = function () {\n  // Stops all currently active measurements so that they can be resumed\n  // if we continue in a later deferred loop from the same unit of work.\n  var fiber = currentFiber;\n\n  while (fiber) {\n    if (fiber._debugIsCurrentlyTiming) {\n      endFiberMark(fiber, null, null);\n    }\n\n    fiber = fiber.return;\n  }\n};\n\nvar resumeTimersRecursively = function (fiber) {\n  if (fiber.return !== null) {\n    resumeTimersRecursively(fiber.return);\n  }\n\n  if (fiber._debugIsCurrentlyTiming) {\n    beginFiberMark(fiber, null);\n  }\n};\n\nvar resumeTimers = function () {\n  // Resumes all measurements that were active during the last deferred loop.\n  if (currentFiber !== null) {\n    resumeTimersRecursively(currentFiber);\n  }\n};\n\nfunction recordEffect() {\n  {\n    effectCountInCurrentCommit++;\n  }\n}\nfunction recordScheduleUpdate() {\n  {\n    if (isCommitting) {\n      hasScheduledUpdateInCurrentCommit = true;\n    }\n\n    if (currentPhase !== null && currentPhase !== 'componentWillMount' && currentPhase !== 'componentWillReceiveProps') {\n      hasScheduledUpdateInCurrentPhase = true;\n    }\n  }\n}\nfunction startWorkTimer(fiber) {\n  {\n    if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n      return;\n    } // If we pause, this is the fiber to unwind from.\n\n\n    currentFiber = fiber;\n\n    if (!beginFiberMark(fiber, null)) {\n      return;\n    }\n\n    fiber._debugIsCurrentlyTiming = true;\n  }\n}\nfunction cancelWorkTimer(fiber) {\n  {\n    if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n      return;\n    } // Remember we shouldn't complete measurement for this fiber.\n    // Otherwise flamechart will be deep even for small updates.\n\n\n    fiber._debugIsCurrentlyTiming = false;\n    clearFiberMark(fiber, null);\n  }\n}\nfunction stopWorkTimer(fiber) {\n  {\n    if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n      return;\n    } // If we pause, its parent is the fiber to unwind from.\n\n\n    currentFiber = fiber.return;\n\n    if (!fiber._debugIsCurrentlyTiming) {\n      return;\n    }\n\n    fiber._debugIsCurrentlyTiming = false;\n    endFiberMark(fiber, null, null);\n  }\n}\nfunction stopFailedWorkTimer(fiber) {\n  {\n    if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n      return;\n    } // If we pause, its parent is the fiber to unwind from.\n\n\n    currentFiber = fiber.return;\n\n    if (!fiber._debugIsCurrentlyTiming) {\n      return;\n    }\n\n    fiber._debugIsCurrentlyTiming = false;\n    var warning = fiber.tag === SuspenseComponent ? 'Rendering was suspended' : 'An error was thrown inside this error boundary';\n    endFiberMark(fiber, null, warning);\n  }\n}\nfunction startPhaseTimer(fiber, phase) {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    clearPendingPhaseMeasurement();\n\n    if (!beginFiberMark(fiber, phase)) {\n      return;\n    }\n\n    currentPhaseFiber = fiber;\n    currentPhase = phase;\n  }\n}\nfunction stopPhaseTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    if (currentPhase !== null && currentPhaseFiber !== null) {\n      var warning = hasScheduledUpdateInCurrentPhase ? 'Scheduled a cascading update' : null;\n      endFiberMark(currentPhaseFiber, currentPhase, warning);\n    }\n\n    currentPhase = null;\n    currentPhaseFiber = null;\n  }\n}\nfunction startWorkLoopTimer(nextUnitOfWork) {\n  {\n    currentFiber = nextUnitOfWork;\n\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    commitCountInCurrentWorkLoop = 0; // This is top level call.\n    // Any other measurements are performed within.\n\n    beginMark('(React Tree Reconciliation)'); // Resume any measurements that were in progress during the last loop.\n\n    resumeTimers();\n  }\n}\nfunction stopWorkLoopTimer(interruptedBy, didCompleteRoot) {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var warning = null;\n\n    if (interruptedBy !== null) {\n      if (interruptedBy.tag === HostRoot) {\n        warning = 'A top-level update interrupted the previous render';\n      } else {\n        var componentName = getComponentName(interruptedBy.type) || 'Unknown';\n        warning = \"An update to \" + componentName + \" interrupted the previous render\";\n      }\n    } else if (commitCountInCurrentWorkLoop > 1) {\n      warning = 'There were cascading updates';\n    }\n\n    commitCountInCurrentWorkLoop = 0;\n    var label = didCompleteRoot ? '(React Tree Reconciliation: Completed Root)' : '(React Tree Reconciliation: Yielded)'; // Pause any measurements until the next loop.\n\n    pauseTimers();\n    endMark(label, '(React Tree Reconciliation)', warning);\n  }\n}\nfunction startCommitTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    isCommitting = true;\n    hasScheduledUpdateInCurrentCommit = false;\n    labelsInCurrentCommit.clear();\n    beginMark('(Committing Changes)');\n  }\n}\nfunction stopCommitTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var warning = null;\n\n    if (hasScheduledUpdateInCurrentCommit) {\n      warning = 'Lifecycle hook scheduled a cascading update';\n    } else if (commitCountInCurrentWorkLoop > 0) {\n      warning = 'Caused by a cascading update in earlier commit';\n    }\n\n    hasScheduledUpdateInCurrentCommit = false;\n    commitCountInCurrentWorkLoop++;\n    isCommitting = false;\n    labelsInCurrentCommit.clear();\n    endMark('(Committing Changes)', '(Committing Changes)', warning);\n  }\n}\nfunction startCommitSnapshotEffectsTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    effectCountInCurrentCommit = 0;\n    beginMark('(Committing Snapshot Effects)');\n  }\n}\nfunction stopCommitSnapshotEffectsTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var count = effectCountInCurrentCommit;\n    effectCountInCurrentCommit = 0;\n    endMark(\"(Committing Snapshot Effects: \" + count + \" Total)\", '(Committing Snapshot Effects)', null);\n  }\n}\nfunction startCommitHostEffectsTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    effectCountInCurrentCommit = 0;\n    beginMark('(Committing Host Effects)');\n  }\n}\nfunction stopCommitHostEffectsTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var count = effectCountInCurrentCommit;\n    effectCountInCurrentCommit = 0;\n    endMark(\"(Committing Host Effects: \" + count + \" Total)\", '(Committing Host Effects)', null);\n  }\n}\nfunction startCommitLifeCyclesTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    effectCountInCurrentCommit = 0;\n    beginMark('(Calling Lifecycle Methods)');\n  }\n}\nfunction stopCommitLifeCyclesTimer() {\n  {\n    if (!supportsUserTiming) {\n      return;\n    }\n\n    var count = effectCountInCurrentCommit;\n    effectCountInCurrentCommit = 0;\n    endMark(\"(Calling Lifecycle Methods: \" + count + \" Total)\", '(Calling Lifecycle Methods)', null);\n  }\n}\n\nvar valueStack = [];\nvar fiberStack;\n\n{\n  fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n  return {\n    current: defaultValue\n  };\n}\n\nfunction pop(cursor, fiber) {\n  if (index < 0) {\n    {\n      error('Unexpected pop.');\n    }\n\n    return;\n  }\n\n  {\n    if (fiber !== fiberStack[index]) {\n      error('Unexpected Fiber popped.');\n    }\n  }\n\n  cursor.current = valueStack[index];\n  valueStack[index] = null;\n\n  {\n    fiberStack[index] = null;\n  }\n\n  index--;\n}\n\nfunction push(cursor, value, fiber) {\n  index++;\n  valueStack[index] = cursor.current;\n\n  {\n    fiberStack[index] = fiber;\n  }\n\n  cursor.current = value;\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n  warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n  Object.freeze(emptyContextObject);\n} // A cursor to the current merged context object on the stack.\n\n\nvar contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.\n\nvar didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\n\nvar previousContext = emptyContextObject;\n\nfunction getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {\n  {\n    if (didPushOwnContextIfProvider && isContextProvider(Component)) {\n      // If the fiber is a context provider itself, when we read its context\n      // we may have already pushed its own child context on the stack. A context\n      // provider should not \"see\" its own child context. Therefore we read the\n      // previous (parent) context instead for a context provider.\n      return previousContext;\n    }\n\n    return contextStackCursor.current;\n  }\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n  {\n    var instance = workInProgress.stateNode;\n    instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n    instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n  }\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n  {\n    var type = workInProgress.type;\n    var contextTypes = type.contextTypes;\n\n    if (!contextTypes) {\n      return emptyContextObject;\n    } // Avoid recreating masked context unless unmasked context has changed.\n    // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n    // This may trigger infinite loops if componentWillReceiveProps calls setState.\n\n\n    var instance = workInProgress.stateNode;\n\n    if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n      return instance.__reactInternalMemoizedMaskedChildContext;\n    }\n\n    var context = {};\n\n    for (var key in contextTypes) {\n      context[key] = unmaskedContext[key];\n    }\n\n    {\n      var name = getComponentName(type) || 'Unknown';\n      checkPropTypes(contextTypes, context, 'context', name, getCurrentFiberStackInDev);\n    } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n    // Context is created before the class component is instantiated so check for instance.\n\n\n    if (instance) {\n      cacheContext(workInProgress, unmaskedContext, context);\n    }\n\n    return context;\n  }\n}\n\nfunction hasContextChanged() {\n  {\n    return didPerformWorkStackCursor.current;\n  }\n}\n\nfunction isContextProvider(type) {\n  {\n    var childContextTypes = type.childContextTypes;\n    return childContextTypes !== null && childContextTypes !== undefined;\n  }\n}\n\nfunction popContext(fiber) {\n  {\n    pop(didPerformWorkStackCursor, fiber);\n    pop(contextStackCursor, fiber);\n  }\n}\n\nfunction popTopLevelContextObject(fiber) {\n  {\n    pop(didPerformWorkStackCursor, fiber);\n    pop(contextStackCursor, fiber);\n  }\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n  {\n    if (!(contextStackCursor.current === emptyContextObject)) {\n      {\n        throw Error( \"Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    push(contextStackCursor, context, fiber);\n    push(didPerformWorkStackCursor, didChange, fiber);\n  }\n}\n\nfunction processChildContext(fiber, type, parentContext) {\n  {\n    var instance = fiber.stateNode;\n    var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n    // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n\n    if (typeof instance.getChildContext !== 'function') {\n      {\n        var componentName = getComponentName(type) || 'Unknown';\n\n        if (!warnedAboutMissingGetChildContext[componentName]) {\n          warnedAboutMissingGetChildContext[componentName] = true;\n\n          error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n        }\n      }\n\n      return parentContext;\n    }\n\n    var childContext;\n    startPhaseTimer(fiber, 'getChildContext');\n    childContext = instance.getChildContext();\n    stopPhaseTimer();\n\n    for (var contextKey in childContext) {\n      if (!(contextKey in childContextTypes)) {\n        {\n          throw Error( (getComponentName(type) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\" );\n        }\n      }\n    }\n\n    {\n      var name = getComponentName(type) || 'Unknown';\n      checkPropTypes(childContextTypes, childContext, 'child context', name, // In practice, there is one case in which we won't get a stack. It's when\n      // somebody calls unstable_renderSubtreeIntoContainer() and we process\n      // context from the parent component instance. The stack will be missing\n      // because it's outside of the reconciliation, and so the pointer has not\n      // been set. This is rare and doesn't matter. We'll also remove that API.\n      getCurrentFiberStackInDev);\n    }\n\n    return _assign({}, parentContext, {}, childContext);\n  }\n}\n\nfunction pushContextProvider(workInProgress) {\n  {\n    var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.\n    // If the instance does not exist yet, we will push null at first,\n    // and replace it on the stack later when invalidating the context.\n\n    var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.\n    // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n\n    previousContext = contextStackCursor.current;\n    push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n    push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n    return true;\n  }\n}\n\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n  {\n    var instance = workInProgress.stateNode;\n\n    if (!instance) {\n      {\n        throw Error( \"Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    if (didChange) {\n      // Merge parent and own context.\n      // Skip this if we're not updating due to sCU.\n      // This avoids unnecessarily recomputing memoized values.\n      var mergedContext = processChildContext(workInProgress, type, previousContext);\n      instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.\n      // It is important to unwind the context in the reverse order.\n\n      pop(didPerformWorkStackCursor, workInProgress);\n      pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.\n\n      push(contextStackCursor, mergedContext, workInProgress);\n      push(didPerformWorkStackCursor, didChange, workInProgress);\n    } else {\n      pop(didPerformWorkStackCursor, workInProgress);\n      push(didPerformWorkStackCursor, didChange, workInProgress);\n    }\n  }\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n  {\n    // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n    // makes sense elsewhere\n    if (!(isFiberMounted(fiber) && fiber.tag === ClassComponent)) {\n      {\n        throw Error( \"Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    var node = fiber;\n\n    do {\n      switch (node.tag) {\n        case HostRoot:\n          return node.stateNode.context;\n\n        case ClassComponent:\n          {\n            var Component = node.type;\n\n            if (isContextProvider(Component)) {\n              return node.stateNode.__reactInternalMemoizedMergedChildContext;\n            }\n\n            break;\n          }\n      }\n\n      node = node.return;\n    } while (node !== null);\n\n    {\n      {\n        throw Error( \"Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n  }\n}\n\nvar LegacyRoot = 0;\nvar BlockingRoot = 1;\nvar ConcurrentRoot = 2;\n\nvar Scheduler_runWithPriority = Scheduler.unstable_runWithPriority,\n    Scheduler_scheduleCallback = Scheduler.unstable_scheduleCallback,\n    Scheduler_cancelCallback = Scheduler.unstable_cancelCallback,\n    Scheduler_shouldYield = Scheduler.unstable_shouldYield,\n    Scheduler_requestPaint = Scheduler.unstable_requestPaint,\n    Scheduler_now = Scheduler.unstable_now,\n    Scheduler_getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n    Scheduler_ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n    Scheduler_UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n    Scheduler_NormalPriority = Scheduler.unstable_NormalPriority,\n    Scheduler_LowPriority = Scheduler.unstable_LowPriority,\n    Scheduler_IdlePriority = Scheduler.unstable_IdlePriority;\n\n{\n  // Provide explicit error message when production+profiling bundle of e.g.\n  // react-dom is used with production (non-profiling) bundle of\n  // scheduler/tracing\n  if (!(tracing.__interactionsRef != null && tracing.__interactionsRef.current != null)) {\n    {\n      throw Error( \"It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling\" );\n    }\n  }\n}\n\nvar fakeCallbackNode = {}; // Except for NoPriority, these correspond to Scheduler priorities. We use\n// ascending numbers so we can compare them like numbers. They start at 90 to\n// avoid clashing with Scheduler's priorities.\n\nvar ImmediatePriority = 99;\nvar UserBlockingPriority$1 = 98;\nvar NormalPriority = 97;\nvar LowPriority = 96;\nvar IdlePriority = 95; // NoPriority is the absence of priority. Also React-only.\n\nvar NoPriority = 90;\nvar shouldYield = Scheduler_shouldYield;\nvar requestPaint = // Fall back gracefully if we're running an older version of Scheduler.\nScheduler_requestPaint !== undefined ? Scheduler_requestPaint : function () {};\nvar syncQueue = null;\nvar immediateQueueCallbackNode = null;\nvar isFlushingSyncQueue = false;\nvar initialTimeMs = Scheduler_now(); // If the initial timestamp is reasonably small, use Scheduler's `now` directly.\n// This will be the case for modern browsers that support `performance.now`. In\n// older browsers, Scheduler falls back to `Date.now`, which returns a Unix\n// timestamp. In that case, subtract the module initialization time to simulate\n// the behavior of performance.now and keep our times small enough to fit\n// within 32 bits.\n// TODO: Consider lifting this into Scheduler.\n\nvar now = initialTimeMs < 10000 ? Scheduler_now : function () {\n  return Scheduler_now() - initialTimeMs;\n};\nfunction getCurrentPriorityLevel() {\n  switch (Scheduler_getCurrentPriorityLevel()) {\n    case Scheduler_ImmediatePriority:\n      return ImmediatePriority;\n\n    case Scheduler_UserBlockingPriority:\n      return UserBlockingPriority$1;\n\n    case Scheduler_NormalPriority:\n      return NormalPriority;\n\n    case Scheduler_LowPriority:\n      return LowPriority;\n\n    case Scheduler_IdlePriority:\n      return IdlePriority;\n\n    default:\n      {\n        {\n          throw Error( \"Unknown priority level.\" );\n        }\n      }\n\n  }\n}\n\nfunction reactPriorityToSchedulerPriority(reactPriorityLevel) {\n  switch (reactPriorityLevel) {\n    case ImmediatePriority:\n      return Scheduler_ImmediatePriority;\n\n    case UserBlockingPriority$1:\n      return Scheduler_UserBlockingPriority;\n\n    case NormalPriority:\n      return Scheduler_NormalPriority;\n\n    case LowPriority:\n      return Scheduler_LowPriority;\n\n    case IdlePriority:\n      return Scheduler_IdlePriority;\n\n    default:\n      {\n        {\n          throw Error( \"Unknown priority level.\" );\n        }\n      }\n\n  }\n}\n\nfunction runWithPriority$1(reactPriorityLevel, fn) {\n  var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);\n  return Scheduler_runWithPriority(priorityLevel, fn);\n}\nfunction scheduleCallback(reactPriorityLevel, callback, options) {\n  var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);\n  return Scheduler_scheduleCallback(priorityLevel, callback, options);\n}\nfunction scheduleSyncCallback(callback) {\n  // Push this callback into an internal queue. We'll flush these either in\n  // the next tick, or earlier if something calls `flushSyncCallbackQueue`.\n  if (syncQueue === null) {\n    syncQueue = [callback]; // Flush the queue in the next tick, at the earliest.\n\n    immediateQueueCallbackNode = Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueueImpl);\n  } else {\n    // Push onto existing queue. Don't need to schedule a callback because\n    // we already scheduled one when we created the queue.\n    syncQueue.push(callback);\n  }\n\n  return fakeCallbackNode;\n}\nfunction cancelCallback(callbackNode) {\n  if (callbackNode !== fakeCallbackNode) {\n    Scheduler_cancelCallback(callbackNode);\n  }\n}\nfunction flushSyncCallbackQueue() {\n  if (immediateQueueCallbackNode !== null) {\n    var node = immediateQueueCallbackNode;\n    immediateQueueCallbackNode = null;\n    Scheduler_cancelCallback(node);\n  }\n\n  flushSyncCallbackQueueImpl();\n}\n\nfunction flushSyncCallbackQueueImpl() {\n  if (!isFlushingSyncQueue && syncQueue !== null) {\n    // Prevent re-entrancy.\n    isFlushingSyncQueue = true;\n    var i = 0;\n\n    try {\n      var _isSync = true;\n      var queue = syncQueue;\n      runWithPriority$1(ImmediatePriority, function () {\n        for (; i < queue.length; i++) {\n          var callback = queue[i];\n\n          do {\n            callback = callback(_isSync);\n          } while (callback !== null);\n        }\n      });\n      syncQueue = null;\n    } catch (error) {\n      // If something throws, leave the remaining callbacks on the queue.\n      if (syncQueue !== null) {\n        syncQueue = syncQueue.slice(i + 1);\n      } // Resume flushing in the next tick\n\n\n      Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueue);\n      throw error;\n    } finally {\n      isFlushingSyncQueue = false;\n    }\n  }\n}\n\nvar NoMode = 0;\nvar StrictMode = 1; // TODO: Remove BlockingMode and ConcurrentMode by reading from the root\n// tag instead\n\nvar BlockingMode = 2;\nvar ConcurrentMode = 4;\nvar ProfileMode = 8;\n\n// Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\nvar NoWork = 0; // TODO: Think of a better name for Never. The key difference with Idle is that\n// Never work can be committed in an inconsistent state without tearing the UI.\n// The main example is offscreen content, like a hidden subtree. So one possible\n// name is Offscreen. However, it also includes dehydrated Suspense boundaries,\n// which are inconsistent in the sense that they haven't finished yet, but\n// aren't visibly inconsistent because the server rendered HTML matches what the\n// hydrated tree would look like.\n\nvar Never = 1; // Idle is slightly higher priority than Never. It must completely finish in\n// order to be consistent.\n\nvar Idle = 2; // Continuous Hydration is slightly higher than Idle and is used to increase\n// priority of hover targets.\n\nvar ContinuousHydration = 3;\nvar Sync = MAX_SIGNED_31_BIT_INT;\nvar Batched = Sync - 1;\nvar UNIT_SIZE = 10;\nvar MAGIC_NUMBER_OFFSET = Batched - 1; // 1 unit of expiration time represents 10ms.\n\nfunction msToExpirationTime(ms) {\n  // Always subtract from the offset so that we don't clash with the magic number for NoWork.\n  return MAGIC_NUMBER_OFFSET - (ms / UNIT_SIZE | 0);\n}\nfunction expirationTimeToMs(expirationTime) {\n  return (MAGIC_NUMBER_OFFSET - expirationTime) * UNIT_SIZE;\n}\n\nfunction ceiling(num, precision) {\n  return ((num / precision | 0) + 1) * precision;\n}\n\nfunction computeExpirationBucket(currentTime, expirationInMs, bucketSizeMs) {\n  return MAGIC_NUMBER_OFFSET - ceiling(MAGIC_NUMBER_OFFSET - currentTime + expirationInMs / UNIT_SIZE, bucketSizeMs / UNIT_SIZE);\n} // TODO: This corresponds to Scheduler's NormalPriority, not LowPriority. Update\n// the names to reflect.\n\n\nvar LOW_PRIORITY_EXPIRATION = 5000;\nvar LOW_PRIORITY_BATCH_SIZE = 250;\nfunction computeAsyncExpiration(currentTime) {\n  return computeExpirationBucket(currentTime, LOW_PRIORITY_EXPIRATION, LOW_PRIORITY_BATCH_SIZE);\n}\nfunction computeSuspenseExpiration(currentTime, timeoutMs) {\n  // TODO: Should we warn if timeoutMs is lower than the normal pri expiration time?\n  return computeExpirationBucket(currentTime, timeoutMs, LOW_PRIORITY_BATCH_SIZE);\n} // We intentionally set a higher expiration time for interactive updates in\n// dev than in production.\n//\n// If the main thread is being blocked so long that you hit the expiration,\n// it's a problem that could be solved with better scheduling.\n//\n// People will be more likely to notice this and fix it with the long\n// expiration time in development.\n//\n// In production we opt for better UX at the risk of masking scheduling\n// problems, by expiring fast.\n\nvar HIGH_PRIORITY_EXPIRATION =  500 ;\nvar HIGH_PRIORITY_BATCH_SIZE = 100;\nfunction computeInteractiveExpiration(currentTime) {\n  return computeExpirationBucket(currentTime, HIGH_PRIORITY_EXPIRATION, HIGH_PRIORITY_BATCH_SIZE);\n}\nfunction inferPriorityFromExpirationTime(currentTime, expirationTime) {\n  if (expirationTime === Sync) {\n    return ImmediatePriority;\n  }\n\n  if (expirationTime === Never || expirationTime === Idle) {\n    return IdlePriority;\n  }\n\n  var msUntil = expirationTimeToMs(expirationTime) - expirationTimeToMs(currentTime);\n\n  if (msUntil <= 0) {\n    return ImmediatePriority;\n  }\n\n  if (msUntil <= HIGH_PRIORITY_EXPIRATION + HIGH_PRIORITY_BATCH_SIZE) {\n    return UserBlockingPriority$1;\n  }\n\n  if (msUntil <= LOW_PRIORITY_EXPIRATION + LOW_PRIORITY_BATCH_SIZE) {\n    return NormalPriority;\n  } // TODO: Handle LowPriority\n  // Assume anything lower has idle priority\n\n\n  return IdlePriority;\n}\n\nvar ReactStrictModeWarnings = {\n  recordUnsafeLifecycleWarnings: function (fiber, instance) {},\n  flushPendingUnsafeLifecycleWarnings: function () {},\n  recordLegacyContextWarning: function (fiber, instance) {},\n  flushLegacyContextWarning: function () {},\n  discardPendingWarnings: function () {}\n};\n\n{\n  var findStrictRoot = function (fiber) {\n    var maybeStrictRoot = null;\n    var node = fiber;\n\n    while (node !== null) {\n      if (node.mode & StrictMode) {\n        maybeStrictRoot = node;\n      }\n\n      node = node.return;\n    }\n\n    return maybeStrictRoot;\n  };\n\n  var setToSortedString = function (set) {\n    var array = [];\n    set.forEach(function (value) {\n      array.push(value);\n    });\n    return array.sort().join(', ');\n  };\n\n  var pendingComponentWillMountWarnings = [];\n  var pendingUNSAFE_ComponentWillMountWarnings = [];\n  var pendingComponentWillReceivePropsWarnings = [];\n  var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n  var pendingComponentWillUpdateWarnings = [];\n  var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.\n\n  var didWarnAboutUnsafeLifecycles = new Set();\n\n  ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {\n    // Dedup strategy: Warn once per component.\n    if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {\n      return;\n    }\n\n    if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.\n    instance.componentWillMount.__suppressDeprecationWarning !== true) {\n      pendingComponentWillMountWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillMount === 'function') {\n      pendingUNSAFE_ComponentWillMountWarnings.push(fiber);\n    }\n\n    if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n      pendingComponentWillReceivePropsWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n      pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);\n    }\n\n    if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n      pendingComponentWillUpdateWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {\n      pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);\n    }\n  };\n\n  ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n    // We do an initial pass to gather component names\n    var componentWillMountUniqueNames = new Set();\n\n    if (pendingComponentWillMountWarnings.length > 0) {\n      pendingComponentWillMountWarnings.forEach(function (fiber) {\n        componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillMountWarnings = [];\n    }\n\n    var UNSAFE_componentWillMountUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillMountWarnings = [];\n    }\n\n    var componentWillReceivePropsUniqueNames = new Set();\n\n    if (pendingComponentWillReceivePropsWarnings.length > 0) {\n      pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n        componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillReceivePropsWarnings = [];\n    }\n\n    var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n    }\n\n    var componentWillUpdateUniqueNames = new Set();\n\n    if (pendingComponentWillUpdateWarnings.length > 0) {\n      pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n        componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillUpdateWarnings = [];\n    }\n\n    var UNSAFE_componentWillUpdateUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillUpdateWarnings = [];\n    } // Finally, we flush all the warnings\n    // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'\n\n\n    if (UNSAFE_componentWillMountUniqueNames.size > 0) {\n      var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);\n\n      error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '\\nPlease update the following components: %s', sortedNames);\n    }\n\n    if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {\n      var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);\n\n      error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, \" + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n' + '\\nPlease update the following components: %s', _sortedNames);\n    }\n\n    if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {\n      var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);\n\n      error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '\\nPlease update the following components: %s', _sortedNames2);\n    }\n\n    if (componentWillMountUniqueNames.size > 0) {\n      var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);\n\n      warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames3);\n    }\n\n    if (componentWillReceivePropsUniqueNames.size > 0) {\n      var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);\n\n      warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, refactor your \" + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames4);\n    }\n\n    if (componentWillUpdateUniqueNames.size > 0) {\n      var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);\n\n      warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames5);\n    }\n  };\n\n  var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.\n\n  var didWarnAboutLegacyContext = new Set();\n\n  ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {\n    var strictRoot = findStrictRoot(fiber);\n\n    if (strictRoot === null) {\n      error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n\n      return;\n    } // Dedup strategy: Warn once per component.\n\n\n    if (didWarnAboutLegacyContext.has(fiber.type)) {\n      return;\n    }\n\n    var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);\n\n    if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {\n      if (warningsForRoot === undefined) {\n        warningsForRoot = [];\n        pendingLegacyContextWarning.set(strictRoot, warningsForRoot);\n      }\n\n      warningsForRoot.push(fiber);\n    }\n  };\n\n  ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n    pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {\n      if (fiberArray.length === 0) {\n        return;\n      }\n\n      var firstFiber = fiberArray[0];\n      var uniqueNames = new Set();\n      fiberArray.forEach(function (fiber) {\n        uniqueNames.add(getComponentName(fiber.type) || 'Component');\n        didWarnAboutLegacyContext.add(fiber.type);\n      });\n      var sortedNames = setToSortedString(uniqueNames);\n      var firstComponentStack = getStackByFiberInDevAndProd(firstFiber);\n\n      error('Legacy context API has been detected within a strict-mode tree.' + '\\n\\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here: https://fb.me/react-legacy-context' + '%s', sortedNames, firstComponentStack);\n    });\n  };\n\n  ReactStrictModeWarnings.discardPendingWarnings = function () {\n    pendingComponentWillMountWarnings = [];\n    pendingUNSAFE_ComponentWillMountWarnings = [];\n    pendingComponentWillReceivePropsWarnings = [];\n    pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n    pendingComponentWillUpdateWarnings = [];\n    pendingUNSAFE_ComponentWillUpdateWarnings = [];\n    pendingLegacyContextWarning = new Map();\n  };\n}\n\nvar resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.\n\nvar failedBoundaries = null;\nvar setRefreshHandler = function (handler) {\n  {\n    resolveFamily = handler;\n  }\n};\nfunction resolveFunctionForHotReloading(type) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return type;\n    }\n\n    var family = resolveFamily(type);\n\n    if (family === undefined) {\n      return type;\n    } // Use the latest known implementation.\n\n\n    return family.current;\n  }\n}\nfunction resolveClassForHotReloading(type) {\n  // No implementation differences.\n  return resolveFunctionForHotReloading(type);\n}\nfunction resolveForwardRefForHotReloading(type) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return type;\n    }\n\n    var family = resolveFamily(type);\n\n    if (family === undefined) {\n      // Check if we're dealing with a real forwardRef. Don't want to crash early.\n      if (type !== null && type !== undefined && typeof type.render === 'function') {\n        // ForwardRef is special because its resolved .type is an object,\n        // but it's possible that we only have its inner render function in the map.\n        // If that inner render function is different, we'll build a new forwardRef type.\n        var currentRender = resolveFunctionForHotReloading(type.render);\n\n        if (type.render !== currentRender) {\n          var syntheticType = {\n            $$typeof: REACT_FORWARD_REF_TYPE,\n            render: currentRender\n          };\n\n          if (type.displayName !== undefined) {\n            syntheticType.displayName = type.displayName;\n          }\n\n          return syntheticType;\n        }\n      }\n\n      return type;\n    } // Use the latest known implementation.\n\n\n    return family.current;\n  }\n}\nfunction isCompatibleFamilyForHotReloading(fiber, element) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return false;\n    }\n\n    var prevType = fiber.elementType;\n    var nextType = element.type; // If we got here, we know types aren't === equal.\n\n    var needsCompareFamilies = false;\n    var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;\n\n    switch (fiber.tag) {\n      case ClassComponent:\n        {\n          if (typeof nextType === 'function') {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case FunctionComponent:\n        {\n          if (typeof nextType === 'function') {\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            // We don't know the inner type yet.\n            // We're going to assume that the lazy inner type is stable,\n            // and so it is sufficient to avoid reconciling it away.\n            // We're not going to unwrap or actually use the new lazy type.\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case ForwardRef:\n        {\n          if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case MemoComponent:\n      case SimpleMemoComponent:\n        {\n          if ($$typeofNextType === REACT_MEMO_TYPE) {\n            // TODO: if it was but can no longer be simple,\n            // we shouldn't set this.\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      default:\n        return false;\n    } // Check if both types have a family and it's the same one.\n\n\n    if (needsCompareFamilies) {\n      // Note: memo() and forwardRef() we'll compare outer rather than inner type.\n      // This means both of them need to be registered to preserve state.\n      // If we unwrapped and compared the inner types for wrappers instead,\n      // then we would risk falsely saying two separate memo(Foo)\n      // calls are equivalent because they wrap the same Foo function.\n      var prevFamily = resolveFamily(prevType);\n\n      if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n}\nfunction markFailedErrorBoundaryForHotReloading(fiber) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return;\n    }\n\n    if (typeof WeakSet !== 'function') {\n      return;\n    }\n\n    if (failedBoundaries === null) {\n      failedBoundaries = new WeakSet();\n    }\n\n    failedBoundaries.add(fiber);\n  }\n}\nvar scheduleRefresh = function (root, update) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return;\n    }\n\n    var staleFamilies = update.staleFamilies,\n        updatedFamilies = update.updatedFamilies;\n    flushPassiveEffects();\n    flushSync(function () {\n      scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);\n    });\n  }\n};\nvar scheduleRoot = function (root, element) {\n  {\n    if (root.context !== emptyContextObject) {\n      // Super edge case: root has a legacy _renderSubtree context\n      // but we don't know the parentComponent so we can't pass it.\n      // Just ignore. We'll delete this with _renderSubtree code path later.\n      return;\n    }\n\n    flushPassiveEffects();\n    syncUpdates(function () {\n      updateContainer(element, root, null, null);\n    });\n  }\n};\n\nfunction scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {\n  {\n    var alternate = fiber.alternate,\n        child = fiber.child,\n        sibling = fiber.sibling,\n        tag = fiber.tag,\n        type = fiber.type;\n    var candidateType = null;\n\n    switch (tag) {\n      case FunctionComponent:\n      case SimpleMemoComponent:\n      case ClassComponent:\n        candidateType = type;\n        break;\n\n      case ForwardRef:\n        candidateType = type.render;\n        break;\n    }\n\n    if (resolveFamily === null) {\n      throw new Error('Expected resolveFamily to be set during hot reload.');\n    }\n\n    var needsRender = false;\n    var needsRemount = false;\n\n    if (candidateType !== null) {\n      var family = resolveFamily(candidateType);\n\n      if (family !== undefined) {\n        if (staleFamilies.has(family)) {\n          needsRemount = true;\n        } else if (updatedFamilies.has(family)) {\n          if (tag === ClassComponent) {\n            needsRemount = true;\n          } else {\n            needsRender = true;\n          }\n        }\n      }\n    }\n\n    if (failedBoundaries !== null) {\n      if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {\n        needsRemount = true;\n      }\n    }\n\n    if (needsRemount) {\n      fiber._debugNeedsRemount = true;\n    }\n\n    if (needsRemount || needsRender) {\n      scheduleWork(fiber, Sync);\n    }\n\n    if (child !== null && !needsRemount) {\n      scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);\n    }\n\n    if (sibling !== null) {\n      scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);\n    }\n  }\n}\n\nvar findHostInstancesForRefresh = function (root, families) {\n  {\n    var hostInstances = new Set();\n    var types = new Set(families.map(function (family) {\n      return family.current;\n    }));\n    findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);\n    return hostInstances;\n  }\n};\n\nfunction findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {\n  {\n    var child = fiber.child,\n        sibling = fiber.sibling,\n        tag = fiber.tag,\n        type = fiber.type;\n    var candidateType = null;\n\n    switch (tag) {\n      case FunctionComponent:\n      case SimpleMemoComponent:\n      case ClassComponent:\n        candidateType = type;\n        break;\n\n      case ForwardRef:\n        candidateType = type.render;\n        break;\n    }\n\n    var didMatch = false;\n\n    if (candidateType !== null) {\n      if (types.has(candidateType)) {\n        didMatch = true;\n      }\n    }\n\n    if (didMatch) {\n      // We have a match. This only drills down to the closest host components.\n      // There's no need to search deeper because for the purpose of giving\n      // visual feedback, \"flashing\" outermost parent rectangles is sufficient.\n      findHostInstancesForFiberShallowly(fiber, hostInstances);\n    } else {\n      // If there's no match, maybe there will be one further down in the child tree.\n      if (child !== null) {\n        findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);\n      }\n    }\n\n    if (sibling !== null) {\n      findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);\n    }\n  }\n}\n\nfunction findHostInstancesForFiberShallowly(fiber, hostInstances) {\n  {\n    var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);\n\n    if (foundHostInstances) {\n      return;\n    } // If we didn't find any host children, fallback to closest host parent.\n\n\n    var node = fiber;\n\n    while (true) {\n      switch (node.tag) {\n        case HostComponent:\n          hostInstances.add(node.stateNode);\n          return;\n\n        case HostPortal:\n          hostInstances.add(node.stateNode.containerInfo);\n          return;\n\n        case HostRoot:\n          hostInstances.add(node.stateNode.containerInfo);\n          return;\n      }\n\n      if (node.return === null) {\n        throw new Error('Expected to reach root first.');\n      }\n\n      node = node.return;\n    }\n  }\n}\n\nfunction findChildHostInstancesForFiberShallowly(fiber, hostInstances) {\n  {\n    var node = fiber;\n    var foundHostInstances = false;\n\n    while (true) {\n      if (node.tag === HostComponent) {\n        // We got a match.\n        foundHostInstances = true;\n        hostInstances.add(node.stateNode); // There may still be more, so keep searching.\n      } else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === fiber) {\n        return foundHostInstances;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === fiber) {\n          return foundHostInstances;\n        }\n\n        node = node.return;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n\n  return false;\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n  if (Component && Component.defaultProps) {\n    // Resolve default props. Taken from ReactElement\n    var props = _assign({}, baseProps);\n\n    var defaultProps = Component.defaultProps;\n\n    for (var propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n\n    return props;\n  }\n\n  return baseProps;\n}\nfunction readLazyComponentType(lazyComponent) {\n  initializeLazyComponentType(lazyComponent);\n\n  if (lazyComponent._status !== Resolved) {\n    throw lazyComponent._result;\n  }\n\n  return lazyComponent._result;\n}\n\nvar valueCursor = createCursor(null);\nvar rendererSigil;\n\n{\n  // Use this to detect multiple renderers using the same context\n  rendererSigil = {};\n}\n\nvar currentlyRenderingFiber = null;\nvar lastContextDependency = null;\nvar lastContextWithAllBitsObserved = null;\nvar isDisallowedContextReadInDEV = false;\nfunction resetContextDependencies() {\n  // This is called right before React yields execution, to ensure `readContext`\n  // cannot be called outside the render phase.\n  currentlyRenderingFiber = null;\n  lastContextDependency = null;\n  lastContextWithAllBitsObserved = null;\n\n  {\n    isDisallowedContextReadInDEV = false;\n  }\n}\nfunction enterDisallowedContextReadInDEV() {\n  {\n    isDisallowedContextReadInDEV = true;\n  }\n}\nfunction exitDisallowedContextReadInDEV() {\n  {\n    isDisallowedContextReadInDEV = false;\n  }\n}\nfunction pushProvider(providerFiber, nextValue) {\n  var context = providerFiber.type._context;\n\n  {\n    push(valueCursor, context._currentValue, providerFiber);\n    context._currentValue = nextValue;\n\n    {\n      if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n        error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n      }\n\n      context._currentRenderer = rendererSigil;\n    }\n  }\n}\nfunction popProvider(providerFiber) {\n  var currentValue = valueCursor.current;\n  pop(valueCursor, providerFiber);\n  var context = providerFiber.type._context;\n\n  {\n    context._currentValue = currentValue;\n  }\n}\nfunction calculateChangedBits(context, newValue, oldValue) {\n  if (objectIs(oldValue, newValue)) {\n    // No change\n    return 0;\n  } else {\n    var changedBits = typeof context._calculateChangedBits === 'function' ? context._calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n    {\n      if ((changedBits & MAX_SIGNED_31_BIT_INT) !== changedBits) {\n        error('calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);\n      }\n    }\n\n    return changedBits | 0;\n  }\n}\nfunction scheduleWorkOnParentPath(parent, renderExpirationTime) {\n  // Update the child expiration time of all the ancestors, including\n  // the alternates.\n  var node = parent;\n\n  while (node !== null) {\n    var alternate = node.alternate;\n\n    if (node.childExpirationTime < renderExpirationTime) {\n      node.childExpirationTime = renderExpirationTime;\n\n      if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n        alternate.childExpirationTime = renderExpirationTime;\n      }\n    } else if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n      alternate.childExpirationTime = renderExpirationTime;\n    } else {\n      // Neither alternate was updated, which means the rest of the\n      // ancestor path already has sufficient priority.\n      break;\n    }\n\n    node = node.return;\n  }\n}\nfunction propagateContextChange(workInProgress, context, changedBits, renderExpirationTime) {\n  var fiber = workInProgress.child;\n\n  if (fiber !== null) {\n    // Set the return pointer of the child to the work-in-progress fiber.\n    fiber.return = workInProgress;\n  }\n\n  while (fiber !== null) {\n    var nextFiber = void 0; // Visit this fiber.\n\n    var list = fiber.dependencies;\n\n    if (list !== null) {\n      nextFiber = fiber.child;\n      var dependency = list.firstContext;\n\n      while (dependency !== null) {\n        // Check if the context matches.\n        if (dependency.context === context && (dependency.observedBits & changedBits) !== 0) {\n          // Match! Schedule an update on this fiber.\n          if (fiber.tag === ClassComponent) {\n            // Schedule a force update on the work-in-progress.\n            var update = createUpdate(renderExpirationTime, null);\n            update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the\n            // update to the current fiber, too, which means it will persist even if\n            // this render is thrown away. Since it's a race condition, not sure it's\n            // worth fixing.\n\n            enqueueUpdate(fiber, update);\n          }\n\n          if (fiber.expirationTime < renderExpirationTime) {\n            fiber.expirationTime = renderExpirationTime;\n          }\n\n          var alternate = fiber.alternate;\n\n          if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n            alternate.expirationTime = renderExpirationTime;\n          }\n\n          scheduleWorkOnParentPath(fiber.return, renderExpirationTime); // Mark the expiration time on the list, too.\n\n          if (list.expirationTime < renderExpirationTime) {\n            list.expirationTime = renderExpirationTime;\n          } // Since we already found a match, we can stop traversing the\n          // dependency list.\n\n\n          break;\n        }\n\n        dependency = dependency.next;\n      }\n    } else if (fiber.tag === ContextProvider) {\n      // Don't scan deeper if this is a matching provider\n      nextFiber = fiber.type === workInProgress.type ? null : fiber.child;\n    } else {\n      // Traverse down.\n      nextFiber = fiber.child;\n    }\n\n    if (nextFiber !== null) {\n      // Set the return pointer of the child to the work-in-progress fiber.\n      nextFiber.return = fiber;\n    } else {\n      // No child. Traverse to next sibling.\n      nextFiber = fiber;\n\n      while (nextFiber !== null) {\n        if (nextFiber === workInProgress) {\n          // We're back to the root of this subtree. Exit.\n          nextFiber = null;\n          break;\n        }\n\n        var sibling = nextFiber.sibling;\n\n        if (sibling !== null) {\n          // Set the return pointer of the sibling to the work-in-progress fiber.\n          sibling.return = nextFiber.return;\n          nextFiber = sibling;\n          break;\n        } // No more siblings. Traverse up.\n\n\n        nextFiber = nextFiber.return;\n      }\n    }\n\n    fiber = nextFiber;\n  }\n}\nfunction prepareToReadContext(workInProgress, renderExpirationTime) {\n  currentlyRenderingFiber = workInProgress;\n  lastContextDependency = null;\n  lastContextWithAllBitsObserved = null;\n  var dependencies = workInProgress.dependencies;\n\n  if (dependencies !== null) {\n    var firstContext = dependencies.firstContext;\n\n    if (firstContext !== null) {\n      if (dependencies.expirationTime >= renderExpirationTime) {\n        // Context list has a pending update. Mark that this fiber performed work.\n        markWorkInProgressReceivedUpdate();\n      } // Reset the work-in-progress list\n\n\n      dependencies.firstContext = null;\n    }\n  }\n}\nfunction readContext(context, observedBits) {\n  {\n    // This warning would fire if you read context inside a Hook like useMemo.\n    // Unlike the class check below, it's not enforced in production for perf.\n    if (isDisallowedContextReadInDEV) {\n      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().');\n    }\n  }\n\n  if (lastContextWithAllBitsObserved === context) ; else if (observedBits === false || observedBits === 0) ; else {\n    var resolvedObservedBits; // Avoid deopting on observable arguments or heterogeneous types.\n\n    if (typeof observedBits !== 'number' || observedBits === MAX_SIGNED_31_BIT_INT) {\n      // Observe all updates.\n      lastContextWithAllBitsObserved = context;\n      resolvedObservedBits = MAX_SIGNED_31_BIT_INT;\n    } else {\n      resolvedObservedBits = observedBits;\n    }\n\n    var contextItem = {\n      context: context,\n      observedBits: resolvedObservedBits,\n      next: null\n    };\n\n    if (lastContextDependency === null) {\n      if (!(currentlyRenderingFiber !== null)) {\n        {\n          throw 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().\" );\n        }\n      } // This is the first dependency for this component. Create a new list.\n\n\n      lastContextDependency = contextItem;\n      currentlyRenderingFiber.dependencies = {\n        expirationTime: NoWork,\n        firstContext: contextItem,\n        responders: null\n      };\n    } else {\n      // Append a new context item.\n      lastContextDependency = lastContextDependency.next = contextItem;\n    }\n  }\n\n  return  context._currentValue ;\n}\n\nvar UpdateState = 0;\nvar ReplaceState = 1;\nvar ForceUpdate = 2;\nvar CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\n\nvar hasForceUpdate = false;\nvar didWarnUpdateInsideUpdate;\nvar currentlyProcessingQueue;\n\n{\n  didWarnUpdateInsideUpdate = false;\n  currentlyProcessingQueue = null;\n}\n\nfunction initializeUpdateQueue(fiber) {\n  var queue = {\n    baseState: fiber.memoizedState,\n    baseQueue: null,\n    shared: {\n      pending: null\n    },\n    effects: null\n  };\n  fiber.updateQueue = queue;\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  // Clone the update queue from current. Unless it's already a clone.\n  var queue = workInProgress.updateQueue;\n  var currentQueue = current.updateQueue;\n\n  if (queue === currentQueue) {\n    var clone = {\n      baseState: currentQueue.baseState,\n      baseQueue: currentQueue.baseQueue,\n      shared: currentQueue.shared,\n      effects: currentQueue.effects\n    };\n    workInProgress.updateQueue = clone;\n  }\n}\nfunction createUpdate(expirationTime, suspenseConfig) {\n  var update = {\n    expirationTime: expirationTime,\n    suspenseConfig: suspenseConfig,\n    tag: UpdateState,\n    payload: null,\n    callback: null,\n    next: null\n  };\n  update.next = update;\n\n  {\n    update.priority = getCurrentPriorityLevel();\n  }\n\n  return update;\n}\nfunction enqueueUpdate(fiber, update) {\n  var updateQueue = fiber.updateQueue;\n\n  if (updateQueue === null) {\n    // Only occurs if the fiber has been unmounted.\n    return;\n  }\n\n  var sharedQueue = updateQueue.shared;\n  var pending = sharedQueue.pending;\n\n  if (pending === null) {\n    // This is the first update. Create a circular list.\n    update.next = update;\n  } else {\n    update.next = pending.next;\n    pending.next = update;\n  }\n\n  sharedQueue.pending = update;\n\n  {\n    if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {\n      error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');\n\n      didWarnUpdateInsideUpdate = true;\n    }\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, update) {\n  var current = workInProgress.alternate;\n\n  if (current !== null) {\n    // Ensure the work-in-progress queue is a clone\n    cloneUpdateQueue(current, workInProgress);\n  } // Captured updates go only on the work-in-progress queue.\n\n\n  var queue = workInProgress.updateQueue; // Append the update to the end of the list.\n\n  var last = queue.baseQueue;\n\n  if (last === null) {\n    queue.baseQueue = update.next = update;\n    update.next = update;\n  } else {\n    update.next = last.next;\n    last.next = update;\n  }\n}\n\nfunction getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {\n  switch (update.tag) {\n    case ReplaceState:\n      {\n        var payload = update.payload;\n\n        if (typeof payload === 'function') {\n          // Updater function\n          {\n            enterDisallowedContextReadInDEV();\n\n            if ( workInProgress.mode & StrictMode) {\n              payload.call(instance, prevState, nextProps);\n            }\n          }\n\n          var nextState = payload.call(instance, prevState, nextProps);\n\n          {\n            exitDisallowedContextReadInDEV();\n          }\n\n          return nextState;\n        } // State object\n\n\n        return payload;\n      }\n\n    case CaptureUpdate:\n      {\n        workInProgress.effectTag = workInProgress.effectTag & ~ShouldCapture | DidCapture;\n      }\n    // Intentional fallthrough\n\n    case UpdateState:\n      {\n        var _payload = update.payload;\n        var partialState;\n\n        if (typeof _payload === 'function') {\n          // Updater function\n          {\n            enterDisallowedContextReadInDEV();\n\n            if ( workInProgress.mode & StrictMode) {\n              _payload.call(instance, prevState, nextProps);\n            }\n          }\n\n          partialState = _payload.call(instance, prevState, nextProps);\n\n          {\n            exitDisallowedContextReadInDEV();\n          }\n        } else {\n          // Partial state object\n          partialState = _payload;\n        }\n\n        if (partialState === null || partialState === undefined) {\n          // Null and undefined are treated as no-ops.\n          return prevState;\n        } // Merge the partial state and the previous state.\n\n\n        return _assign({}, prevState, partialState);\n      }\n\n    case ForceUpdate:\n      {\n        hasForceUpdate = true;\n        return prevState;\n      }\n  }\n\n  return prevState;\n}\n\nfunction processUpdateQueue(workInProgress, props, instance, renderExpirationTime) {\n  // This is always non-null on a ClassComponent or HostRoot\n  var queue = workInProgress.updateQueue;\n  hasForceUpdate = false;\n\n  {\n    currentlyProcessingQueue = queue.shared;\n  } // The last rebase update that is NOT part of the base state.\n\n\n  var baseQueue = queue.baseQueue; // The last pending update that hasn't been processed yet.\n\n  var pendingQueue = queue.shared.pending;\n\n  if (pendingQueue !== null) {\n    // We have new updates that haven't been processed yet.\n    // We'll add them to the base queue.\n    if (baseQueue !== null) {\n      // Merge the pending queue and the base queue.\n      var baseFirst = baseQueue.next;\n      var pendingFirst = pendingQueue.next;\n      baseQueue.next = pendingFirst;\n      pendingQueue.next = baseFirst;\n    }\n\n    baseQueue = pendingQueue;\n    queue.shared.pending = null; // TODO: Pass `current` as argument\n\n    var current = workInProgress.alternate;\n\n    if (current !== null) {\n      var currentQueue = current.updateQueue;\n\n      if (currentQueue !== null) {\n        currentQueue.baseQueue = pendingQueue;\n      }\n    }\n  } // These values may change as we process the queue.\n\n\n  if (baseQueue !== null) {\n    var first = baseQueue.next; // Iterate through the list of updates to compute the result.\n\n    var newState = queue.baseState;\n    var newExpirationTime = NoWork;\n    var newBaseState = null;\n    var newBaseQueueFirst = null;\n    var newBaseQueueLast = null;\n\n    if (first !== null) {\n      var update = first;\n\n      do {\n        var updateExpirationTime = update.expirationTime;\n\n        if (updateExpirationTime < renderExpirationTime) {\n          // Priority is insufficient. Skip this update. If this is the first\n          // skipped update, the previous update/state is the new base\n          // update/state.\n          var clone = {\n            expirationTime: update.expirationTime,\n            suspenseConfig: update.suspenseConfig,\n            tag: update.tag,\n            payload: update.payload,\n            callback: update.callback,\n            next: null\n          };\n\n          if (newBaseQueueLast === null) {\n            newBaseQueueFirst = newBaseQueueLast = clone;\n            newBaseState = newState;\n          } else {\n            newBaseQueueLast = newBaseQueueLast.next = clone;\n          } // Update the remaining priority in the queue.\n\n\n          if (updateExpirationTime > newExpirationTime) {\n            newExpirationTime = updateExpirationTime;\n          }\n        } else {\n          // This update does have sufficient priority.\n          if (newBaseQueueLast !== null) {\n            var _clone = {\n              expirationTime: Sync,\n              // This update is going to be committed so we never want uncommit it.\n              suspenseConfig: update.suspenseConfig,\n              tag: update.tag,\n              payload: update.payload,\n              callback: update.callback,\n              next: null\n            };\n            newBaseQueueLast = newBaseQueueLast.next = _clone;\n          } // Mark the event time of this update as relevant to this render pass.\n          // TODO: This should ideally use the true event time of this update rather than\n          // its priority which is a derived and not reverseable value.\n          // TODO: We should skip this update if it was already committed but currently\n          // we have no way of detecting the difference between a committed and suspended\n          // update here.\n\n\n          markRenderEventTimeAndConfig(updateExpirationTime, update.suspenseConfig); // Process this update.\n\n          newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);\n          var callback = update.callback;\n\n          if (callback !== null) {\n            workInProgress.effectTag |= Callback;\n            var effects = queue.effects;\n\n            if (effects === null) {\n              queue.effects = [update];\n            } else {\n              effects.push(update);\n            }\n          }\n        }\n\n        update = update.next;\n\n        if (update === null || update === first) {\n          pendingQueue = queue.shared.pending;\n\n          if (pendingQueue === null) {\n            break;\n          } else {\n            // An update was scheduled from inside a reducer. Add the new\n            // pending updates to the end of the list and keep processing.\n            update = baseQueue.next = pendingQueue.next;\n            pendingQueue.next = first;\n            queue.baseQueue = baseQueue = pendingQueue;\n            queue.shared.pending = null;\n          }\n        }\n      } while (true);\n    }\n\n    if (newBaseQueueLast === null) {\n      newBaseState = newState;\n    } else {\n      newBaseQueueLast.next = newBaseQueueFirst;\n    }\n\n    queue.baseState = newBaseState;\n    queue.baseQueue = newBaseQueueLast; // Set the remaining expiration time to be whatever is remaining in the queue.\n    // This should be fine because the only two other things that contribute to\n    // expiration time are props and context. We're already in the middle of the\n    // begin phase by the time we start processing the queue, so we've already\n    // dealt with the props. Context in components that specify\n    // shouldComponentUpdate is tricky; but we'll have to account for\n    // that regardless.\n\n    markUnprocessedUpdateTime(newExpirationTime);\n    workInProgress.expirationTime = newExpirationTime;\n    workInProgress.memoizedState = newState;\n  }\n\n  {\n    currentlyProcessingQueue = null;\n  }\n}\n\nfunction callCallback(callback, context) {\n  if (!(typeof callback === 'function')) {\n    {\n      throw Error( \"Invalid argument passed as callback. Expected a function. Instead received: \" + callback );\n    }\n  }\n\n  callback.call(context);\n}\n\nfunction resetHasForceUpdateBeforeProcessing() {\n  hasForceUpdate = false;\n}\nfunction checkHasForceUpdateAfterProcessing() {\n  return hasForceUpdate;\n}\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance) {\n  // Commit the effects\n  var effects = finishedQueue.effects;\n  finishedQueue.effects = null;\n\n  if (effects !== null) {\n    for (var i = 0; i < effects.length; i++) {\n      var effect = effects[i];\n      var callback = effect.callback;\n\n      if (callback !== null) {\n        effect.callback = null;\n        callCallback(callback, instance);\n      }\n    }\n  }\n}\n\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig;\nfunction requestCurrentSuspenseConfig() {\n  return ReactCurrentBatchConfig.suspense;\n}\n\nvar fakeInternalInstance = {};\nvar isArray = Array.isArray; // React.Component uses a shared frozen object by default.\n// We'll use it to determine whether we need to initialize legacy refs.\n\nvar emptyRefsObject = new React.Component().refs;\nvar didWarnAboutStateAssignmentForComponent;\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar warnOnUndefinedDerivedState;\nvar warnOnInvalidCallback;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\n\n{\n  didWarnAboutStateAssignmentForComponent = new Set();\n  didWarnAboutUninitializedState = new Set();\n  didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n  didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n  didWarnAboutDirectlyAssigningPropsToState = new Set();\n  didWarnAboutUndefinedDerivedState = new Set();\n  didWarnAboutContextTypeAndContextTypes = new Set();\n  didWarnAboutInvalidateContextType = new Set();\n  var didWarnOnInvalidCallback = new Set();\n\n  warnOnInvalidCallback = function (callback, callerName) {\n    if (callback === null || typeof callback === 'function') {\n      return;\n    }\n\n    var key = callerName + \"_\" + callback;\n\n    if (!didWarnOnInvalidCallback.has(key)) {\n      didWarnOnInvalidCallback.add(key);\n\n      error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n    }\n  };\n\n  warnOnUndefinedDerivedState = function (type, partialState) {\n    if (partialState === undefined) {\n      var componentName = getComponentName(type) || 'Component';\n\n      if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n        didWarnAboutUndefinedDerivedState.add(componentName);\n\n        error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n      }\n    }\n  }; // This is so gross but it's at least non-critical and can be removed if\n  // it causes problems. This is meant to give a nicer error message for\n  // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n  // ...)) which otherwise throws a \"_processChildContext is not a function\"\n  // exception.\n\n\n  Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n    enumerable: false,\n    value: function () {\n      {\n        {\n          throw Error( \"_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn't supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal).\" );\n        }\n      }\n    }\n  });\n  Object.freeze(fakeInternalInstance);\n}\n\nfunction applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {\n  var prevState = workInProgress.memoizedState;\n\n  {\n    if ( workInProgress.mode & StrictMode) {\n      // Invoke the function an extra time to help detect side-effects.\n      getDerivedStateFromProps(nextProps, prevState);\n    }\n  }\n\n  var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n  {\n    warnOnUndefinedDerivedState(ctor, partialState);\n  } // Merge the partial state and the previous state.\n\n\n  var memoizedState = partialState === null || partialState === undefined ? prevState : _assign({}, prevState, partialState);\n  workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the\n  // base state.\n\n  if (workInProgress.expirationTime === NoWork) {\n    // Queue is always non-null for classes\n    var updateQueue = workInProgress.updateQueue;\n    updateQueue.baseState = memoizedState;\n  }\n}\nvar classComponentUpdater = {\n  isMounted: isMounted,\n  enqueueSetState: function (inst, payload, callback) {\n    var fiber = get(inst);\n    var currentTime = requestCurrentTimeForUpdate();\n    var suspenseConfig = requestCurrentSuspenseConfig();\n    var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n    var update = createUpdate(expirationTime, suspenseConfig);\n    update.payload = payload;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'setState');\n      }\n\n      update.callback = callback;\n    }\n\n    enqueueUpdate(fiber, update);\n    scheduleWork(fiber, expirationTime);\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    var fiber = get(inst);\n    var currentTime = requestCurrentTimeForUpdate();\n    var suspenseConfig = requestCurrentSuspenseConfig();\n    var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n    var update = createUpdate(expirationTime, suspenseConfig);\n    update.tag = ReplaceState;\n    update.payload = payload;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'replaceState');\n      }\n\n      update.callback = callback;\n    }\n\n    enqueueUpdate(fiber, update);\n    scheduleWork(fiber, expirationTime);\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    var fiber = get(inst);\n    var currentTime = requestCurrentTimeForUpdate();\n    var suspenseConfig = requestCurrentSuspenseConfig();\n    var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n    var update = createUpdate(expirationTime, suspenseConfig);\n    update.tag = ForceUpdate;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'forceUpdate');\n      }\n\n      update.callback = callback;\n    }\n\n    enqueueUpdate(fiber, update);\n    scheduleWork(fiber, expirationTime);\n  }\n};\n\nfunction checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {\n  var instance = workInProgress.stateNode;\n\n  if (typeof instance.shouldComponentUpdate === 'function') {\n    {\n      if ( workInProgress.mode & StrictMode) {\n        // Invoke the function an extra time to help detect side-effects.\n        instance.shouldComponentUpdate(newProps, newState, nextContext);\n      }\n    }\n\n    startPhaseTimer(workInProgress, 'shouldComponentUpdate');\n    var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n    stopPhaseTimer();\n\n    {\n      if (shouldUpdate === undefined) {\n        error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(ctor) || 'Component');\n      }\n    }\n\n    return shouldUpdate;\n  }\n\n  if (ctor.prototype && ctor.prototype.isPureReactComponent) {\n    return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n  }\n\n  return true;\n}\n\nfunction checkClassInstance(workInProgress, ctor, newProps) {\n  var instance = workInProgress.stateNode;\n\n  {\n    var name = getComponentName(ctor) || 'Component';\n    var renderPresent = instance.render;\n\n    if (!renderPresent) {\n      if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n      } else {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n      }\n    }\n\n    if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n      error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n    }\n\n    if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n    }\n\n    if (instance.propTypes) {\n      error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n    }\n\n    if (instance.contextType) {\n      error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n    }\n\n    {\n      if (instance.contextTypes) {\n        error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n      }\n\n      if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n        didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n        error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n      }\n    }\n\n    if (typeof instance.componentShouldUpdate === 'function') {\n      error('%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.', name);\n    }\n\n    if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n      error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(ctor) || 'A pure component');\n    }\n\n    if (typeof instance.componentDidUnmount === 'function') {\n      error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n    }\n\n    if (typeof instance.componentDidReceiveProps === 'function') {\n      error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n    }\n\n    if (typeof instance.componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n    }\n\n    if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n    }\n\n    var hasMutatedProps = instance.props !== newProps;\n\n    if (instance.props !== undefined && hasMutatedProps) {\n      error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n    }\n\n    if (instance.defaultProps) {\n      error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n      didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n      error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentName(ctor));\n    }\n\n    if (typeof instance.getDerivedStateFromProps === 'function') {\n      error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof instance.getDerivedStateFromError === 'function') {\n      error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n      error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n    }\n\n    var _state = instance.state;\n\n    if (_state && (typeof _state !== 'object' || isArray(_state))) {\n      error('%s.state: must be set to an object or null', name);\n    }\n\n    if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n      error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n    }\n  }\n}\n\nfunction adoptClassInstance(workInProgress, instance) {\n  instance.updater = classComponentUpdater;\n  workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates\n\n  set(instance, workInProgress);\n\n  {\n    instance._reactInternalInstance = fakeInternalInstance;\n  }\n}\n\nfunction constructClassInstance(workInProgress, ctor, props) {\n  var isLegacyContextConsumer = false;\n  var unmaskedContext = emptyContextObject;\n  var context = emptyContextObject;\n  var contextType = ctor.contextType;\n\n  {\n    if ('contextType' in ctor) {\n      var isValid = // Allow null for conditional declaration\n      contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n      if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n        didWarnAboutInvalidateContextType.add(ctor);\n        var addendum = '';\n\n        if (contextType === undefined) {\n          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.';\n        } else if (typeof contextType !== 'object') {\n          addendum = ' However, it is set to a ' + typeof contextType + '.';\n        } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n          addendum = ' Did you accidentally pass the Context.Provider instead?';\n        } else if (contextType._context !== undefined) {\n          // <Context.Consumer>\n          addendum = ' Did you accidentally pass the Context.Consumer instead?';\n        } else {\n          addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n        }\n\n        error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(ctor) || 'Component', addendum);\n      }\n    }\n  }\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    context = readContext(contextType);\n  } else {\n    unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    var contextTypes = ctor.contextTypes;\n    isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;\n    context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;\n  } // Instantiate twice to help detect side-effects.\n\n\n  {\n    if ( workInProgress.mode & StrictMode) {\n      new ctor(props, context); // eslint-disable-line no-new\n    }\n  }\n\n  var instance = new ctor(props, context);\n  var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;\n  adoptClassInstance(workInProgress, instance);\n\n  {\n    if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {\n      var componentName = getComponentName(ctor) || 'Component';\n\n      if (!didWarnAboutUninitializedState.has(componentName)) {\n        didWarnAboutUninitializedState.add(componentName);\n\n        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, instance.state === null ? 'null' : 'undefined', componentName);\n      }\n    } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n    // Warn about these lifecycles if they are present.\n    // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n    if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n      var foundWillMountName = null;\n      var foundWillReceivePropsName = null;\n      var foundWillUpdateName = null;\n\n      if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n        foundWillMountName = 'componentWillMount';\n      } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n        foundWillMountName = 'UNSAFE_componentWillMount';\n      }\n\n      if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n        foundWillReceivePropsName = 'componentWillReceiveProps';\n      } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n        foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n      }\n\n      if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n        foundWillUpdateName = 'componentWillUpdate';\n      } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n        foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n      }\n\n      if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n        var _componentName = getComponentName(ctor) || 'Component';\n\n        var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n        if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n          didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n          error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://fb.me/react-unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n  \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n  \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n  \" + foundWillUpdateName : '');\n        }\n      }\n    }\n  } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n  // ReactFiberContext usually updates this cache but can't for newly-created instances.\n\n\n  if (isLegacyContextConsumer) {\n    cacheContext(workInProgress, unmaskedContext, context);\n  }\n\n  return instance;\n}\n\nfunction callComponentWillMount(workInProgress, instance) {\n  startPhaseTimer(workInProgress, 'componentWillMount');\n  var oldState = instance.state;\n\n  if (typeof instance.componentWillMount === 'function') {\n    instance.componentWillMount();\n  }\n\n  if (typeof instance.UNSAFE_componentWillMount === 'function') {\n    instance.UNSAFE_componentWillMount();\n  }\n\n  stopPhaseTimer();\n\n  if (oldState !== instance.state) {\n    {\n      error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentName(workInProgress.type) || 'Component');\n    }\n\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n  }\n}\n\nfunction callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {\n  var oldState = instance.state;\n  startPhaseTimer(workInProgress, 'componentWillReceiveProps');\n\n  if (typeof instance.componentWillReceiveProps === 'function') {\n    instance.componentWillReceiveProps(newProps, nextContext);\n  }\n\n  if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  }\n\n  stopPhaseTimer();\n\n  if (instance.state !== oldState) {\n    {\n      var componentName = getComponentName(workInProgress.type) || 'Component';\n\n      if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {\n        didWarnAboutStateAssignmentForComponent.add(componentName);\n\n        error('%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n      }\n    }\n\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n  }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n  {\n    checkClassInstance(workInProgress, ctor, newProps);\n  }\n\n  var instance = workInProgress.stateNode;\n  instance.props = newProps;\n  instance.state = workInProgress.memoizedState;\n  instance.refs = emptyRefsObject;\n  initializeUpdateQueue(workInProgress);\n  var contextType = ctor.contextType;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    instance.context = readContext(contextType);\n  } else {\n    var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    instance.context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  {\n    if (instance.state === newProps) {\n      var componentName = getComponentName(ctor) || 'Component';\n\n      if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n        didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n        error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n      }\n    }\n\n    if (workInProgress.mode & StrictMode) {\n      ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);\n    }\n\n    {\n      ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);\n    }\n  }\n\n  processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n  instance.state = workInProgress.memoizedState;\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    instance.state = workInProgress.memoizedState;\n  } // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n  if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n    callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's\n    // process them now.\n\n    processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n    instance.state = workInProgress.memoizedState;\n  }\n\n  if (typeof instance.componentDidMount === 'function') {\n    workInProgress.effectTag |= Update;\n  }\n}\n\nfunction resumeMountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n  var instance = workInProgress.stateNode;\n  var oldProps = workInProgress.memoizedProps;\n  instance.props = oldProps;\n  var oldContext = instance.context;\n  var contextType = ctor.contextType;\n  var nextContext = emptyContextObject;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    nextContext = readContext(contextType);\n  } else {\n    var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);\n  }\n\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n  var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n  // ever the previously attempted to render - not the \"current\". However,\n  // during componentDidUpdate we pass the \"current\" props.\n  // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n  if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n    if (oldProps !== newProps || oldContext !== nextContext) {\n      callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n    }\n  }\n\n  resetHasForceUpdateBeforeProcessing();\n  var oldState = workInProgress.memoizedState;\n  var newState = instance.state = oldState;\n  processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n  newState = workInProgress.memoizedState;\n\n  if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidMount === 'function') {\n      workInProgress.effectTag |= Update;\n    }\n\n    return false;\n  }\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    newState = workInProgress.memoizedState;\n  }\n\n  var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n  if (shouldUpdate) {\n    // In order to support react-lifecycles-compat polyfilled components,\n    // Unsafe lifecycles should not be invoked for components using the new APIs.\n    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n      startPhaseTimer(workInProgress, 'componentWillMount');\n\n      if (typeof instance.componentWillMount === 'function') {\n        instance.componentWillMount();\n      }\n\n      if (typeof instance.UNSAFE_componentWillMount === 'function') {\n        instance.UNSAFE_componentWillMount();\n      }\n\n      stopPhaseTimer();\n    }\n\n    if (typeof instance.componentDidMount === 'function') {\n      workInProgress.effectTag |= Update;\n    }\n  } else {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidMount === 'function') {\n      workInProgress.effectTag |= Update;\n    } // If shouldComponentUpdate returned false, we should still update the\n    // memoized state to indicate that this work can be reused.\n\n\n    workInProgress.memoizedProps = newProps;\n    workInProgress.memoizedState = newState;\n  } // Update the existing instance's state, props, and context pointers even\n  // if shouldComponentUpdate returns false.\n\n\n  instance.props = newProps;\n  instance.state = newState;\n  instance.context = nextContext;\n  return shouldUpdate;\n} // Invokes the update life-cycles and returns false if it shouldn't rerender.\n\n\nfunction updateClassInstance(current, workInProgress, ctor, newProps, renderExpirationTime) {\n  var instance = workInProgress.stateNode;\n  cloneUpdateQueue(current, workInProgress);\n  var oldProps = workInProgress.memoizedProps;\n  instance.props = workInProgress.type === workInProgress.elementType ? oldProps : resolveDefaultProps(workInProgress.type, oldProps);\n  var oldContext = instance.context;\n  var contextType = ctor.contextType;\n  var nextContext = emptyContextObject;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    nextContext = readContext(contextType);\n  } else {\n    var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);\n  }\n\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n  var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n  // ever the previously attempted to render - not the \"current\". However,\n  // during componentDidUpdate we pass the \"current\" props.\n  // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n  if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n    if (oldProps !== newProps || oldContext !== nextContext) {\n      callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n    }\n  }\n\n  resetHasForceUpdateBeforeProcessing();\n  var oldState = workInProgress.memoizedState;\n  var newState = instance.state = oldState;\n  processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n  newState = workInProgress.memoizedState;\n\n  if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidUpdate === 'function') {\n      if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.effectTag |= Update;\n      }\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.effectTag |= Snapshot;\n      }\n    }\n\n    return false;\n  }\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    newState = workInProgress.memoizedState;\n  }\n\n  var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n  if (shouldUpdate) {\n    // In order to support react-lifecycles-compat polyfilled components,\n    // Unsafe lifecycles should not be invoked for components using the new APIs.\n    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {\n      startPhaseTimer(workInProgress, 'componentWillUpdate');\n\n      if (typeof instance.componentWillUpdate === 'function') {\n        instance.componentWillUpdate(newProps, newState, nextContext);\n      }\n\n      if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n        instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);\n      }\n\n      stopPhaseTimer();\n    }\n\n    if (typeof instance.componentDidUpdate === 'function') {\n      workInProgress.effectTag |= Update;\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      workInProgress.effectTag |= Snapshot;\n    }\n  } else {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidUpdate === 'function') {\n      if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.effectTag |= Update;\n      }\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.effectTag |= Snapshot;\n      }\n    } // If shouldComponentUpdate returned false, we should still update the\n    // memoized props/state to indicate that this work can be reused.\n\n\n    workInProgress.memoizedProps = newProps;\n    workInProgress.memoizedState = newState;\n  } // Update the existing instance's state, props, and context pointers even\n  // if shouldComponentUpdate returns false.\n\n\n  instance.props = newProps;\n  instance.state = newState;\n  instance.context = nextContext;\n  return shouldUpdate;\n}\n\nvar didWarnAboutMaps;\nvar didWarnAboutGenerators;\nvar didWarnAboutStringRefs;\nvar ownerHasKeyUseWarning;\nvar ownerHasFunctionTypeWarning;\n\nvar warnForMissingKey = function (child) {};\n\n{\n  didWarnAboutMaps = false;\n  didWarnAboutGenerators = false;\n  didWarnAboutStringRefs = {};\n  /**\n   * Warn if there's no key explicitly set on dynamic arrays of children or\n   * object keys are not valid. This allows us to keep track of children between\n   * updates.\n   */\n\n  ownerHasKeyUseWarning = {};\n  ownerHasFunctionTypeWarning = {};\n\n  warnForMissingKey = function (child) {\n    if (child === null || typeof child !== 'object') {\n      return;\n    }\n\n    if (!child._store || child._store.validated || child.key != null) {\n      return;\n    }\n\n    if (!(typeof child._store === 'object')) {\n      {\n        throw Error( \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    child._store.validated = true;\n    var currentComponentErrorInfo = 'Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.' + getCurrentFiberStackInDev();\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n    error('Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.');\n  };\n}\n\nvar isArray$1 = Array.isArray;\n\nfunction coerceRef(returnFiber, current, element) {\n  var mixedRef = element.ref;\n\n  if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {\n    {\n      // TODO: Clean this up once we turn on the string ref warning for\n      // everyone, because the strict mode case will no longer be relevant\n      if ((returnFiber.mode & StrictMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs\n      // because these cannot be automatically converted to an arrow function\n      // using a codemod. Therefore, we don't have to warn about string refs again.\n      !(element._owner && element._self && element._owner.stateNode !== element._self)) {\n        var componentName = getComponentName(returnFiber.type) || 'Component';\n\n        if (!didWarnAboutStringRefs[componentName]) {\n          {\n            error('A string ref, \"%s\", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref%s', mixedRef, getStackByFiberInDevAndProd(returnFiber));\n          }\n\n          didWarnAboutStringRefs[componentName] = true;\n        }\n      }\n    }\n\n    if (element._owner) {\n      var owner = element._owner;\n      var inst;\n\n      if (owner) {\n        var ownerFiber = owner;\n\n        if (!(ownerFiber.tag === ClassComponent)) {\n          {\n            throw Error( \"Function components cannot have string refs. We recommend using useRef() instead. Learn more about using refs safely here: https://fb.me/react-strict-mode-string-ref\" );\n          }\n        }\n\n        inst = ownerFiber.stateNode;\n      }\n\n      if (!inst) {\n        {\n          throw Error( \"Missing owner for string ref \" + mixedRef + \". This error is likely caused by a bug in React. Please file an issue.\" );\n        }\n      }\n\n      var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref\n\n      if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {\n        return current.ref;\n      }\n\n      var ref = function (value) {\n        var refs = inst.refs;\n\n        if (refs === emptyRefsObject) {\n          // This is a lazy pooled frozen object, so we need to initialize.\n          refs = inst.refs = {};\n        }\n\n        if (value === null) {\n          delete refs[stringRef];\n        } else {\n          refs[stringRef] = value;\n        }\n      };\n\n      ref._stringRef = stringRef;\n      return ref;\n    } else {\n      if (!(typeof mixedRef === 'string')) {\n        {\n          throw Error( \"Expected ref to be a function, a string, an object returned by React.createRef(), or null.\" );\n        }\n      }\n\n      if (!element._owner) {\n        {\n          throw Error( \"Element ref was specified as a string (\" + mixedRef + \") but no owner was set. This could happen for one of the following reasons:\\n1. You may be adding a ref to a function component\\n2. You may be adding a ref to a component that was not created inside a component's render method\\n3. You have multiple copies of React loaded\\nSee https://fb.me/react-refs-must-have-owner for more information.\" );\n        }\n      }\n    }\n  }\n\n  return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  if (returnFiber.type !== 'textarea') {\n    var addendum = '';\n\n    {\n      addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + getCurrentFiberStackInDev();\n    }\n\n    {\n      {\n        throw Error( \"Objects are not valid as a React child (found: \" + (Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild) + \").\" + addendum );\n      }\n    }\n  }\n}\n\nfunction warnOnFunctionType() {\n  {\n    var currentComponentErrorInfo = 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.' + getCurrentFiberStackInDev();\n\n    if (ownerHasFunctionTypeWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasFunctionTypeWarning[currentComponentErrorInfo] = true;\n\n    error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n  }\n} // This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\n\n\nfunction ChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (!shouldTrackSideEffects) {\n      // Noop.\n      return;\n    } // Deletions are added in reversed order so we add it to the front.\n    // At this point, the return fiber's effect list is empty except for\n    // deletions, so we can just append the deletion to the list. The remaining\n    // effects aren't added until the complete phase. Once we implement\n    // resuming, this may not be true.\n\n\n    var last = returnFiber.lastEffect;\n\n    if (last !== null) {\n      last.nextEffect = childToDelete;\n      returnFiber.lastEffect = childToDelete;\n    } else {\n      returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n    }\n\n    childToDelete.nextEffect = null;\n    childToDelete.effectTag = Deletion;\n  }\n\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) {\n      // Noop.\n      return null;\n    } // TODO: For the shouldClone case, this could be micro-optimized a bit by\n    // assuming that after the first child we've already added everything.\n\n\n    var childToDelete = currentFirstChild;\n\n    while (childToDelete !== null) {\n      deleteChild(returnFiber, childToDelete);\n      childToDelete = childToDelete.sibling;\n    }\n\n    return null;\n  }\n\n  function mapRemainingChildren(returnFiber, currentFirstChild) {\n    // Add the remaining children to a temporary map so that we can find them by\n    // keys quickly. Implicit (null) keys get added to this set with their index\n    // instead.\n    var existingChildren = new Map();\n    var existingChild = currentFirstChild;\n\n    while (existingChild !== null) {\n      if (existingChild.key !== null) {\n        existingChildren.set(existingChild.key, existingChild);\n      } else {\n        existingChildren.set(existingChild.index, existingChild);\n      }\n\n      existingChild = existingChild.sibling;\n    }\n\n    return existingChildren;\n  }\n\n  function useFiber(fiber, pendingProps) {\n    // We currently set sibling to null and index to 0 here because it is easy\n    // to forget to do before returning it. E.g. for the single child case.\n    var clone = createWorkInProgress(fiber, pendingProps);\n    clone.index = 0;\n    clone.sibling = null;\n    return clone;\n  }\n\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n\n    if (!shouldTrackSideEffects) {\n      // Noop.\n      return lastPlacedIndex;\n    }\n\n    var current = newFiber.alternate;\n\n    if (current !== null) {\n      var oldIndex = current.index;\n\n      if (oldIndex < lastPlacedIndex) {\n        // This is a move.\n        newFiber.effectTag = Placement;\n        return lastPlacedIndex;\n      } else {\n        // This item can stay in place.\n        return oldIndex;\n      }\n    } else {\n      // This is an insertion.\n      newFiber.effectTag = Placement;\n      return lastPlacedIndex;\n    }\n  }\n\n  function placeSingleChild(newFiber) {\n    // This is simpler for the single child case. We only need to do a\n    // placement for inserting new children.\n    if (shouldTrackSideEffects && newFiber.alternate === null) {\n      newFiber.effectTag = Placement;\n    }\n\n    return newFiber;\n  }\n\n  function updateTextNode(returnFiber, current, textContent, expirationTime) {\n    if (current === null || current.tag !== HostText) {\n      // Insert\n      var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, textContent);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function updateElement(returnFiber, current, element, expirationTime) {\n    if (current !== null) {\n      if (current.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n       isCompatibleFamilyForHotReloading(current, element) )) {\n        // Move based on index\n        var existing = useFiber(current, element.props);\n        existing.ref = coerceRef(returnFiber, current, element);\n        existing.return = returnFiber;\n\n        {\n          existing._debugSource = element._source;\n          existing._debugOwner = element._owner;\n        }\n\n        return existing;\n      }\n    } // Insert\n\n\n    var created = createFiberFromElement(element, returnFiber.mode, expirationTime);\n    created.ref = coerceRef(returnFiber, current, element);\n    created.return = returnFiber;\n    return created;\n  }\n\n  function updatePortal(returnFiber, current, portal, expirationTime) {\n    if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {\n      // Insert\n      var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, portal.children || []);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function updateFragment(returnFiber, current, fragment, expirationTime, key) {\n    if (current === null || current.tag !== Fragment) {\n      // Insert\n      var created = createFiberFromFragment(fragment, returnFiber.mode, expirationTime, key);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, fragment);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function createChild(returnFiber, newChild, expirationTime) {\n    if (typeof newChild === 'string' || typeof newChild === 'number') {\n      // Text nodes don't have keys. If the previous node is implicitly keyed\n      // we can continue to replace it without aborting even if it is not a text\n      // node.\n      var created = createFiberFromText('' + newChild, returnFiber.mode, expirationTime);\n      created.return = returnFiber;\n      return created;\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            var _created = createFiberFromElement(newChild, returnFiber.mode, expirationTime);\n\n            _created.ref = coerceRef(returnFiber, null, newChild);\n            _created.return = returnFiber;\n            return _created;\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            var _created2 = createFiberFromPortal(newChild, returnFiber.mode, expirationTime);\n\n            _created2.return = returnFiber;\n            return _created2;\n          }\n      }\n\n      if (isArray$1(newChild) || getIteratorFn(newChild)) {\n        var _created3 = createFiberFromFragment(newChild, returnFiber.mode, expirationTime, null);\n\n        _created3.return = returnFiber;\n        return _created3;\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType();\n      }\n    }\n\n    return null;\n  }\n\n  function updateSlot(returnFiber, oldFiber, newChild, expirationTime) {\n    // Update the fiber if the keys match, otherwise return null.\n    var key = oldFiber !== null ? oldFiber.key : null;\n\n    if (typeof newChild === 'string' || typeof newChild === 'number') {\n      // Text nodes don't have keys. If the previous node is implicitly keyed\n      // we can continue to replace it without aborting even if it is not a text\n      // node.\n      if (key !== null) {\n        return null;\n      }\n\n      return updateTextNode(returnFiber, oldFiber, '' + newChild, expirationTime);\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            if (newChild.key === key) {\n              if (newChild.type === REACT_FRAGMENT_TYPE) {\n                return updateFragment(returnFiber, oldFiber, newChild.props.children, expirationTime, key);\n              }\n\n              return updateElement(returnFiber, oldFiber, newChild, expirationTime);\n            } else {\n              return null;\n            }\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            if (newChild.key === key) {\n              return updatePortal(returnFiber, oldFiber, newChild, expirationTime);\n            } else {\n              return null;\n            }\n          }\n      }\n\n      if (isArray$1(newChild) || getIteratorFn(newChild)) {\n        if (key !== null) {\n          return null;\n        }\n\n        return updateFragment(returnFiber, oldFiber, newChild, expirationTime, null);\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType();\n      }\n    }\n\n    return null;\n  }\n\n  function updateFromMap(existingChildren, returnFiber, newIdx, newChild, expirationTime) {\n    if (typeof newChild === 'string' || typeof newChild === 'number') {\n      // Text nodes don't have keys, so we neither have to check the old nor\n      // new node for the key. If both are text nodes, they match.\n      var matchedFiber = existingChildren.get(newIdx) || null;\n      return updateTextNode(returnFiber, matchedFiber, '' + newChild, expirationTime);\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n            if (newChild.type === REACT_FRAGMENT_TYPE) {\n              return updateFragment(returnFiber, _matchedFiber, newChild.props.children, expirationTime, newChild.key);\n            }\n\n            return updateElement(returnFiber, _matchedFiber, newChild, expirationTime);\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n            return updatePortal(returnFiber, _matchedFiber2, newChild, expirationTime);\n          }\n      }\n\n      if (isArray$1(newChild) || getIteratorFn(newChild)) {\n        var _matchedFiber3 = existingChildren.get(newIdx) || null;\n\n        return updateFragment(returnFiber, _matchedFiber3, newChild, expirationTime, null);\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType();\n      }\n    }\n\n    return null;\n  }\n  /**\n   * Warns if there is a duplicate or missing key\n   */\n\n\n  function warnOnInvalidKey(child, knownKeys) {\n    {\n      if (typeof child !== 'object' || child === null) {\n        return knownKeys;\n      }\n\n      switch (child.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n        case REACT_PORTAL_TYPE:\n          warnForMissingKey(child);\n          var key = child.key;\n\n          if (typeof key !== 'string') {\n            break;\n          }\n\n          if (knownKeys === null) {\n            knownKeys = new Set();\n            knownKeys.add(key);\n            break;\n          }\n\n          if (!knownKeys.has(key)) {\n            knownKeys.add(key);\n            break;\n          }\n\n          error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);\n\n          break;\n      }\n    }\n\n    return knownKeys;\n  }\n\n  function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, expirationTime) {\n    // This algorithm can't optimize by searching from both ends since we\n    // don't have backpointers on fibers. I'm trying to see how far we can get\n    // with that model. If it ends up not being worth the tradeoffs, we can\n    // add it later.\n    // Even with a two ended optimization, we'd want to optimize for the case\n    // where there are few changes and brute force the comparison instead of\n    // going for the Map. It'd like to explore hitting that path first in\n    // forward-only mode and only go for the Map once we notice that we need\n    // lots of look ahead. This doesn't handle reversal as well as two ended\n    // search but that's unusual. Besides, for the two ended optimization to\n    // work on Iterables, we'd need to copy the whole set.\n    // In this first iteration, we'll just live with hitting the bad case\n    // (adding everything to a Map) in for every insert/move.\n    // If you change this code, also update reconcileChildrenIterator() which\n    // uses the same algorithm.\n    {\n      // First, validate keys.\n      var knownKeys = null;\n\n      for (var i = 0; i < newChildren.length; i++) {\n        var child = newChildren[i];\n        knownKeys = warnOnInvalidKey(child, knownKeys);\n      }\n    }\n\n    var resultingFirstChild = null;\n    var previousNewFiber = null;\n    var oldFiber = currentFirstChild;\n    var lastPlacedIndex = 0;\n    var newIdx = 0;\n    var nextOldFiber = null;\n\n    for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n      if (oldFiber.index > newIdx) {\n        nextOldFiber = oldFiber;\n        oldFiber = null;\n      } else {\n        nextOldFiber = oldFiber.sibling;\n      }\n\n      var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], expirationTime);\n\n      if (newFiber === null) {\n        // TODO: This breaks on empty slots like null children. That's\n        // unfortunate because it triggers the slow path all the time. We need\n        // a better way to communicate whether this was a miss or null,\n        // boolean, undefined, etc.\n        if (oldFiber === null) {\n          oldFiber = nextOldFiber;\n        }\n\n        break;\n      }\n\n      if (shouldTrackSideEffects) {\n        if (oldFiber && newFiber.alternate === null) {\n          // We matched the slot, but we didn't reuse the existing fiber, so we\n          // need to delete the existing child.\n          deleteChild(returnFiber, oldFiber);\n        }\n      }\n\n      lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n      if (previousNewFiber === null) {\n        // TODO: Move out of the loop. This only happens for the first run.\n        resultingFirstChild = newFiber;\n      } else {\n        // TODO: Defer siblings if we're not at the right index for this slot.\n        // I.e. if we had null values before, then we want to defer this\n        // for each null value. However, we also don't want to call updateSlot\n        // with the previous one.\n        previousNewFiber.sibling = newFiber;\n      }\n\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n\n    if (newIdx === newChildren.length) {\n      // We've reached the end of the new children. We can delete the rest.\n      deleteRemainingChildren(returnFiber, oldFiber);\n      return resultingFirstChild;\n    }\n\n    if (oldFiber === null) {\n      // If we don't have any more existing children we can choose a fast path\n      // since the rest will all be insertions.\n      for (; newIdx < newChildren.length; newIdx++) {\n        var _newFiber = createChild(returnFiber, newChildren[newIdx], expirationTime);\n\n        if (_newFiber === null) {\n          continue;\n        }\n\n        lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          // TODO: Move out of the loop. This only happens for the first run.\n          resultingFirstChild = _newFiber;\n        } else {\n          previousNewFiber.sibling = _newFiber;\n        }\n\n        previousNewFiber = _newFiber;\n      }\n\n      return resultingFirstChild;\n    } // Add all children to a key map for quick lookups.\n\n\n    var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n    for (; newIdx < newChildren.length; newIdx++) {\n      var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], expirationTime);\n\n      if (_newFiber2 !== null) {\n        if (shouldTrackSideEffects) {\n          if (_newFiber2.alternate !== null) {\n            // The new fiber is a work in progress, but if there exists a\n            // current, that means that we reused the fiber. We need to delete\n            // it from the child list so that we don't add it to the deletion\n            // list.\n            existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);\n          }\n        }\n\n        lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          resultingFirstChild = _newFiber2;\n        } else {\n          previousNewFiber.sibling = _newFiber2;\n        }\n\n        previousNewFiber = _newFiber2;\n      }\n    }\n\n    if (shouldTrackSideEffects) {\n      // Any existing children that weren't consumed above were deleted. We need\n      // to add them to the deletion list.\n      existingChildren.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    }\n\n    return resultingFirstChild;\n  }\n\n  function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, expirationTime) {\n    // This is the same implementation as reconcileChildrenArray(),\n    // but using the iterator instead.\n    var iteratorFn = getIteratorFn(newChildrenIterable);\n\n    if (!(typeof iteratorFn === 'function')) {\n      {\n        throw Error( \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\" );\n      }\n    }\n\n    {\n      // We don't support rendering Generators because it's a mutation.\n      // See https://github.com/facebook/react/issues/12995\n      if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag\n      newChildrenIterable[Symbol.toStringTag] === 'Generator') {\n        if (!didWarnAboutGenerators) {\n          error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n        }\n\n        didWarnAboutGenerators = true;\n      } // Warn about using Maps as children\n\n\n      if (newChildrenIterable.entries === iteratorFn) {\n        if (!didWarnAboutMaps) {\n          error('Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.');\n        }\n\n        didWarnAboutMaps = true;\n      } // First, validate keys.\n      // We'll get a different iterator later for the main pass.\n\n\n      var _newChildren = iteratorFn.call(newChildrenIterable);\n\n      if (_newChildren) {\n        var knownKeys = null;\n\n        var _step = _newChildren.next();\n\n        for (; !_step.done; _step = _newChildren.next()) {\n          var child = _step.value;\n          knownKeys = warnOnInvalidKey(child, knownKeys);\n        }\n      }\n    }\n\n    var newChildren = iteratorFn.call(newChildrenIterable);\n\n    if (!(newChildren != null)) {\n      {\n        throw Error( \"An iterable object provided no iterator.\" );\n      }\n    }\n\n    var resultingFirstChild = null;\n    var previousNewFiber = null;\n    var oldFiber = currentFirstChild;\n    var lastPlacedIndex = 0;\n    var newIdx = 0;\n    var nextOldFiber = null;\n    var step = newChildren.next();\n\n    for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n      if (oldFiber.index > newIdx) {\n        nextOldFiber = oldFiber;\n        oldFiber = null;\n      } else {\n        nextOldFiber = oldFiber.sibling;\n      }\n\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, expirationTime);\n\n      if (newFiber === null) {\n        // TODO: This breaks on empty slots like null children. That's\n        // unfortunate because it triggers the slow path all the time. We need\n        // a better way to communicate whether this was a miss or null,\n        // boolean, undefined, etc.\n        if (oldFiber === null) {\n          oldFiber = nextOldFiber;\n        }\n\n        break;\n      }\n\n      if (shouldTrackSideEffects) {\n        if (oldFiber && newFiber.alternate === null) {\n          // We matched the slot, but we didn't reuse the existing fiber, so we\n          // need to delete the existing child.\n          deleteChild(returnFiber, oldFiber);\n        }\n      }\n\n      lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n      if (previousNewFiber === null) {\n        // TODO: Move out of the loop. This only happens for the first run.\n        resultingFirstChild = newFiber;\n      } else {\n        // TODO: Defer siblings if we're not at the right index for this slot.\n        // I.e. if we had null values before, then we want to defer this\n        // for each null value. However, we also don't want to call updateSlot\n        // with the previous one.\n        previousNewFiber.sibling = newFiber;\n      }\n\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n\n    if (step.done) {\n      // We've reached the end of the new children. We can delete the rest.\n      deleteRemainingChildren(returnFiber, oldFiber);\n      return resultingFirstChild;\n    }\n\n    if (oldFiber === null) {\n      // If we don't have any more existing children we can choose a fast path\n      // since the rest will all be insertions.\n      for (; !step.done; newIdx++, step = newChildren.next()) {\n        var _newFiber3 = createChild(returnFiber, step.value, expirationTime);\n\n        if (_newFiber3 === null) {\n          continue;\n        }\n\n        lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          // TODO: Move out of the loop. This only happens for the first run.\n          resultingFirstChild = _newFiber3;\n        } else {\n          previousNewFiber.sibling = _newFiber3;\n        }\n\n        previousNewFiber = _newFiber3;\n      }\n\n      return resultingFirstChild;\n    } // Add all children to a key map for quick lookups.\n\n\n    var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n    for (; !step.done; newIdx++, step = newChildren.next()) {\n      var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, expirationTime);\n\n      if (_newFiber4 !== null) {\n        if (shouldTrackSideEffects) {\n          if (_newFiber4.alternate !== null) {\n            // The new fiber is a work in progress, but if there exists a\n            // current, that means that we reused the fiber. We need to delete\n            // it from the child list so that we don't add it to the deletion\n            // list.\n            existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);\n          }\n        }\n\n        lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          resultingFirstChild = _newFiber4;\n        } else {\n          previousNewFiber.sibling = _newFiber4;\n        }\n\n        previousNewFiber = _newFiber4;\n      }\n    }\n\n    if (shouldTrackSideEffects) {\n      // Any existing children that weren't consumed above were deleted. We need\n      // to add them to the deletion list.\n      existingChildren.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    }\n\n    return resultingFirstChild;\n  }\n\n  function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, expirationTime) {\n    // There's no need to check for keys on text nodes since we don't have a\n    // way to define them.\n    if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n      // We already have an existing node so let's just update it and delete\n      // the rest.\n      deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n      var existing = useFiber(currentFirstChild, textContent);\n      existing.return = returnFiber;\n      return existing;\n    } // The existing first child is not a text node so we need to create one\n    // and delete the existing ones.\n\n\n    deleteRemainingChildren(returnFiber, currentFirstChild);\n    var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n    created.return = returnFiber;\n    return created;\n  }\n\n  function reconcileSingleElement(returnFiber, currentFirstChild, element, expirationTime) {\n    var key = element.key;\n    var child = currentFirstChild;\n\n    while (child !== null) {\n      // TODO: If key === null and child.key === null, then this only applies to\n      // the first item in the list.\n      if (child.key === key) {\n        switch (child.tag) {\n          case Fragment:\n            {\n              if (element.type === REACT_FRAGMENT_TYPE) {\n                deleteRemainingChildren(returnFiber, child.sibling);\n                var existing = useFiber(child, element.props.children);\n                existing.return = returnFiber;\n\n                {\n                  existing._debugSource = element._source;\n                  existing._debugOwner = element._owner;\n                }\n\n                return existing;\n              }\n\n              break;\n            }\n\n          case Block:\n\n          // We intentionally fallthrough here if enableBlocksAPI is not on.\n          // eslint-disable-next-lined no-fallthrough\n\n          default:\n            {\n              if (child.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n               isCompatibleFamilyForHotReloading(child, element) )) {\n                deleteRemainingChildren(returnFiber, child.sibling);\n\n                var _existing3 = useFiber(child, element.props);\n\n                _existing3.ref = coerceRef(returnFiber, child, element);\n                _existing3.return = returnFiber;\n\n                {\n                  _existing3._debugSource = element._source;\n                  _existing3._debugOwner = element._owner;\n                }\n\n                return _existing3;\n              }\n\n              break;\n            }\n        } // Didn't match.\n\n\n        deleteRemainingChildren(returnFiber, child);\n        break;\n      } else {\n        deleteChild(returnFiber, child);\n      }\n\n      child = child.sibling;\n    }\n\n    if (element.type === REACT_FRAGMENT_TYPE) {\n      var created = createFiberFromFragment(element.props.children, returnFiber.mode, expirationTime, element.key);\n      created.return = returnFiber;\n      return created;\n    } else {\n      var _created4 = createFiberFromElement(element, returnFiber.mode, expirationTime);\n\n      _created4.ref = coerceRef(returnFiber, currentFirstChild, element);\n      _created4.return = returnFiber;\n      return _created4;\n    }\n  }\n\n  function reconcileSinglePortal(returnFiber, currentFirstChild, portal, expirationTime) {\n    var key = portal.key;\n    var child = currentFirstChild;\n\n    while (child !== null) {\n      // TODO: If key === null and child.key === null, then this only applies to\n      // the first item in the list.\n      if (child.key === key) {\n        if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n          deleteRemainingChildren(returnFiber, child.sibling);\n          var existing = useFiber(child, portal.children || []);\n          existing.return = returnFiber;\n          return existing;\n        } else {\n          deleteRemainingChildren(returnFiber, child);\n          break;\n        }\n      } else {\n        deleteChild(returnFiber, child);\n      }\n\n      child = child.sibling;\n    }\n\n    var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n    created.return = returnFiber;\n    return created;\n  } // This API will tag the children with the side-effect of the reconciliation\n  // itself. They will be added to the side-effect list as we pass through the\n  // children and the parent.\n\n\n  function reconcileChildFibers(returnFiber, currentFirstChild, newChild, expirationTime) {\n    // This function is not recursive.\n    // If the top level item is an array, we treat it as a set of children,\n    // not as a fragment. Nested arrays on the other hand will be treated as\n    // fragment nodes. Recursion happens at the normal flow.\n    // Handle top level unkeyed fragments as if they were arrays.\n    // This leads to an ambiguity between <>{[...]}</> and <>...</>.\n    // We treat the ambiguous cases above the same.\n    var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;\n\n    if (isUnkeyedTopLevelFragment) {\n      newChild = newChild.props.children;\n    } // Handle object types\n\n\n    var isObject = typeof newChild === 'object' && newChild !== null;\n\n    if (isObject) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, expirationTime));\n\n        case REACT_PORTAL_TYPE:\n          return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, expirationTime));\n      }\n    }\n\n    if (typeof newChild === 'string' || typeof newChild === 'number') {\n      return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, expirationTime));\n    }\n\n    if (isArray$1(newChild)) {\n      return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, expirationTime);\n    }\n\n    if (getIteratorFn(newChild)) {\n      return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, expirationTime);\n    }\n\n    if (isObject) {\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType();\n      }\n    }\n\n    if (typeof newChild === 'undefined' && !isUnkeyedTopLevelFragment) {\n      // If the new child is undefined, and the return fiber is a composite\n      // component, throw an error. If Fiber return types are disabled,\n      // we already threw above.\n      switch (returnFiber.tag) {\n        case ClassComponent:\n          {\n            {\n              var instance = returnFiber.stateNode;\n\n              if (instance.render._isMockFunction) {\n                // We allow auto-mocks to proceed as if they're returning null.\n                break;\n              }\n            }\n          }\n        // Intentionally fall through to the next case, which handles both\n        // functions and classes\n        // eslint-disable-next-lined no-fallthrough\n\n        case FunctionComponent:\n          {\n            var Component = returnFiber.type;\n\n            {\n              {\n                throw Error( (Component.displayName || Component.name || 'Component') + \"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.\" );\n              }\n            }\n          }\n      }\n    } // Remaining cases are all treated as empty.\n\n\n    return deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n\n  return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = ChildReconciler(true);\nvar mountChildFibers = ChildReconciler(false);\nfunction cloneChildFibers(current, workInProgress) {\n  if (!(current === null || workInProgress.child === current.child)) {\n    {\n      throw Error( \"Resuming work not yet implemented.\" );\n    }\n  }\n\n  if (workInProgress.child === null) {\n    return;\n  }\n\n  var currentChild = workInProgress.child;\n  var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);\n  workInProgress.child = newChild;\n  newChild.return = workInProgress;\n\n  while (currentChild.sibling !== null) {\n    currentChild = currentChild.sibling;\n    newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);\n    newChild.return = workInProgress;\n  }\n\n  newChild.sibling = null;\n} // Reset a workInProgress child set to prepare it for a second pass.\n\nfunction resetChildFibers(workInProgress, renderExpirationTime) {\n  var child = workInProgress.child;\n\n  while (child !== null) {\n    resetWorkInProgress(child, renderExpirationTime);\n    child = child.sibling;\n  }\n}\n\nvar NO_CONTEXT = {};\nvar contextStackCursor$1 = createCursor(NO_CONTEXT);\nvar contextFiberStackCursor = createCursor(NO_CONTEXT);\nvar rootInstanceStackCursor = createCursor(NO_CONTEXT);\n\nfunction requiredContext(c) {\n  if (!(c !== NO_CONTEXT)) {\n    {\n      throw Error( \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n\n  return c;\n}\n\nfunction getRootHostContainer() {\n  var rootInstance = requiredContext(rootInstanceStackCursor.current);\n  return rootInstance;\n}\n\nfunction pushHostContainer(fiber, nextRootInstance) {\n  // Push current root instance onto the stack;\n  // This allows us to reset root when portals are popped.\n  push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.\n  // This enables us to pop only Fibers that provide unique contexts.\n\n  push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.\n  // However, we can't just call getRootHostContext() and push it because\n  // we'd have a different number of entries on the stack depending on\n  // whether getRootHostContext() throws somewhere in renderer code or not.\n  // So we push an empty value first. This lets us safely unwind on errors.\n\n  push(contextStackCursor$1, NO_CONTEXT, fiber);\n  var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.\n\n  pop(contextStackCursor$1, fiber);\n  push(contextStackCursor$1, nextRootContext, fiber);\n}\n\nfunction popHostContainer(fiber) {\n  pop(contextStackCursor$1, fiber);\n  pop(contextFiberStackCursor, fiber);\n  pop(rootInstanceStackCursor, fiber);\n}\n\nfunction getHostContext() {\n  var context = requiredContext(contextStackCursor$1.current);\n  return context;\n}\n\nfunction pushHostContext(fiber) {\n  var rootInstance = requiredContext(rootInstanceStackCursor.current);\n  var context = requiredContext(contextStackCursor$1.current);\n  var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.\n\n  if (context === nextContext) {\n    return;\n  } // Track the context and the Fiber that provided it.\n  // This enables us to pop only Fibers that provide unique contexts.\n\n\n  push(contextFiberStackCursor, fiber, fiber);\n  push(contextStackCursor$1, nextContext, fiber);\n}\n\nfunction popHostContext(fiber) {\n  // Do not pop unless this Fiber provided the current context.\n  // pushHostContext() only pushes Fibers that provide unique contexts.\n  if (contextFiberStackCursor.current !== fiber) {\n    return;\n  }\n\n  pop(contextStackCursor$1, fiber);\n  pop(contextFiberStackCursor, fiber);\n}\n\nvar DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is\n// inherited deeply down the subtree. The upper bits only affect\n// this immediate suspense boundary and gets reset each new\n// boundary or suspense list.\n\nvar SubtreeSuspenseContextMask = 1; // Subtree Flags:\n// InvisibleParentSuspenseContext indicates that one of our parent Suspense\n// boundaries is not currently showing visible main content.\n// Either because it is already showing a fallback or is not mounted at all.\n// We can use this to determine if it is desirable to trigger a fallback at\n// the parent. If not, then we might need to trigger undesirable boundaries\n// and/or suspend the commit to avoid hiding the parent content.\n\nvar InvisibleParentSuspenseContext = 1; // Shallow Flags:\n// ForceSuspenseFallback can be used by SuspenseList to force newly added\n// items into their fallback state during one of the render passes.\n\nvar ForceSuspenseFallback = 2;\nvar suspenseStackCursor = createCursor(DefaultSuspenseContext);\nfunction hasSuspenseContext(parentContext, flag) {\n  return (parentContext & flag) !== 0;\n}\nfunction setDefaultShallowSuspenseContext(parentContext) {\n  return parentContext & SubtreeSuspenseContextMask;\n}\nfunction setShallowSuspenseContext(parentContext, shallowContext) {\n  return parentContext & SubtreeSuspenseContextMask | shallowContext;\n}\nfunction addSubtreeSuspenseContext(parentContext, subtreeContext) {\n  return parentContext | subtreeContext;\n}\nfunction pushSuspenseContext(fiber, newContext) {\n  push(suspenseStackCursor, newContext, fiber);\n}\nfunction popSuspenseContext(fiber) {\n  pop(suspenseStackCursor, fiber);\n}\n\nfunction shouldCaptureSuspense(workInProgress, hasInvisibleParent) {\n  // If it was the primary children that just suspended, capture and render the\n  // fallback. Otherwise, don't capture and bubble to the next boundary.\n  var nextState = workInProgress.memoizedState;\n\n  if (nextState !== null) {\n    if (nextState.dehydrated !== null) {\n      // A dehydrated boundary always captures.\n      return true;\n    }\n\n    return false;\n  }\n\n  var props = workInProgress.memoizedProps; // In order to capture, the Suspense component must have a fallback prop.\n\n  if (props.fallback === undefined) {\n    return false;\n  } // Regular boundaries always capture.\n\n\n  if (props.unstable_avoidThisFallback !== true) {\n    return true;\n  } // If it's a boundary we should avoid, then we prefer to bubble up to the\n  // parent boundary if it is currently invisible.\n\n\n  if (hasInvisibleParent) {\n    return false;\n  } // If the parent is not able to handle it, we must handle it.\n\n\n  return true;\n}\nfunction findFirstSuspended(row) {\n  var node = row;\n\n  while (node !== null) {\n    if (node.tag === SuspenseComponent) {\n      var state = node.memoizedState;\n\n      if (state !== null) {\n        var dehydrated = state.dehydrated;\n\n        if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {\n          return node;\n        }\n      }\n    } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't\n    // keep track of whether it suspended or not.\n    node.memoizedProps.revealOrder !== undefined) {\n      var didSuspend = (node.effectTag & DidCapture) !== NoEffect;\n\n      if (didSuspend) {\n        return node;\n      }\n    } else if (node.child !== null) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === row) {\n      return null;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === row) {\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n\n  return null;\n}\n\nfunction createDeprecatedResponderListener(responder, props) {\n  var eventResponderListener = {\n    responder: responder,\n    props: props\n  };\n\n  {\n    Object.freeze(eventResponderListener);\n  }\n\n  return eventResponderListener;\n}\n\nvar HasEffect =\n/* */\n1; // Represents the phase in which the effect (not the clean-up) fires.\n\nvar Layout =\n/*    */\n2;\nvar Passive$1 =\n/*   */\n4;\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher,\n    ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar didWarnAboutMismatchedHooksForComponent;\n\n{\n  didWarnAboutMismatchedHooksForComponent = new Set();\n}\n\n// These are set right before calling the component.\nvar renderExpirationTime = NoWork; // The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\n\nvar currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\n\nvar currentHook = null;\nvar workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This\n// does not get reset if we do another render pass; only when we're completely\n// finished evaluating this component. This is an optimization so we know\n// whether we need to clear render phase updates after a throw.\n\nvar didScheduleRenderPhaseUpdate = false;\nvar RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\n\nvar hookTypesDev = null;\nvar hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore\n// the dependencies for Hooks that need them (e.g. useEffect or useMemo).\n// When true, such Hooks will always be \"remounted\". Only used during hot reload.\n\nvar ignorePreviousDependencies = false;\n\nfunction mountHookTypesDev() {\n  {\n    var hookName = currentHookNameInDev;\n\n    if (hookTypesDev === null) {\n      hookTypesDev = [hookName];\n    } else {\n      hookTypesDev.push(hookName);\n    }\n  }\n}\n\nfunction updateHookTypesDev() {\n  {\n    var hookName = currentHookNameInDev;\n\n    if (hookTypesDev !== null) {\n      hookTypesUpdateIndexDev++;\n\n      if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {\n        warnOnHookMismatchInDev(hookName);\n      }\n    }\n  }\n}\n\nfunction checkDepsAreArrayDev(deps) {\n  {\n    if (deps !== undefined && deps !== null && !Array.isArray(deps)) {\n      // Verify deps, but only on mount to avoid extra checks.\n      // It's unlikely their type would change as usually you define them inline.\n      error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);\n    }\n  }\n}\n\nfunction warnOnHookMismatchInDev(currentHookName) {\n  {\n    var componentName = getComponentName(currentlyRenderingFiber$1.type);\n\n    if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {\n      didWarnAboutMismatchedHooksForComponent.add(componentName);\n\n      if (hookTypesDev !== null) {\n        var table = '';\n        var secondColumnStart = 30;\n\n        for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {\n          var oldHookName = hookTypesDev[i];\n          var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;\n          var row = i + 1 + \". \" + oldHookName; // Extra space so second column lines up\n          // lol @ IE not supporting String#repeat\n\n          while (row.length < secondColumnStart) {\n            row += ' ';\n          }\n\n          row += newHookName + '\\n';\n          table += row;\n        }\n\n        error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://fb.me/rules-of-hooks\\n\\n' + '   Previous render            Next render\\n' + '   ------------------------------------------------------\\n' + '%s' + '   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n', componentName, table);\n      }\n    }\n  }\n}\n\nfunction throwInvalidHookError() {\n  {\n    {\n      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.\" );\n    }\n  }\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  {\n    if (ignorePreviousDependencies) {\n      // Only true when this component is being hot reloaded.\n      return false;\n    }\n  }\n\n  if (prevDeps === null) {\n    {\n      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);\n    }\n\n    return false;\n  }\n\n  {\n    // Don't bother comparing lengths in prod because these arrays should be\n    // passed inline.\n    if (nextDeps.length !== prevDeps.length) {\n      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, \"[\" + prevDeps.join(', ') + \"]\", \"[\" + nextDeps.join(', ') + \"]\");\n    }\n  }\n\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n    if (objectIs(nextDeps[i], prevDeps[i])) {\n      continue;\n    }\n\n    return false;\n  }\n\n  return true;\n}\n\nfunction renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderExpirationTime) {\n  renderExpirationTime = nextRenderExpirationTime;\n  currentlyRenderingFiber$1 = workInProgress;\n\n  {\n    hookTypesDev = current !== null ? current._debugHookTypes : null;\n    hookTypesUpdateIndexDev = -1; // Used for hot reloading:\n\n    ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;\n  }\n\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.expirationTime = NoWork; // The following should have already been reset\n  // currentHook = null;\n  // workInProgressHook = null;\n  // didScheduleRenderPhaseUpdate = false;\n  // TODO Warn if no hooks are used at all during mount, then some are used during update.\n  // Currently we will identify the update render as a mount because memoizedState === null.\n  // This is tricky because it's valid for certain types of components (e.g. React.lazy)\n  // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.\n  // Non-stateful hooks (e.g. context) don't get added to memoizedState,\n  // so memoizedState would be null during updates and mounts.\n\n  {\n    if (current !== null && current.memoizedState !== null) {\n      ReactCurrentDispatcher.current = HooksDispatcherOnUpdateInDEV;\n    } else if (hookTypesDev !== null) {\n      // This dispatcher handles an edge case where a component is updating,\n      // but no stateful hooks have been used.\n      // We want to match the production code behavior (which will use HooksDispatcherOnMount),\n      // but with the extra DEV validation to ensure hooks ordering hasn't changed.\n      // This dispatcher does that.\n      ReactCurrentDispatcher.current = HooksDispatcherOnMountWithHookTypesInDEV;\n    } else {\n      ReactCurrentDispatcher.current = HooksDispatcherOnMountInDEV;\n    }\n  }\n\n  var children = Component(props, secondArg); // Check if there was a render phase update\n\n  if (workInProgress.expirationTime === renderExpirationTime) {\n    // Keep rendering in a loop for as long as render phase updates continue to\n    // be scheduled. Use a counter to prevent infinite loops.\n    var numberOfReRenders = 0;\n\n    do {\n      workInProgress.expirationTime = NoWork;\n\n      if (!(numberOfReRenders < RE_RENDER_LIMIT)) {\n        {\n          throw Error( \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\" );\n        }\n      }\n\n      numberOfReRenders += 1;\n\n      {\n        // Even when hot reloading, allow dependencies to stabilize\n        // after first render to prevent infinite render phase updates.\n        ignorePreviousDependencies = false;\n      } // Start over from the beginning of the list\n\n\n      currentHook = null;\n      workInProgressHook = null;\n      workInProgress.updateQueue = null;\n\n      {\n        // Also validate hook order for cascading updates.\n        hookTypesUpdateIndexDev = -1;\n      }\n\n      ReactCurrentDispatcher.current =  HooksDispatcherOnRerenderInDEV ;\n      children = Component(props, secondArg);\n    } while (workInProgress.expirationTime === renderExpirationTime);\n  } // We can assume the previous dispatcher is always this one, since we set it\n  // at the beginning of the render phase and there's no re-entrancy.\n\n\n  ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n  {\n    workInProgress._debugHookTypes = hookTypesDev;\n  } // This check uses currentHook so that it works the same in DEV and prod bundles.\n  // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\n\n\n  var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;\n  renderExpirationTime = NoWork;\n  currentlyRenderingFiber$1 = null;\n  currentHook = null;\n  workInProgressHook = null;\n\n  {\n    currentHookNameInDev = null;\n    hookTypesDev = null;\n    hookTypesUpdateIndexDev = -1;\n  }\n\n  didScheduleRenderPhaseUpdate = false;\n\n  if (!!didRenderTooFewHooks) {\n    {\n      throw Error( \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\" );\n    }\n  }\n\n  return children;\n}\nfunction bailoutHooks(current, workInProgress, expirationTime) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.effectTag &= ~(Passive | Update);\n\n  if (current.expirationTime <= expirationTime) {\n    current.expirationTime = NoWork;\n  }\n}\nfunction resetHooksAfterThrow() {\n  // We can assume the previous dispatcher is always this one, since we set it\n  // at the beginning of the render phase and there's no re-entrancy.\n  ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n  if (didScheduleRenderPhaseUpdate) {\n    // There were render phase updates. These are only valid for this render\n    // phase, which we are now aborting. Remove the updates from the queues so\n    // they do not persist to the next render. Do not remove updates from hooks\n    // that weren't processed.\n    //\n    // Only reset the updates from the queue if it has a clone. If it does\n    // not have a clone, that means it wasn't processed, and the updates were\n    // scheduled before we entered the render phase.\n    var hook = currentlyRenderingFiber$1.memoizedState;\n\n    while (hook !== null) {\n      var queue = hook.queue;\n\n      if (queue !== null) {\n        queue.pending = null;\n      }\n\n      hook = hook.next;\n    }\n  }\n\n  renderExpirationTime = NoWork;\n  currentlyRenderingFiber$1 = null;\n  currentHook = null;\n  workInProgressHook = null;\n\n  {\n    hookTypesDev = null;\n    hookTypesUpdateIndexDev = -1;\n    currentHookNameInDev = null;\n  }\n\n  didScheduleRenderPhaseUpdate = false;\n}\n\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n\n  if (workInProgressHook === null) {\n    // This is the first hook in the list\n    currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;\n  } else {\n    // Append to the end of the list\n    workInProgressHook = workInProgressHook.next = hook;\n  }\n\n  return workInProgressHook;\n}\n\nfunction updateWorkInProgressHook() {\n  // This function is used both for updates and for re-renders triggered by a\n  // render phase update. It assumes there is either a current hook we can\n  // clone, or a work-in-progress hook from a previous render pass that we can\n  // use as a base. When we reach the end of the base list, we must switch to\n  // the dispatcher used for mounts.\n  var nextCurrentHook;\n\n  if (currentHook === null) {\n    var current = currentlyRenderingFiber$1.alternate;\n\n    if (current !== null) {\n      nextCurrentHook = current.memoizedState;\n    } else {\n      nextCurrentHook = null;\n    }\n  } else {\n    nextCurrentHook = currentHook.next;\n  }\n\n  var nextWorkInProgressHook;\n\n  if (workInProgressHook === null) {\n    nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;\n  } else {\n    nextWorkInProgressHook = workInProgressHook.next;\n  }\n\n  if (nextWorkInProgressHook !== null) {\n    // There's already a work-in-progress. Reuse it.\n    workInProgressHook = nextWorkInProgressHook;\n    nextWorkInProgressHook = workInProgressHook.next;\n    currentHook = nextCurrentHook;\n  } else {\n    // Clone from the current hook.\n    if (!(nextCurrentHook !== null)) {\n      {\n        throw Error( \"Rendered more hooks than during the previous render.\" );\n      }\n    }\n\n    currentHook = nextCurrentHook;\n    var newHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n\n    if (workInProgressHook === null) {\n      // This is the first hook in the list.\n      currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;\n    } else {\n      // Append to the end of the list.\n      workInProgressHook = workInProgressHook.next = newHook;\n    }\n  }\n\n  return workInProgressHook;\n}\n\nfunction createFunctionComponentUpdateQueue() {\n  return {\n    lastEffect: null\n  };\n}\n\nfunction basicStateReducer(state, action) {\n  // $FlowFixMe: Flow doesn't like mixed types\n  return typeof action === 'function' ? action(state) : action;\n}\n\nfunction mountReducer(reducer, initialArg, init) {\n  var hook = mountWorkInProgressHook();\n  var initialState;\n\n  if (init !== undefined) {\n    initialState = init(initialArg);\n  } else {\n    initialState = initialArg;\n  }\n\n  hook.memoizedState = hook.baseState = initialState;\n  var queue = hook.queue = {\n    pending: null,\n    dispatch: null,\n    lastRenderedReducer: reducer,\n    lastRenderedState: initialState\n  };\n  var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);\n  return [hook.memoizedState, dispatch];\n}\n\nfunction updateReducer(reducer, initialArg, init) {\n  var hook = updateWorkInProgressHook();\n  var queue = hook.queue;\n\n  if (!(queue !== null)) {\n    {\n      throw Error( \"Should have a queue. This is likely a bug in React. Please file an issue.\" );\n    }\n  }\n\n  queue.lastRenderedReducer = reducer;\n  var current = currentHook; // The last rebase update that is NOT part of the base state.\n\n  var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.\n\n  var pendingQueue = queue.pending;\n\n  if (pendingQueue !== null) {\n    // We have new updates that haven't been processed yet.\n    // We'll add them to the base queue.\n    if (baseQueue !== null) {\n      // Merge the pending queue and the base queue.\n      var baseFirst = baseQueue.next;\n      var pendingFirst = pendingQueue.next;\n      baseQueue.next = pendingFirst;\n      pendingQueue.next = baseFirst;\n    }\n\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n\n  if (baseQueue !== null) {\n    // We have a queue to process.\n    var first = baseQueue.next;\n    var newState = current.baseState;\n    var newBaseState = null;\n    var newBaseQueueFirst = null;\n    var newBaseQueueLast = null;\n    var update = first;\n\n    do {\n      var updateExpirationTime = update.expirationTime;\n\n      if (updateExpirationTime < renderExpirationTime) {\n        // Priority is insufficient. Skip this update. If this is the first\n        // skipped update, the previous update/state is the new base\n        // update/state.\n        var clone = {\n          expirationTime: update.expirationTime,\n          suspenseConfig: update.suspenseConfig,\n          action: update.action,\n          eagerReducer: update.eagerReducer,\n          eagerState: update.eagerState,\n          next: null\n        };\n\n        if (newBaseQueueLast === null) {\n          newBaseQueueFirst = newBaseQueueLast = clone;\n          newBaseState = newState;\n        } else {\n          newBaseQueueLast = newBaseQueueLast.next = clone;\n        } // Update the remaining priority in the queue.\n\n\n        if (updateExpirationTime > currentlyRenderingFiber$1.expirationTime) {\n          currentlyRenderingFiber$1.expirationTime = updateExpirationTime;\n          markUnprocessedUpdateTime(updateExpirationTime);\n        }\n      } else {\n        // This update does have sufficient priority.\n        if (newBaseQueueLast !== null) {\n          var _clone = {\n            expirationTime: Sync,\n            // This update is going to be committed so we never want uncommit it.\n            suspenseConfig: update.suspenseConfig,\n            action: update.action,\n            eagerReducer: update.eagerReducer,\n            eagerState: update.eagerState,\n            next: null\n          };\n          newBaseQueueLast = newBaseQueueLast.next = _clone;\n        } // Mark the event time of this update as relevant to this render pass.\n        // TODO: This should ideally use the true event time of this update rather than\n        // its priority which is a derived and not reverseable value.\n        // TODO: We should skip this update if it was already committed but currently\n        // we have no way of detecting the difference between a committed and suspended\n        // update here.\n\n\n        markRenderEventTimeAndConfig(updateExpirationTime, update.suspenseConfig); // Process this update.\n\n        if (update.eagerReducer === reducer) {\n          // If this update was processed eagerly, and its reducer matches the\n          // current reducer, we can use the eagerly computed state.\n          newState = update.eagerState;\n        } else {\n          var action = update.action;\n          newState = reducer(newState, action);\n        }\n      }\n\n      update = update.next;\n    } while (update !== null && update !== first);\n\n    if (newBaseQueueLast === null) {\n      newBaseState = newState;\n    } else {\n      newBaseQueueLast.next = newBaseQueueFirst;\n    } // Mark that the fiber performed work, but only if the new state is\n    // different from the current state.\n\n\n    if (!objectIs(newState, hook.memoizedState)) {\n      markWorkInProgressReceivedUpdate();\n    }\n\n    hook.memoizedState = newState;\n    hook.baseState = newBaseState;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = newState;\n  }\n\n  var dispatch = queue.dispatch;\n  return [hook.memoizedState, dispatch];\n}\n\nfunction rerenderReducer(reducer, initialArg, init) {\n  var hook = updateWorkInProgressHook();\n  var queue = hook.queue;\n\n  if (!(queue !== null)) {\n    {\n      throw Error( \"Should have a queue. This is likely a bug in React. Please file an issue.\" );\n    }\n  }\n\n  queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous\n  // work-in-progress hook.\n\n  var dispatch = queue.dispatch;\n  var lastRenderPhaseUpdate = queue.pending;\n  var newState = hook.memoizedState;\n\n  if (lastRenderPhaseUpdate !== null) {\n    // The queue doesn't persist past this render pass.\n    queue.pending = null;\n    var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n    var update = firstRenderPhaseUpdate;\n\n    do {\n      // Process this render phase update. We don't have to check the\n      // priority because it will always be the same as the current\n      // render's.\n      var action = update.action;\n      newState = reducer(newState, action);\n      update = update.next;\n    } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is\n    // different from the current state.\n\n\n    if (!objectIs(newState, hook.memoizedState)) {\n      markWorkInProgressReceivedUpdate();\n    }\n\n    hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to\n    // the base state unless the queue is empty.\n    // TODO: Not sure if this is the desired semantics, but it's what we\n    // do for gDSFP. I can't remember why.\n\n    if (hook.baseQueue === null) {\n      hook.baseState = newState;\n    }\n\n    queue.lastRenderedState = newState;\n  }\n\n  return [newState, dispatch];\n}\n\nfunction mountState(initialState) {\n  var hook = mountWorkInProgressHook();\n\n  if (typeof initialState === 'function') {\n    // $FlowFixMe: Flow doesn't like mixed types\n    initialState = initialState();\n  }\n\n  hook.memoizedState = hook.baseState = initialState;\n  var queue = hook.queue = {\n    pending: null,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);\n  return [hook.memoizedState, dispatch];\n}\n\nfunction updateState(initialState) {\n  return updateReducer(basicStateReducer);\n}\n\nfunction rerenderState(initialState) {\n  return rerenderReducer(basicStateReducer);\n}\n\nfunction pushEffect(tag, create, destroy, deps) {\n  var effect = {\n    tag: tag,\n    create: create,\n    destroy: destroy,\n    deps: deps,\n    // Circular\n    next: null\n  };\n  var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n  if (componentUpdateQueue === null) {\n    componentUpdateQueue = createFunctionComponentUpdateQueue();\n    currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n    componentUpdateQueue.lastEffect = effect.next = effect;\n  } else {\n    var lastEffect = componentUpdateQueue.lastEffect;\n\n    if (lastEffect === null) {\n      componentUpdateQueue.lastEffect = effect.next = effect;\n    } else {\n      var firstEffect = lastEffect.next;\n      lastEffect.next = effect;\n      effect.next = firstEffect;\n      componentUpdateQueue.lastEffect = effect;\n    }\n  }\n\n  return effect;\n}\n\nfunction mountRef(initialValue) {\n  var hook = mountWorkInProgressHook();\n  var ref = {\n    current: initialValue\n  };\n\n  {\n    Object.seal(ref);\n  }\n\n  hook.memoizedState = ref;\n  return ref;\n}\n\nfunction updateRef(initialValue) {\n  var hook = updateWorkInProgressHook();\n  return hook.memoizedState;\n}\n\nfunction mountEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  currentlyRenderingFiber$1.effectTag |= fiberEffectTag;\n  hook.memoizedState = pushEffect(HasEffect | hookEffectTag, create, undefined, nextDeps);\n}\n\nfunction updateEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var destroy = undefined;\n\n  if (currentHook !== null) {\n    var prevEffect = currentHook.memoizedState;\n    destroy = prevEffect.destroy;\n\n    if (nextDeps !== null) {\n      var prevDeps = prevEffect.deps;\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        pushEffect(hookEffectTag, create, destroy, nextDeps);\n        return;\n      }\n    }\n  }\n\n  currentlyRenderingFiber$1.effectTag |= fiberEffectTag;\n  hook.memoizedState = pushEffect(HasEffect | hookEffectTag, create, destroy, nextDeps);\n}\n\nfunction mountEffect(create, deps) {\n  {\n    // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n    if ('undefined' !== typeof jest) {\n      warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);\n    }\n  }\n\n  return mountEffectImpl(Update | Passive, Passive$1, create, deps);\n}\n\nfunction updateEffect(create, deps) {\n  {\n    // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n    if ('undefined' !== typeof jest) {\n      warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);\n    }\n  }\n\n  return updateEffectImpl(Update | Passive, Passive$1, create, deps);\n}\n\nfunction mountLayoutEffect(create, deps) {\n  return mountEffectImpl(Update, Layout, create, deps);\n}\n\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(Update, Layout, create, deps);\n}\n\nfunction imperativeHandleEffect(create, ref) {\n  if (typeof ref === 'function') {\n    var refCallback = ref;\n\n    var _inst = create();\n\n    refCallback(_inst);\n    return function () {\n      refCallback(null);\n    };\n  } else if (ref !== null && ref !== undefined) {\n    var refObject = ref;\n\n    {\n      if (!refObject.hasOwnProperty('current')) {\n        error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');\n      }\n    }\n\n    var _inst2 = create();\n\n    refObject.current = _inst2;\n    return function () {\n      refObject.current = null;\n    };\n  }\n}\n\nfunction mountImperativeHandle(ref, create, deps) {\n  {\n    if (typeof create !== 'function') {\n      error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n    }\n  } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n  var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n  return mountEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction updateImperativeHandle(ref, create, deps) {\n  {\n    if (typeof create !== 'function') {\n      error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n    }\n  } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n  var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n  return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction mountDebugValue(value, formatterFn) {// This hook is normally a no-op.\n  // The react-debug-hooks package injects its own implementation\n  // so that e.g. DevTools can display custom hook values.\n}\n\nvar updateDebugValue = mountDebugValue;\n\nfunction mountCallback(callback, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  hook.memoizedState = [callback, nextDeps];\n  return callback;\n}\n\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var prevState = hook.memoizedState;\n\n  if (prevState !== null) {\n    if (nextDeps !== null) {\n      var prevDeps = prevState[1];\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        return prevState[0];\n      }\n    }\n  }\n\n  hook.memoizedState = [callback, nextDeps];\n  return callback;\n}\n\nfunction mountMemo(nextCreate, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var nextValue = nextCreate();\n  hook.memoizedState = [nextValue, nextDeps];\n  return nextValue;\n}\n\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var prevState = hook.memoizedState;\n\n  if (prevState !== null) {\n    // Assume these are defined. If they're not, areHookInputsEqual will warn.\n    if (nextDeps !== null) {\n      var prevDeps = prevState[1];\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        return prevState[0];\n      }\n    }\n  }\n\n  var nextValue = nextCreate();\n  hook.memoizedState = [nextValue, nextDeps];\n  return nextValue;\n}\n\nfunction mountDeferredValue(value, config) {\n  var _mountState = mountState(value),\n      prevValue = _mountState[0],\n      setValue = _mountState[1];\n\n  mountEffect(function () {\n    var previousConfig = ReactCurrentBatchConfig$1.suspense;\n    ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n    try {\n      setValue(value);\n    } finally {\n      ReactCurrentBatchConfig$1.suspense = previousConfig;\n    }\n  }, [value, config]);\n  return prevValue;\n}\n\nfunction updateDeferredValue(value, config) {\n  var _updateState = updateState(),\n      prevValue = _updateState[0],\n      setValue = _updateState[1];\n\n  updateEffect(function () {\n    var previousConfig = ReactCurrentBatchConfig$1.suspense;\n    ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n    try {\n      setValue(value);\n    } finally {\n      ReactCurrentBatchConfig$1.suspense = previousConfig;\n    }\n  }, [value, config]);\n  return prevValue;\n}\n\nfunction rerenderDeferredValue(value, config) {\n  var _rerenderState = rerenderState(),\n      prevValue = _rerenderState[0],\n      setValue = _rerenderState[1];\n\n  updateEffect(function () {\n    var previousConfig = ReactCurrentBatchConfig$1.suspense;\n    ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n    try {\n      setValue(value);\n    } finally {\n      ReactCurrentBatchConfig$1.suspense = previousConfig;\n    }\n  }, [value, config]);\n  return prevValue;\n}\n\nfunction startTransition(setPending, config, callback) {\n  var priorityLevel = getCurrentPriorityLevel();\n  runWithPriority$1(priorityLevel < UserBlockingPriority$1 ? UserBlockingPriority$1 : priorityLevel, function () {\n    setPending(true);\n  });\n  runWithPriority$1(priorityLevel > NormalPriority ? NormalPriority : priorityLevel, function () {\n    var previousConfig = ReactCurrentBatchConfig$1.suspense;\n    ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n    try {\n      setPending(false);\n      callback();\n    } finally {\n      ReactCurrentBatchConfig$1.suspense = previousConfig;\n    }\n  });\n}\n\nfunction mountTransition(config) {\n  var _mountState2 = mountState(false),\n      isPending = _mountState2[0],\n      setPending = _mountState2[1];\n\n  var start = mountCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n  return [start, isPending];\n}\n\nfunction updateTransition(config) {\n  var _updateState2 = updateState(),\n      isPending = _updateState2[0],\n      setPending = _updateState2[1];\n\n  var start = updateCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n  return [start, isPending];\n}\n\nfunction rerenderTransition(config) {\n  var _rerenderState2 = rerenderState(),\n      isPending = _rerenderState2[0],\n      setPending = _rerenderState2[1];\n\n  var start = updateCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n  return [start, isPending];\n}\n\nfunction dispatchAction(fiber, queue, action) {\n  {\n    if (typeof arguments[3] === 'function') {\n      error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n    }\n  }\n\n  var currentTime = requestCurrentTimeForUpdate();\n  var suspenseConfig = requestCurrentSuspenseConfig();\n  var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n  var update = {\n    expirationTime: expirationTime,\n    suspenseConfig: suspenseConfig,\n    action: action,\n    eagerReducer: null,\n    eagerState: null,\n    next: null\n  };\n\n  {\n    update.priority = getCurrentPriorityLevel();\n  } // Append the update to the end of the list.\n\n\n  var pending = queue.pending;\n\n  if (pending === null) {\n    // This is the first update. Create a circular list.\n    update.next = update;\n  } else {\n    update.next = pending.next;\n    pending.next = update;\n  }\n\n  queue.pending = update;\n  var alternate = fiber.alternate;\n\n  if (fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1) {\n    // This is a render phase update. Stash it in a lazily-created map of\n    // queue -> linked list of updates. After this render pass, we'll restart\n    // and apply the stashed updates on top of the work-in-progress hook.\n    didScheduleRenderPhaseUpdate = true;\n    update.expirationTime = renderExpirationTime;\n    currentlyRenderingFiber$1.expirationTime = renderExpirationTime;\n  } else {\n    if (fiber.expirationTime === NoWork && (alternate === null || alternate.expirationTime === NoWork)) {\n      // The queue is currently empty, which means we can eagerly compute the\n      // next state before entering the render phase. If the new state is the\n      // same as the current state, we may be able to bail out entirely.\n      var lastRenderedReducer = queue.lastRenderedReducer;\n\n      if (lastRenderedReducer !== null) {\n        var prevDispatcher;\n\n        {\n          prevDispatcher = ReactCurrentDispatcher.current;\n          ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        }\n\n        try {\n          var currentState = queue.lastRenderedState;\n          var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute\n          // it, on the update object. If the reducer hasn't changed by the\n          // time we enter the render phase, then the eager state can be used\n          // without calling the reducer again.\n\n          update.eagerReducer = lastRenderedReducer;\n          update.eagerState = eagerState;\n\n          if (objectIs(eagerState, currentState)) {\n            // Fast path. We can bail out without scheduling React to re-render.\n            // It's still possible that we'll need to rebase this update later,\n            // if the component re-renders for a different reason and by that\n            // time the reducer has changed.\n            return;\n          }\n        } catch (error) {// Suppress the error. It will throw again in the render phase.\n        } finally {\n          {\n            ReactCurrentDispatcher.current = prevDispatcher;\n          }\n        }\n      }\n    }\n\n    {\n      // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n      if ('undefined' !== typeof jest) {\n        warnIfNotScopedWithMatchingAct(fiber);\n        warnIfNotCurrentlyActingUpdatesInDev(fiber);\n      }\n    }\n\n    scheduleWork(fiber, expirationTime);\n  }\n}\n\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useResponder: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError\n};\nvar HooksDispatcherOnMountInDEV = null;\nvar HooksDispatcherOnMountWithHookTypesInDEV = null;\nvar HooksDispatcherOnUpdateInDEV = null;\nvar HooksDispatcherOnRerenderInDEV = null;\nvar InvalidNestedHooksDispatcherOnMountInDEV = null;\nvar InvalidNestedHooksDispatcherOnUpdateInDEV = null;\nvar InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n\n{\n  var warnInvalidContextAccess = function () {\n    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().');\n  };\n\n  var warnInvalidHookAccess = function () {\n    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');\n  };\n\n  HooksDispatcherOnMountInDEV = {\n    readContext: function (context, observedBits) {\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      mountHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      mountHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      mountHookTypesDev();\n      return mountDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      mountHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      mountHookTypesDev();\n      return mountDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      mountHookTypesDev();\n      return mountTransition(config);\n    }\n  };\n  HooksDispatcherOnMountWithHookTypesInDEV = {\n    readContext: function (context, observedBits) {\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return mountDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return mountDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return mountTransition(config);\n    }\n  };\n  HooksDispatcherOnUpdateInDEV = {\n    readContext: function (context, observedBits) {\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return updateDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return updateTransition(config);\n    }\n  };\n  HooksDispatcherOnRerenderInDEV = {\n    readContext: function (context, observedBits) {\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return rerenderReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return rerenderState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return rerenderDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return rerenderTransition(config);\n    }\n  };\n  InvalidNestedHooksDispatcherOnMountInDEV = {\n    readContext: function (context, observedBits) {\n      warnInvalidContextAccess();\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountTransition(config);\n    }\n  };\n  InvalidNestedHooksDispatcherOnUpdateInDEV = {\n    readContext: function (context, observedBits) {\n      warnInvalidContextAccess();\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateTransition(config);\n    }\n  };\n  InvalidNestedHooksDispatcherOnRerenderInDEV = {\n    readContext: function (context, observedBits) {\n      warnInvalidContextAccess();\n      return readContext(context, observedBits);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context, observedBits) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return readContext(context, observedBits);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return rerenderReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher.current;\n      ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return rerenderState(initialState);\n      } finally {\n        ReactCurrentDispatcher.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useResponder: function (responder, props) {\n      currentHookNameInDev = 'useResponder';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return createDeprecatedResponderListener(responder, props);\n    },\n    useDeferredValue: function (value, config) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return rerenderDeferredValue(value, config);\n    },\n    useTransition: function (config) {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return rerenderTransition(config);\n    }\n  };\n}\n\nvar now$1 = Scheduler.unstable_now;\nvar commitTime = 0;\nvar profilerStartTime = -1;\n\nfunction getCommitTime() {\n  return commitTime;\n}\n\nfunction recordCommitTime() {\n\n  commitTime = now$1();\n}\n\nfunction startProfilerTimer(fiber) {\n\n  profilerStartTime = now$1();\n\n  if (fiber.actualStartTime < 0) {\n    fiber.actualStartTime = now$1();\n  }\n}\n\nfunction stopProfilerTimerIfRunning(fiber) {\n\n  profilerStartTime = -1;\n}\n\nfunction stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {\n\n  if (profilerStartTime >= 0) {\n    var elapsedTime = now$1() - profilerStartTime;\n    fiber.actualDuration += elapsedTime;\n\n    if (overrideBaseTime) {\n      fiber.selfBaseDuration = elapsedTime;\n    }\n\n    profilerStartTime = -1;\n  }\n}\n\n// This may have been an insertion or a hydration.\n\nvar hydrationParentFiber = null;\nvar nextHydratableInstance = null;\nvar isHydrating = false;\n\nfunction enterHydrationState(fiber) {\n\n  var parentInstance = fiber.stateNode.containerInfo;\n  nextHydratableInstance = getFirstHydratableChild(parentInstance);\n  hydrationParentFiber = fiber;\n  isHydrating = true;\n  return true;\n}\n\nfunction deleteHydratableInstance(returnFiber, instance) {\n  {\n    switch (returnFiber.tag) {\n      case HostRoot:\n        didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance);\n        break;\n\n      case HostComponent:\n        didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance);\n        break;\n    }\n  }\n\n  var childToDelete = createFiberFromHostInstanceForDeletion();\n  childToDelete.stateNode = instance;\n  childToDelete.return = returnFiber;\n  childToDelete.effectTag = Deletion; // This might seem like it belongs on progressedFirstDeletion. However,\n  // these children are not part of the reconciliation list of children.\n  // Even if we abort and rereconcile the children, that will try to hydrate\n  // again and the nodes are still in the host tree so these will be\n  // recreated.\n\n  if (returnFiber.lastEffect !== null) {\n    returnFiber.lastEffect.nextEffect = childToDelete;\n    returnFiber.lastEffect = childToDelete;\n  } else {\n    returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n  }\n}\n\nfunction insertNonHydratedInstance(returnFiber, fiber) {\n  fiber.effectTag = fiber.effectTag & ~Hydrating | Placement;\n\n  {\n    switch (returnFiber.tag) {\n      case HostRoot:\n        {\n          var parentContainer = returnFiber.stateNode.containerInfo;\n\n          switch (fiber.tag) {\n            case HostComponent:\n              var type = fiber.type;\n              var props = fiber.pendingProps;\n              didNotFindHydratableContainerInstance(parentContainer, type);\n              break;\n\n            case HostText:\n              var text = fiber.pendingProps;\n              didNotFindHydratableContainerTextInstance(parentContainer, text);\n              break;\n          }\n\n          break;\n        }\n\n      case HostComponent:\n        {\n          var parentType = returnFiber.type;\n          var parentProps = returnFiber.memoizedProps;\n          var parentInstance = returnFiber.stateNode;\n\n          switch (fiber.tag) {\n            case HostComponent:\n              var _type = fiber.type;\n              var _props = fiber.pendingProps;\n              didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type);\n              break;\n\n            case HostText:\n              var _text = fiber.pendingProps;\n              didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text);\n              break;\n\n            case SuspenseComponent:\n              didNotFindHydratableSuspenseInstance(parentType, parentProps);\n              break;\n          }\n\n          break;\n        }\n\n      default:\n        return;\n    }\n  }\n}\n\nfunction tryHydrate(fiber, nextInstance) {\n  switch (fiber.tag) {\n    case HostComponent:\n      {\n        var type = fiber.type;\n        var props = fiber.pendingProps;\n        var instance = canHydrateInstance(nextInstance, type);\n\n        if (instance !== null) {\n          fiber.stateNode = instance;\n          return true;\n        }\n\n        return false;\n      }\n\n    case HostText:\n      {\n        var text = fiber.pendingProps;\n        var textInstance = canHydrateTextInstance(nextInstance, text);\n\n        if (textInstance !== null) {\n          fiber.stateNode = textInstance;\n          return true;\n        }\n\n        return false;\n      }\n\n    case SuspenseComponent:\n      {\n\n        return false;\n      }\n\n    default:\n      return false;\n  }\n}\n\nfunction tryToClaimNextHydratableInstance(fiber) {\n  if (!isHydrating) {\n    return;\n  }\n\n  var nextInstance = nextHydratableInstance;\n\n  if (!nextInstance) {\n    // Nothing to hydrate. Make it an insertion.\n    insertNonHydratedInstance(hydrationParentFiber, fiber);\n    isHydrating = false;\n    hydrationParentFiber = fiber;\n    return;\n  }\n\n  var firstAttemptedInstance = nextInstance;\n\n  if (!tryHydrate(fiber, nextInstance)) {\n    // If we can't hydrate this instance let's try the next one.\n    // We use this as a heuristic. It's based on intuition and not data so it\n    // might be flawed or unnecessary.\n    nextInstance = getNextHydratableSibling(firstAttemptedInstance);\n\n    if (!nextInstance || !tryHydrate(fiber, nextInstance)) {\n      // Nothing to hydrate. Make it an insertion.\n      insertNonHydratedInstance(hydrationParentFiber, fiber);\n      isHydrating = false;\n      hydrationParentFiber = fiber;\n      return;\n    } // We matched the next one, we'll now assume that the first one was\n    // superfluous and we'll delete it. Since we can't eagerly delete it\n    // we'll have to schedule a deletion. To do that, this node needs a dummy\n    // fiber associated with it.\n\n\n    deleteHydratableInstance(hydrationParentFiber, firstAttemptedInstance);\n  }\n\n  hydrationParentFiber = fiber;\n  nextHydratableInstance = getFirstHydratableChild(nextInstance);\n}\n\nfunction prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {\n\n  var instance = fiber.stateNode;\n  var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber); // TODO: Type this specific to this type of component.\n\n  fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n  // is a new ref we mark this as an update.\n\n  if (updatePayload !== null) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction prepareToHydrateHostTextInstance(fiber) {\n\n  var textInstance = fiber.stateNode;\n  var textContent = fiber.memoizedProps;\n  var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n\n  {\n    if (shouldUpdate) {\n      // We assume that prepareToHydrateHostTextInstance is called in a context where the\n      // hydration parent is the parent host component of this host text.\n      var returnFiber = hydrationParentFiber;\n\n      if (returnFiber !== null) {\n        switch (returnFiber.tag) {\n          case HostRoot:\n            {\n              var parentContainer = returnFiber.stateNode.containerInfo;\n              didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent);\n              break;\n            }\n\n          case HostComponent:\n            {\n              var parentType = returnFiber.type;\n              var parentProps = returnFiber.memoizedProps;\n              var parentInstance = returnFiber.stateNode;\n              didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent);\n              break;\n            }\n        }\n      }\n    }\n  }\n\n  return shouldUpdate;\n}\n\nfunction skipPastDehydratedSuspenseInstance(fiber) {\n\n  var suspenseState = fiber.memoizedState;\n  var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n  if (!suspenseInstance) {\n    {\n      throw Error( \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n\n  return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);\n}\n\nfunction popToNextHostParent(fiber) {\n  var parent = fiber.return;\n\n  while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {\n    parent = parent.return;\n  }\n\n  hydrationParentFiber = parent;\n}\n\nfunction popHydrationState(fiber) {\n\n  if (fiber !== hydrationParentFiber) {\n    // We're deeper than the current hydration context, inside an inserted\n    // tree.\n    return false;\n  }\n\n  if (!isHydrating) {\n    // If we're not currently hydrating but we're in a hydration context, then\n    // we were an insertion and now need to pop up reenter hydration of our\n    // siblings.\n    popToNextHostParent(fiber);\n    isHydrating = true;\n    return false;\n  }\n\n  var type = fiber.type; // If we have any remaining hydratable nodes, we need to delete them now.\n  // We only do this deeper than head and body since they tend to have random\n  // other nodes in them. We also ignore components with pure text content in\n  // side of them.\n  // TODO: Better heuristic.\n\n  if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) {\n    var nextInstance = nextHydratableInstance;\n\n    while (nextInstance) {\n      deleteHydratableInstance(fiber, nextInstance);\n      nextInstance = getNextHydratableSibling(nextInstance);\n    }\n  }\n\n  popToNextHostParent(fiber);\n\n  if (fiber.tag === SuspenseComponent) {\n    nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);\n  } else {\n    nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n  }\n\n  return true;\n}\n\nfunction resetHydrationState() {\n\n  hydrationParentFiber = null;\n  nextHydratableInstance = null;\n  isHydrating = false;\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar didReceiveUpdate = false;\nvar didWarnAboutBadClass;\nvar didWarnAboutModulePatternComponent;\nvar didWarnAboutContextTypeOnFunctionComponent;\nvar didWarnAboutGetDerivedStateOnFunctionComponent;\nvar didWarnAboutFunctionRefs;\nvar didWarnAboutReassigningProps;\nvar didWarnAboutRevealOrder;\nvar didWarnAboutTailOptions;\n\n{\n  didWarnAboutBadClass = {};\n  didWarnAboutModulePatternComponent = {};\n  didWarnAboutContextTypeOnFunctionComponent = {};\n  didWarnAboutGetDerivedStateOnFunctionComponent = {};\n  didWarnAboutFunctionRefs = {};\n  didWarnAboutReassigningProps = false;\n  didWarnAboutRevealOrder = {};\n  didWarnAboutTailOptions = {};\n}\n\nfunction reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime) {\n  if (current === null) {\n    // If this is a fresh new component that hasn't been rendered yet, we\n    // won't update its child set by applying minimal side-effects. Instead,\n    // we will add them all to the child before it gets rendered. That means\n    // we can optimize this reconciliation pass by not tracking side-effects.\n    workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n  } else {\n    // If the current child is the same as the work in progress, it means that\n    // we haven't yet started any work on these children. Therefore, we use\n    // the clone algorithm to create a copy of all the current children.\n    // If we had any progressed work already, that is invalid at this point so\n    // let's throw it out.\n    workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderExpirationTime);\n  }\n}\n\nfunction forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderExpirationTime) {\n  // This function is fork of reconcileChildren. It's used in cases where we\n  // want to reconcile without matching against the existing set. This has the\n  // effect of all current children being unmounted; even if the type and key\n  // are the same, the old child is unmounted and a new child is created.\n  //\n  // To do this, we're going to go through the reconcile algorithm twice. In\n  // the first pass, we schedule a deletion for all the current children by\n  // passing null.\n  workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderExpirationTime); // In the second pass, we mount the new children. The trick here is that we\n  // pass null in place of where we usually pass the current child set. This has\n  // the effect of remounting all children regardless of whether their\n  // identities match.\n\n  workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n}\n\nfunction updateForwardRef(current, workInProgress, Component, nextProps, renderExpirationTime) {\n  // TODO: current can be non-null here even if the component\n  // hasn't yet mounted. This happens after the first render suspends.\n  // We'll need to figure out if this is fine or can cause issues.\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentName(Component), getCurrentFiberStackInDev);\n      }\n    }\n  }\n\n  var render = Component.render;\n  var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent\n\n  var nextChildren;\n  prepareToReadContext(workInProgress, renderExpirationTime);\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderExpirationTime);\n\n    if ( workInProgress.mode & StrictMode) {\n      // Only double-render components with Hooks\n      if (workInProgress.memoizedState !== null) {\n        nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderExpirationTime);\n      }\n    }\n\n    setIsRendering(false);\n  }\n\n  if (current !== null && !didReceiveUpdate) {\n    bailoutHooks(current, workInProgress, renderExpirationTime);\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateMemoComponent(current, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n  if (current === null) {\n    var type = Component.type;\n\n    if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.\n    Component.defaultProps === undefined) {\n      var resolvedType = type;\n\n      {\n        resolvedType = resolveFunctionForHotReloading(type);\n      } // If this is a plain function component without default props,\n      // and with only the default shallow comparison, we upgrade it\n      // to a SimpleMemoComponent to allow fast path updates.\n\n\n      workInProgress.tag = SimpleMemoComponent;\n      workInProgress.type = resolvedType;\n\n      {\n        validateFunctionComponentInDev(workInProgress, type);\n      }\n\n      return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, updateExpirationTime, renderExpirationTime);\n    }\n\n    {\n      var innerPropTypes = type.propTypes;\n\n      if (innerPropTypes) {\n        // Inner memo component props aren't currently validated in createElement.\n        // We could move it there, but we'd still need this for lazy code path.\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentName(type), getCurrentFiberStackInDev);\n      }\n    }\n\n    var child = createFiberFromTypeAndProps(Component.type, null, nextProps, null, workInProgress.mode, renderExpirationTime);\n    child.ref = workInProgress.ref;\n    child.return = workInProgress;\n    workInProgress.child = child;\n    return child;\n  }\n\n  {\n    var _type = Component.type;\n    var _innerPropTypes = _type.propTypes;\n\n    if (_innerPropTypes) {\n      // Inner memo component props aren't currently validated in createElement.\n      // We could move it there, but we'd still need this for lazy code path.\n      checkPropTypes(_innerPropTypes, nextProps, // Resolved props\n      'prop', getComponentName(_type), getCurrentFiberStackInDev);\n    }\n  }\n\n  var currentChild = current.child; // This is always exactly one child\n\n  if (updateExpirationTime < renderExpirationTime) {\n    // This will be the props with resolved defaultProps,\n    // unlike current.memoizedProps which will be the unresolved ones.\n    var prevProps = currentChild.memoizedProps; // Default to shallow comparison\n\n    var compare = Component.compare;\n    compare = compare !== null ? compare : shallowEqual;\n\n    if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n    }\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n  var newChild = createWorkInProgress(currentChild, nextProps);\n  newChild.ref = workInProgress.ref;\n  newChild.return = workInProgress;\n  workInProgress.child = newChild;\n  return newChild;\n}\n\nfunction updateSimpleMemoComponent(current, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n  // TODO: current can be non-null here even if the component\n  // hasn't yet mounted. This happens when the inner render suspends.\n  // We'll need to figure out if this is fine or can cause issues.\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var outerMemoType = workInProgress.elementType;\n\n      if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {\n        // We warn when you define propTypes on lazy()\n        // so let's just skip over it to find memo() outer wrapper.\n        // Inner props for memo are validated later.\n        outerMemoType = refineResolvedLazyComponent(outerMemoType);\n      }\n\n      var outerPropTypes = outerMemoType && outerMemoType.propTypes;\n\n      if (outerPropTypes) {\n        checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)\n        'prop', getComponentName(outerMemoType), getCurrentFiberStackInDev);\n      } // Inner propTypes will be validated in the function component path.\n\n    }\n  }\n\n  if (current !== null) {\n    var prevProps = current.memoizedProps;\n\n    if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.\n     workInProgress.type === current.type )) {\n      didReceiveUpdate = false;\n\n      if (updateExpirationTime < renderExpirationTime) {\n        // The pending update priority was cleared at the beginning of\n        // beginWork. We're about to bail out, but there might be additional\n        // updates at a lower priority. Usually, the priority level of the\n        // remaining updates is accumlated during the evaluation of the\n        // component (i.e. when processing the update queue). But since since\n        // we're bailing out early *without* evaluating the component, we need\n        // to account for it here, too. Reset to the value of the current fiber.\n        // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,\n        // because a MemoComponent fiber does not have hooks or an update queue;\n        // rather, it wraps around an inner component, which may or may not\n        // contains hooks.\n        // TODO: Move the reset at in beginWork out of the common path so that\n        // this is no longer necessary.\n        workInProgress.expirationTime = current.expirationTime;\n        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n      }\n    }\n  }\n\n  return updateFunctionComponent(current, workInProgress, Component, nextProps, renderExpirationTime);\n}\n\nfunction updateFragment(current, workInProgress, renderExpirationTime) {\n  var nextChildren = workInProgress.pendingProps;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateMode(current, workInProgress, renderExpirationTime) {\n  var nextChildren = workInProgress.pendingProps.children;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateProfiler(current, workInProgress, renderExpirationTime) {\n  {\n    workInProgress.effectTag |= Update;\n  }\n\n  var nextProps = workInProgress.pendingProps;\n  var nextChildren = nextProps.children;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n\n  if (current === null && ref !== null || current !== null && current.ref !== ref) {\n    // Schedule a Ref effect\n    workInProgress.effectTag |= Ref;\n  }\n}\n\nfunction updateFunctionComponent(current, workInProgress, Component, nextProps, renderExpirationTime) {\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentName(Component), getCurrentFiberStackInDev);\n      }\n    }\n  }\n\n  var context;\n\n  {\n    var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);\n    context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  var nextChildren;\n  prepareToReadContext(workInProgress, renderExpirationTime);\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderExpirationTime);\n\n    if ( workInProgress.mode & StrictMode) {\n      // Only double-render components with Hooks\n      if (workInProgress.memoizedState !== null) {\n        nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderExpirationTime);\n      }\n    }\n\n    setIsRendering(false);\n  }\n\n  if (current !== null && !didReceiveUpdate) {\n    bailoutHooks(current, workInProgress, renderExpirationTime);\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateClassComponent(current, workInProgress, Component, nextProps, renderExpirationTime) {\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentName(Component), getCurrentFiberStackInDev);\n      }\n    }\n  } // Push context providers early to prevent context stack mismatches.\n  // During mounting we don't know the child context yet as the instance doesn't exist.\n  // We will invalidate the child context in finishClassComponent() right after rendering.\n\n\n  var hasContext;\n\n  if (isContextProvider(Component)) {\n    hasContext = true;\n    pushContextProvider(workInProgress);\n  } else {\n    hasContext = false;\n  }\n\n  prepareToReadContext(workInProgress, renderExpirationTime);\n  var instance = workInProgress.stateNode;\n  var shouldUpdate;\n\n  if (instance === null) {\n    if (current !== null) {\n      // A class component without an instance only mounts if it suspended\n      // inside a non-concurrent tree, in an inconsistent state. We want to\n      // treat it like a new mount, even though an empty version of it already\n      // committed. Disconnect the alternate pointers.\n      current.alternate = null;\n      workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n      workInProgress.effectTag |= Placement;\n    } // In the initial pass we might need to construct the instance.\n\n\n    constructClassInstance(workInProgress, Component, nextProps);\n    mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n    shouldUpdate = true;\n  } else if (current === null) {\n    // In a resume, we'll already have an instance we can reuse.\n    shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n  } else {\n    shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderExpirationTime);\n  }\n\n  var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime);\n\n  {\n    var inst = workInProgress.stateNode;\n\n    if (inst.props !== nextProps) {\n      if (!didWarnAboutReassigningProps) {\n        error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentName(workInProgress.type) || 'a component');\n      }\n\n      didWarnAboutReassigningProps = true;\n    }\n  }\n\n  return nextUnitOfWork;\n}\n\nfunction finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime) {\n  // Refs should update even if shouldComponentUpdate returns false\n  markRef(current, workInProgress);\n  var didCaptureError = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n  if (!shouldUpdate && !didCaptureError) {\n    // Context providers should defer to sCU for rendering\n    if (hasContext) {\n      invalidateContextProvider(workInProgress, Component, false);\n    }\n\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n  }\n\n  var instance = workInProgress.stateNode; // Rerender\n\n  ReactCurrentOwner$1.current = workInProgress;\n  var nextChildren;\n\n  if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {\n    // If we captured an error, but getDerivedStateFromError is not defined,\n    // unmount all the children. componentDidCatch will schedule an update to\n    // re-render a fallback. This is temporary until we migrate everyone to\n    // the new API.\n    // TODO: Warn in a future release.\n    nextChildren = null;\n\n    {\n      stopProfilerTimerIfRunning();\n    }\n  } else {\n    {\n      setIsRendering(true);\n      nextChildren = instance.render();\n\n      if ( workInProgress.mode & StrictMode) {\n        instance.render();\n      }\n\n      setIsRendering(false);\n    }\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n\n  if (current !== null && didCaptureError) {\n    // If we're recovering from an error, reconcile without reusing any of\n    // the existing children. Conceptually, the normal children and the children\n    // that are shown on error are two different sets, so we shouldn't reuse\n    // normal children even if their identities match.\n    forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderExpirationTime);\n  } else {\n    reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  } // Memoize state using the values we just used to render.\n  // TODO: Restructure so we never read values from the instance.\n\n\n  workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.\n\n  if (hasContext) {\n    invalidateContextProvider(workInProgress, Component, true);\n  }\n\n  return workInProgress.child;\n}\n\nfunction pushHostRootContext(workInProgress) {\n  var root = workInProgress.stateNode;\n\n  if (root.pendingContext) {\n    pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n  } else if (root.context) {\n    // Should always be set\n    pushTopLevelContextObject(workInProgress, root.context, false);\n  }\n\n  pushHostContainer(workInProgress, root.containerInfo);\n}\n\nfunction updateHostRoot(current, workInProgress, renderExpirationTime) {\n  pushHostRootContext(workInProgress);\n  var updateQueue = workInProgress.updateQueue;\n\n  if (!(current !== null && updateQueue !== null)) {\n    {\n      throw Error( \"If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n\n  var nextProps = workInProgress.pendingProps;\n  var prevState = workInProgress.memoizedState;\n  var prevChildren = prevState !== null ? prevState.element : null;\n  cloneUpdateQueue(current, workInProgress);\n  processUpdateQueue(workInProgress, nextProps, null, renderExpirationTime);\n  var nextState = workInProgress.memoizedState; // Caution: React DevTools currently depends on this property\n  // being called \"element\".\n\n  var nextChildren = nextState.element;\n\n  if (nextChildren === prevChildren) {\n    // If the state is the same as before, that's a bailout because we had\n    // no work that expires at this time.\n    resetHydrationState();\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n  }\n\n  var root = workInProgress.stateNode;\n\n  if (root.hydrate && enterHydrationState(workInProgress)) {\n    // If we don't have any current children this might be the first pass.\n    // We always try to hydrate. If this isn't a hydration pass there won't\n    // be any children to hydrate which is effectively the same thing as\n    // not hydrating.\n    var child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n    workInProgress.child = child;\n    var node = child;\n\n    while (node) {\n      // Mark each child as hydrating. This is a fast path to know whether this\n      // tree is part of a hydrating tree. This is used to determine if a child\n      // node has fully mounted yet, and for scheduling event replaying.\n      // Conceptually this is similar to Placement in that a new subtree is\n      // inserted into the React tree here. It just happens to not need DOM\n      // mutations because it already exists.\n      node.effectTag = node.effectTag & ~Placement | Hydrating;\n      node = node.sibling;\n    }\n  } else {\n    // Otherwise reset hydration state in case we aborted and resumed another\n    // root.\n    reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n    resetHydrationState();\n  }\n\n  return workInProgress.child;\n}\n\nfunction updateHostComponent(current, workInProgress, renderExpirationTime) {\n  pushHostContext(workInProgress);\n\n  if (current === null) {\n    tryToClaimNextHydratableInstance(workInProgress);\n  }\n\n  var type = workInProgress.type;\n  var nextProps = workInProgress.pendingProps;\n  var prevProps = current !== null ? current.memoizedProps : null;\n  var nextChildren = nextProps.children;\n  var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n  if (isDirectTextChild) {\n    // We special case a direct text child of a host node. This is a common\n    // case. We won't handle it as a reified child. We will instead handle\n    // this in the host environment that also has access to this prop. That\n    // avoids allocating another HostText fiber and traversing it.\n    nextChildren = null;\n  } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {\n    // If we're switching from a direct text child to a normal child, or to\n    // empty, we need to schedule the text content to be reset.\n    workInProgress.effectTag |= ContentReset;\n  }\n\n  markRef(current, workInProgress); // Check the host config to see if the children are offscreen/hidden.\n\n  if (workInProgress.mode & ConcurrentMode && renderExpirationTime !== Never && shouldDeprioritizeSubtree(type, nextProps)) {\n    {\n      markSpawnedWork(Never);\n    } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n    workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n    return null;\n  }\n\n  reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction updateHostText(current, workInProgress) {\n  if (current === null) {\n    tryToClaimNextHydratableInstance(workInProgress);\n  } // Nothing to do here. This is terminal. We'll do the completion step\n  // immediately after.\n\n\n  return null;\n}\n\nfunction mountLazyComponent(_current, workInProgress, elementType, updateExpirationTime, renderExpirationTime) {\n  if (_current !== null) {\n    // A lazy component only mounts if it suspended inside a non-\n    // concurrent tree, in an inconsistent state. We want to treat it like\n    // a new mount, even though an empty version of it already committed.\n    // Disconnect the alternate pointers.\n    _current.alternate = null;\n    workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n    workInProgress.effectTag |= Placement;\n  }\n\n  var props = workInProgress.pendingProps; // We can't start a User Timing measurement with correct label yet.\n  // Cancel and resume right after we know the tag.\n\n  cancelWorkTimer(workInProgress);\n  var Component = readLazyComponentType(elementType); // Store the unwrapped component in the type.\n\n  workInProgress.type = Component;\n  var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);\n  startWorkTimer(workInProgress);\n  var resolvedProps = resolveDefaultProps(Component, props);\n  var child;\n\n  switch (resolvedTag) {\n    case FunctionComponent:\n      {\n        {\n          validateFunctionComponentInDev(workInProgress, Component);\n          workInProgress.type = Component = resolveFunctionForHotReloading(Component);\n        }\n\n        child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n        return child;\n      }\n\n    case ClassComponent:\n      {\n        {\n          workInProgress.type = Component = resolveClassForHotReloading(Component);\n        }\n\n        child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n        return child;\n      }\n\n    case ForwardRef:\n      {\n        {\n          workInProgress.type = Component = resolveForwardRefForHotReloading(Component);\n        }\n\n        child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n        return child;\n      }\n\n    case MemoComponent:\n      {\n        {\n          if (workInProgress.type !== workInProgress.elementType) {\n            var outerPropTypes = Component.propTypes;\n\n            if (outerPropTypes) {\n              checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only\n              'prop', getComponentName(Component), getCurrentFiberStackInDev);\n            }\n          }\n        }\n\n        child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too\n        updateExpirationTime, renderExpirationTime);\n        return child;\n      }\n  }\n\n  var hint = '';\n\n  {\n    if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {\n      hint = ' Did you wrap a component in React.lazy() more than once?';\n    }\n  } // This message intentionally doesn't mention ForwardRef or MemoComponent\n  // because the fact that it's a separate type of work is an\n  // implementation detail.\n\n\n  {\n    {\n      throw Error( \"Element type is invalid. Received a promise that resolves to: \" + Component + \". Lazy element type must resolve to a class or function.\" + hint );\n    }\n  }\n}\n\nfunction mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderExpirationTime) {\n  if (_current !== null) {\n    // An incomplete component only mounts if it suspended inside a non-\n    // concurrent tree, in an inconsistent state. We want to treat it like\n    // a new mount, even though an empty version of it already committed.\n    // Disconnect the alternate pointers.\n    _current.alternate = null;\n    workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n    workInProgress.effectTag |= Placement;\n  } // Promote the fiber to a class and try rendering again.\n\n\n  workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`\n  // Push context providers early to prevent context stack mismatches.\n  // During mounting we don't know the child context yet as the instance doesn't exist.\n  // We will invalidate the child context in finishClassComponent() right after rendering.\n\n  var hasContext;\n\n  if (isContextProvider(Component)) {\n    hasContext = true;\n    pushContextProvider(workInProgress);\n  } else {\n    hasContext = false;\n  }\n\n  prepareToReadContext(workInProgress, renderExpirationTime);\n  constructClassInstance(workInProgress, Component, nextProps);\n  mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n  return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n}\n\nfunction mountIndeterminateComponent(_current, workInProgress, Component, renderExpirationTime) {\n  if (_current !== null) {\n    // An indeterminate component only mounts if it suspended inside a non-\n    // concurrent tree, in an inconsistent state. We want to treat it like\n    // a new mount, even though an empty version of it already committed.\n    // Disconnect the alternate pointers.\n    _current.alternate = null;\n    workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n    workInProgress.effectTag |= Placement;\n  }\n\n  var props = workInProgress.pendingProps;\n  var context;\n\n  {\n    var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);\n    context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  prepareToReadContext(workInProgress, renderExpirationTime);\n  var value;\n\n  {\n    if (Component.prototype && typeof Component.prototype.render === 'function') {\n      var componentName = getComponentName(Component) || 'Unknown';\n\n      if (!didWarnAboutBadClass[componentName]) {\n        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.', componentName, componentName);\n\n        didWarnAboutBadClass[componentName] = true;\n      }\n    }\n\n    if (workInProgress.mode & StrictMode) {\n      ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);\n    }\n\n    setIsRendering(true);\n    ReactCurrentOwner$1.current = workInProgress;\n    value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n    setIsRendering(false);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n\n  if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n    {\n      var _componentName = getComponentName(Component) || 'Unknown';\n\n      if (!didWarnAboutModulePatternComponent[_componentName]) {\n        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.', _componentName, _componentName, _componentName);\n\n        didWarnAboutModulePatternComponent[_componentName] = true;\n      }\n    } // Proceed under the assumption that this is a class instance\n\n\n    workInProgress.tag = ClassComponent; // Throw out any hooks that were used.\n\n    workInProgress.memoizedState = null;\n    workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.\n    // During mounting we don't know the child context yet as the instance doesn't exist.\n    // We will invalidate the child context in finishClassComponent() right after rendering.\n\n    var hasContext = false;\n\n    if (isContextProvider(Component)) {\n      hasContext = true;\n      pushContextProvider(workInProgress);\n    } else {\n      hasContext = false;\n    }\n\n    workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;\n    initializeUpdateQueue(workInProgress);\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n\n    if (typeof getDerivedStateFromProps === 'function') {\n      applyDerivedStateFromProps(workInProgress, Component, getDerivedStateFromProps, props);\n    }\n\n    adoptClassInstance(workInProgress, value);\n    mountClassInstance(workInProgress, Component, props, renderExpirationTime);\n    return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n  } else {\n    // Proceed under the assumption that this is a function component\n    workInProgress.tag = FunctionComponent;\n\n    {\n\n      if ( workInProgress.mode & StrictMode) {\n        // Only double-render components with Hooks\n        if (workInProgress.memoizedState !== null) {\n          value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n        }\n      }\n    }\n\n    reconcileChildren(null, workInProgress, value, renderExpirationTime);\n\n    {\n      validateFunctionComponentInDev(workInProgress, Component);\n    }\n\n    return workInProgress.child;\n  }\n}\n\nfunction validateFunctionComponentInDev(workInProgress, Component) {\n  {\n    if (Component) {\n      if (Component.childContextTypes) {\n        error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n      }\n    }\n\n    if (workInProgress.ref !== null) {\n      var info = '';\n      var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n      if (ownerName) {\n        info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n      }\n\n      var warningKey = ownerName || workInProgress._debugID || '';\n      var debugSource = workInProgress._debugSource;\n\n      if (debugSource) {\n        warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n      }\n\n      if (!didWarnAboutFunctionRefs[warningKey]) {\n        didWarnAboutFunctionRefs[warningKey] = true;\n\n        error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);\n      }\n    }\n\n    if (typeof Component.getDerivedStateFromProps === 'function') {\n      var _componentName2 = getComponentName(Component) || 'Unknown';\n\n      if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2]) {\n        error('%s: Function components do not support getDerivedStateFromProps.', _componentName2);\n\n        didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] = true;\n      }\n    }\n\n    if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n      var _componentName3 = getComponentName(Component) || 'Unknown';\n\n      if (!didWarnAboutContextTypeOnFunctionComponent[_componentName3]) {\n        error('%s: Function components do not support contextType.', _componentName3);\n\n        didWarnAboutContextTypeOnFunctionComponent[_componentName3] = true;\n      }\n    }\n  }\n}\n\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  retryTime: NoWork\n};\n\nfunction shouldRemainOnFallback(suspenseContext, current, workInProgress) {\n  // If the context is telling us that we should show a fallback, and we're not\n  // already showing content, then we should show the fallback instead.\n  return hasSuspenseContext(suspenseContext, ForceSuspenseFallback) && (current === null || current.memoizedState !== null);\n}\n\nfunction updateSuspenseComponent(current, workInProgress, renderExpirationTime) {\n  var mode = workInProgress.mode;\n  var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.\n\n  {\n    if (shouldSuspend(workInProgress)) {\n      workInProgress.effectTag |= DidCapture;\n    }\n  }\n\n  var suspenseContext = suspenseStackCursor.current;\n  var nextDidTimeout = false;\n  var didSuspend = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n  if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {\n    // Something in this boundary's subtree already suspended. Switch to\n    // rendering the fallback children.\n    nextDidTimeout = true;\n    workInProgress.effectTag &= ~DidCapture;\n  } else {\n    // Attempting the main content\n    if (current === null || current.memoizedState !== null) {\n      // This is a new mount or this boundary is already showing a fallback state.\n      // Mark this subtree context as having at least one invisible parent that could\n      // handle the fallback state.\n      // Boundaries without fallbacks or should be avoided are not considered since\n      // they cannot handle preferred fallback states.\n      if (nextProps.fallback !== undefined && nextProps.unstable_avoidThisFallback !== true) {\n        suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);\n      }\n    }\n  }\n\n  suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n  pushSuspenseContext(workInProgress, suspenseContext); // This next part is a bit confusing. If the children timeout, we switch to\n  // showing the fallback children in place of the \"primary\" children.\n  // However, we don't want to delete the primary children because then their\n  // state will be lost (both the React state and the host state, e.g.\n  // uncontrolled form inputs). Instead we keep them mounted and hide them.\n  // Both the fallback children AND the primary children are rendered at the\n  // same time. Once the primary children are un-suspended, we can delete\n  // the fallback children — don't need to preserve their state.\n  //\n  // The two sets of children are siblings in the host environment, but\n  // semantically, for purposes of reconciliation, they are two separate sets.\n  // So we store them using two fragment fibers.\n  //\n  // However, we want to avoid allocating extra fibers for every placeholder.\n  // They're only necessary when the children time out, because that's the\n  // only time when both sets are mounted.\n  //\n  // So, the extra fragment fibers are only used if the children time out.\n  // Otherwise, we render the primary children directly. This requires some\n  // custom reconciliation logic to preserve the state of the primary\n  // children. It's essentially a very basic form of re-parenting.\n\n  if (current === null) {\n    // If we're currently hydrating, try to hydrate this boundary.\n    // But only if this has a fallback.\n    if (nextProps.fallback !== undefined) {\n      tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.\n    } // This is the initial mount. This branch is pretty simple because there's\n    // no previous state that needs to be preserved.\n\n\n    if (nextDidTimeout) {\n      // Mount separate fragments for primary and fallback children.\n      var nextFallbackChildren = nextProps.fallback;\n      var primaryChildFragment = createFiberFromFragment(null, mode, NoWork, null);\n      primaryChildFragment.return = workInProgress;\n\n      if ((workInProgress.mode & BlockingMode) === NoMode) {\n        // Outside of blocking mode, we commit the effects from the\n        // partially completed, timed-out tree, too.\n        var progressedState = workInProgress.memoizedState;\n        var progressedPrimaryChild = progressedState !== null ? workInProgress.child.child : workInProgress.child;\n        primaryChildFragment.child = progressedPrimaryChild;\n        var progressedChild = progressedPrimaryChild;\n\n        while (progressedChild !== null) {\n          progressedChild.return = primaryChildFragment;\n          progressedChild = progressedChild.sibling;\n        }\n      }\n\n      var fallbackChildFragment = createFiberFromFragment(nextFallbackChildren, mode, renderExpirationTime, null);\n      fallbackChildFragment.return = workInProgress;\n      primaryChildFragment.sibling = fallbackChildFragment; // Skip the primary children, and continue working on the\n      // fallback children.\n\n      workInProgress.memoizedState = SUSPENDED_MARKER;\n      workInProgress.child = primaryChildFragment;\n      return fallbackChildFragment;\n    } else {\n      // Mount the primary children without an intermediate fragment fiber.\n      var nextPrimaryChildren = nextProps.children;\n      workInProgress.memoizedState = null;\n      return workInProgress.child = mountChildFibers(workInProgress, null, nextPrimaryChildren, renderExpirationTime);\n    }\n  } else {\n    // This is an update. This branch is more complicated because we need to\n    // ensure the state of the primary children is preserved.\n    var prevState = current.memoizedState;\n\n    if (prevState !== null) {\n      // wrapped in a fragment fiber.\n\n\n      var currentPrimaryChildFragment = current.child;\n      var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n\n      if (nextDidTimeout) {\n        // Still timed out. Reuse the current primary children by cloning\n        // its fragment. We're going to skip over these entirely.\n        var _nextFallbackChildren2 = nextProps.fallback;\n\n        var _primaryChildFragment2 = createWorkInProgress(currentPrimaryChildFragment, currentPrimaryChildFragment.pendingProps);\n\n        _primaryChildFragment2.return = workInProgress;\n\n        if ((workInProgress.mode & BlockingMode) === NoMode) {\n          // Outside of blocking mode, we commit the effects from the\n          // partially completed, timed-out tree, too.\n          var _progressedState = workInProgress.memoizedState;\n\n          var _progressedPrimaryChild = _progressedState !== null ? workInProgress.child.child : workInProgress.child;\n\n          if (_progressedPrimaryChild !== currentPrimaryChildFragment.child) {\n            _primaryChildFragment2.child = _progressedPrimaryChild;\n            var _progressedChild2 = _progressedPrimaryChild;\n\n            while (_progressedChild2 !== null) {\n              _progressedChild2.return = _primaryChildFragment2;\n              _progressedChild2 = _progressedChild2.sibling;\n            }\n          }\n        } // Because primaryChildFragment is a new fiber that we're inserting as the\n        // parent of a new tree, we need to set its treeBaseDuration.\n\n\n        if ( workInProgress.mode & ProfileMode) {\n          // treeBaseDuration is the sum of all the child tree base durations.\n          var _treeBaseDuration = 0;\n          var _hiddenChild = _primaryChildFragment2.child;\n\n          while (_hiddenChild !== null) {\n            _treeBaseDuration += _hiddenChild.treeBaseDuration;\n            _hiddenChild = _hiddenChild.sibling;\n          }\n\n          _primaryChildFragment2.treeBaseDuration = _treeBaseDuration;\n        } // Clone the fallback child fragment, too. These we'll continue\n        // working on.\n\n\n        var _fallbackChildFragment2 = createWorkInProgress(currentFallbackChildFragment, _nextFallbackChildren2);\n\n        _fallbackChildFragment2.return = workInProgress;\n        _primaryChildFragment2.sibling = _fallbackChildFragment2;\n        _primaryChildFragment2.childExpirationTime = NoWork; // Skip the primary children, and continue working on the\n        // fallback children.\n\n        workInProgress.memoizedState = SUSPENDED_MARKER;\n        workInProgress.child = _primaryChildFragment2;\n        return _fallbackChildFragment2;\n      } else {\n        // No longer suspended. Switch back to showing the primary children,\n        // and remove the intermediate fragment fiber.\n        var _nextPrimaryChildren = nextProps.children;\n        var currentPrimaryChild = currentPrimaryChildFragment.child;\n        var primaryChild = reconcileChildFibers(workInProgress, currentPrimaryChild, _nextPrimaryChildren, renderExpirationTime); // If this render doesn't suspend, we need to delete the fallback\n        // children. Wait until the complete phase, after we've confirmed the\n        // fallback is no longer needed.\n        // TODO: Would it be better to store the fallback fragment on\n        // the stateNode?\n        // Continue rendering the children, like we normally do.\n\n        workInProgress.memoizedState = null;\n        return workInProgress.child = primaryChild;\n      }\n    } else {\n      // The current tree has not already timed out. That means the primary\n      // children are not wrapped in a fragment fiber.\n      var _currentPrimaryChild = current.child;\n\n      if (nextDidTimeout) {\n        // Timed out. Wrap the children in a fragment fiber to keep them\n        // separate from the fallback children.\n        var _nextFallbackChildren3 = nextProps.fallback;\n\n        var _primaryChildFragment3 = createFiberFromFragment( // It shouldn't matter what the pending props are because we aren't\n        // going to render this fragment.\n        null, mode, NoWork, null);\n\n        _primaryChildFragment3.return = workInProgress;\n        _primaryChildFragment3.child = _currentPrimaryChild;\n\n        if (_currentPrimaryChild !== null) {\n          _currentPrimaryChild.return = _primaryChildFragment3;\n        } // Even though we're creating a new fiber, there are no new children,\n        // because we're reusing an already mounted tree. So we don't need to\n        // schedule a placement.\n        // primaryChildFragment.effectTag |= Placement;\n\n\n        if ((workInProgress.mode & BlockingMode) === NoMode) {\n          // Outside of blocking mode, we commit the effects from the\n          // partially completed, timed-out tree, too.\n          var _progressedState2 = workInProgress.memoizedState;\n\n          var _progressedPrimaryChild2 = _progressedState2 !== null ? workInProgress.child.child : workInProgress.child;\n\n          _primaryChildFragment3.child = _progressedPrimaryChild2;\n          var _progressedChild3 = _progressedPrimaryChild2;\n\n          while (_progressedChild3 !== null) {\n            _progressedChild3.return = _primaryChildFragment3;\n            _progressedChild3 = _progressedChild3.sibling;\n          }\n        } // Because primaryChildFragment is a new fiber that we're inserting as the\n        // parent of a new tree, we need to set its treeBaseDuration.\n\n\n        if ( workInProgress.mode & ProfileMode) {\n          // treeBaseDuration is the sum of all the child tree base durations.\n          var _treeBaseDuration2 = 0;\n          var _hiddenChild2 = _primaryChildFragment3.child;\n\n          while (_hiddenChild2 !== null) {\n            _treeBaseDuration2 += _hiddenChild2.treeBaseDuration;\n            _hiddenChild2 = _hiddenChild2.sibling;\n          }\n\n          _primaryChildFragment3.treeBaseDuration = _treeBaseDuration2;\n        } // Create a fragment from the fallback children, too.\n\n\n        var _fallbackChildFragment3 = createFiberFromFragment(_nextFallbackChildren3, mode, renderExpirationTime, null);\n\n        _fallbackChildFragment3.return = workInProgress;\n        _primaryChildFragment3.sibling = _fallbackChildFragment3;\n        _fallbackChildFragment3.effectTag |= Placement;\n        _primaryChildFragment3.childExpirationTime = NoWork; // Skip the primary children, and continue working on the\n        // fallback children.\n\n        workInProgress.memoizedState = SUSPENDED_MARKER;\n        workInProgress.child = _primaryChildFragment3;\n        return _fallbackChildFragment3;\n      } else {\n        // Still haven't timed out. Continue rendering the children, like we\n        // normally do.\n        workInProgress.memoizedState = null;\n        var _nextPrimaryChildren2 = nextProps.children;\n        return workInProgress.child = reconcileChildFibers(workInProgress, _currentPrimaryChild, _nextPrimaryChildren2, renderExpirationTime);\n      }\n    }\n  }\n}\n\nfunction scheduleWorkOnFiber(fiber, renderExpirationTime) {\n  if (fiber.expirationTime < renderExpirationTime) {\n    fiber.expirationTime = renderExpirationTime;\n  }\n\n  var alternate = fiber.alternate;\n\n  if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n    alternate.expirationTime = renderExpirationTime;\n  }\n\n  scheduleWorkOnParentPath(fiber.return, renderExpirationTime);\n}\n\nfunction propagateSuspenseContextChange(workInProgress, firstChild, renderExpirationTime) {\n  // Mark any Suspense boundaries with fallbacks as having work to do.\n  // If they were previously forced into fallbacks, they may now be able\n  // to unblock.\n  var node = firstChild;\n\n  while (node !== null) {\n    if (node.tag === SuspenseComponent) {\n      var state = node.memoizedState;\n\n      if (state !== null) {\n        scheduleWorkOnFiber(node, renderExpirationTime);\n      }\n    } else if (node.tag === SuspenseListComponent) {\n      // If the tail is hidden there might not be an Suspense boundaries\n      // to schedule work on. In this case we have to schedule it on the\n      // list itself.\n      // We don't have to traverse to the children of the list since\n      // the list will propagate the change when it rerenders.\n      scheduleWorkOnFiber(node, renderExpirationTime);\n    } else if (node.child !== null) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === workInProgress) {\n      return;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === workInProgress) {\n        return;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n}\n\nfunction findLastContentRow(firstChild) {\n  // This is going to find the last row among these children that is already\n  // showing content on the screen, as opposed to being in fallback state or\n  // new. If a row has multiple Suspense boundaries, any of them being in the\n  // fallback state, counts as the whole row being in a fallback state.\n  // Note that the \"rows\" will be workInProgress, but any nested children\n  // will still be current since we haven't rendered them yet. The mounted\n  // order may not be the same as the new order. We use the new order.\n  var row = firstChild;\n  var lastContentRow = null;\n\n  while (row !== null) {\n    var currentRow = row.alternate; // New rows can't be content rows.\n\n    if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n      lastContentRow = row;\n    }\n\n    row = row.sibling;\n  }\n\n  return lastContentRow;\n}\n\nfunction validateRevealOrder(revealOrder) {\n  {\n    if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {\n      didWarnAboutRevealOrder[revealOrder] = true;\n\n      if (typeof revealOrder === 'string') {\n        switch (revealOrder.toLowerCase()) {\n          case 'together':\n          case 'forwards':\n          case 'backwards':\n            {\n              error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase \"%s\" instead.', revealOrder, revealOrder.toLowerCase());\n\n              break;\n            }\n\n          case 'forward':\n          case 'backward':\n            {\n              error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use \"%ss\" instead.', revealOrder, revealOrder.toLowerCase());\n\n              break;\n            }\n\n          default:\n            error('\"%s\" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n\n            break;\n        }\n      } else {\n        error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n      }\n    }\n  }\n}\n\nfunction validateTailOptions(tailMode, revealOrder) {\n  {\n    if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {\n      if (tailMode !== 'collapsed' && tailMode !== 'hidden') {\n        didWarnAboutTailOptions[tailMode] = true;\n\n        error('\"%s\" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean \"collapsed\" or \"hidden\"?', tailMode);\n      } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {\n        didWarnAboutTailOptions[tailMode] = true;\n\n        error('<SuspenseList tail=\"%s\" /> is only valid if revealOrder is ' + '\"forwards\" or \"backwards\". ' + 'Did you mean to specify revealOrder=\"forwards\"?', tailMode);\n      }\n    }\n  }\n}\n\nfunction validateSuspenseListNestedChild(childSlot, index) {\n  {\n    var isArray = Array.isArray(childSlot);\n    var isIterable = !isArray && typeof getIteratorFn(childSlot) === 'function';\n\n    if (isArray || isIterable) {\n      var type = isArray ? 'array' : 'iterable';\n\n      error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);\n\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction validateSuspenseListChildren(children, revealOrder) {\n  {\n    if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {\n      if (Array.isArray(children)) {\n        for (var i = 0; i < children.length; i++) {\n          if (!validateSuspenseListNestedChild(children[i], i)) {\n            return;\n          }\n        }\n      } else {\n        var iteratorFn = getIteratorFn(children);\n\n        if (typeof iteratorFn === 'function') {\n          var childrenIterator = iteratorFn.call(children);\n\n          if (childrenIterator) {\n            var step = childrenIterator.next();\n            var _i = 0;\n\n            for (; !step.done; step = childrenIterator.next()) {\n              if (!validateSuspenseListNestedChild(step.value, _i)) {\n                return;\n              }\n\n              _i++;\n            }\n          }\n        } else {\n          error('A single row was passed to a <SuspenseList revealOrder=\"%s\" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);\n        }\n      }\n    }\n  }\n}\n\nfunction initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode, lastEffectBeforeRendering) {\n  var renderState = workInProgress.memoizedState;\n\n  if (renderState === null) {\n    workInProgress.memoizedState = {\n      isBackwards: isBackwards,\n      rendering: null,\n      renderingStartTime: 0,\n      last: lastContentRow,\n      tail: tail,\n      tailExpiration: 0,\n      tailMode: tailMode,\n      lastEffect: lastEffectBeforeRendering\n    };\n  } else {\n    // We can reuse the existing object from previous renders.\n    renderState.isBackwards = isBackwards;\n    renderState.rendering = null;\n    renderState.renderingStartTime = 0;\n    renderState.last = lastContentRow;\n    renderState.tail = tail;\n    renderState.tailExpiration = 0;\n    renderState.tailMode = tailMode;\n    renderState.lastEffect = lastEffectBeforeRendering;\n  }\n} // This can end up rendering this component multiple passes.\n// The first pass splits the children fibers into two sets. A head and tail.\n// We first render the head. If anything is in fallback state, we do another\n// pass through beginWork to rerender all children (including the tail) with\n// the force suspend context. If the first render didn't have anything in\n// in fallback state. Then we render each row in the tail one-by-one.\n// That happens in the completeWork phase without going back to beginWork.\n\n\nfunction updateSuspenseListComponent(current, workInProgress, renderExpirationTime) {\n  var nextProps = workInProgress.pendingProps;\n  var revealOrder = nextProps.revealOrder;\n  var tailMode = nextProps.tail;\n  var newChildren = nextProps.children;\n  validateRevealOrder(revealOrder);\n  validateTailOptions(tailMode, revealOrder);\n  validateSuspenseListChildren(newChildren, revealOrder);\n  reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n  var suspenseContext = suspenseStackCursor.current;\n  var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);\n\n  if (shouldForceFallback) {\n    suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n    workInProgress.effectTag |= DidCapture;\n  } else {\n    var didSuspendBefore = current !== null && (current.effectTag & DidCapture) !== NoEffect;\n\n    if (didSuspendBefore) {\n      // If we previously forced a fallback, we need to schedule work\n      // on any nested boundaries to let them know to try to render\n      // again. This is the same as context updating.\n      propagateSuspenseContextChange(workInProgress, workInProgress.child, renderExpirationTime);\n    }\n\n    suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n  }\n\n  pushSuspenseContext(workInProgress, suspenseContext);\n\n  if ((workInProgress.mode & BlockingMode) === NoMode) {\n    // Outside of blocking mode, SuspenseList doesn't work so we just\n    // use make it a noop by treating it as the default revealOrder.\n    workInProgress.memoizedState = null;\n  } else {\n    switch (revealOrder) {\n      case 'forwards':\n        {\n          var lastContentRow = findLastContentRow(workInProgress.child);\n          var tail;\n\n          if (lastContentRow === null) {\n            // The whole list is part of the tail.\n            // TODO: We could fast path by just rendering the tail now.\n            tail = workInProgress.child;\n            workInProgress.child = null;\n          } else {\n            // Disconnect the tail rows after the content row.\n            // We're going to render them separately later.\n            tail = lastContentRow.sibling;\n            lastContentRow.sibling = null;\n          }\n\n          initSuspenseListRenderState(workInProgress, false, // isBackwards\n          tail, lastContentRow, tailMode, workInProgress.lastEffect);\n          break;\n        }\n\n      case 'backwards':\n        {\n          // We're going to find the first row that has existing content.\n          // At the same time we're going to reverse the list of everything\n          // we pass in the meantime. That's going to be our tail in reverse\n          // order.\n          var _tail = null;\n          var row = workInProgress.child;\n          workInProgress.child = null;\n\n          while (row !== null) {\n            var currentRow = row.alternate; // New rows can't be content rows.\n\n            if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n              // This is the beginning of the main content.\n              workInProgress.child = row;\n              break;\n            }\n\n            var nextRow = row.sibling;\n            row.sibling = _tail;\n            _tail = row;\n            row = nextRow;\n          } // TODO: If workInProgress.child is null, we can continue on the tail immediately.\n\n\n          initSuspenseListRenderState(workInProgress, true, // isBackwards\n          _tail, null, // last\n          tailMode, workInProgress.lastEffect);\n          break;\n        }\n\n      case 'together':\n        {\n          initSuspenseListRenderState(workInProgress, false, // isBackwards\n          null, // tail\n          null, // last\n          undefined, workInProgress.lastEffect);\n          break;\n        }\n\n      default:\n        {\n          // The default reveal order is the same as not having\n          // a boundary.\n          workInProgress.memoizedState = null;\n        }\n    }\n  }\n\n  return workInProgress.child;\n}\n\nfunction updatePortalComponent(current, workInProgress, renderExpirationTime) {\n  pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n  var nextChildren = workInProgress.pendingProps;\n\n  if (current === null) {\n    // Portals are special because we don't append the children during mount\n    // but at commit. Therefore we need to track insertions which the normal\n    // flow doesn't do during mount. This doesn't happen at the root because\n    // the root always starts with a \"current\" with a null child.\n    // TODO: Consider unifying this with how the root works.\n    workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n  } else {\n    reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n  }\n\n  return workInProgress.child;\n}\n\nfunction updateContextProvider(current, workInProgress, renderExpirationTime) {\n  var providerType = workInProgress.type;\n  var context = providerType._context;\n  var newProps = workInProgress.pendingProps;\n  var oldProps = workInProgress.memoizedProps;\n  var newValue = newProps.value;\n\n  {\n    var providerPropTypes = workInProgress.type.propTypes;\n\n    if (providerPropTypes) {\n      checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider', getCurrentFiberStackInDev);\n    }\n  }\n\n  pushProvider(workInProgress, newValue);\n\n  if (oldProps !== null) {\n    var oldValue = oldProps.value;\n    var changedBits = calculateChangedBits(context, newValue, oldValue);\n\n    if (changedBits === 0) {\n      // No change. Bailout early if children are the same.\n      if (oldProps.children === newProps.children && !hasContextChanged()) {\n        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n      }\n    } else {\n      // The context value changed. Search for matching consumers and schedule\n      // them to update.\n      propagateContextChange(workInProgress, context, changedBits, renderExpirationTime);\n    }\n  }\n\n  var newChildren = newProps.children;\n  reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingContextAsConsumer = false;\n\nfunction updateContextConsumer(current, workInProgress, renderExpirationTime) {\n  var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In\n  // DEV mode, we create a separate object for Context.Consumer that acts\n  // like a proxy to Context. This proxy object adds unnecessary code in PROD\n  // so we use the old behaviour (Context.Consumer references Context) to\n  // reduce size and overhead. The separate object references context via\n  // a property called \"_context\", which also gives us the ability to check\n  // in DEV mode if this property exists or not and warn if it does not.\n\n  {\n    if (context._context === undefined) {\n      // This may be because it's a Context (rather than a Consumer).\n      // Or it may be because it's older React where they're the same thing.\n      // We only want to warn if we're sure it's a new React.\n      if (context !== context.Consumer) {\n        if (!hasWarnedAboutUsingContextAsConsumer) {\n          hasWarnedAboutUsingContextAsConsumer = true;\n\n          error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n        }\n      }\n    } else {\n      context = context._context;\n    }\n  }\n\n  var newProps = workInProgress.pendingProps;\n  var render = newProps.children;\n\n  {\n    if (typeof render !== 'function') {\n      error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n    }\n  }\n\n  prepareToReadContext(workInProgress, renderExpirationTime);\n  var newValue = readContext(context, newProps.unstable_observedBits);\n  var newChildren;\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    newChildren = render(newValue);\n    setIsRendering(false);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.effectTag |= PerformedWork;\n  reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n  return workInProgress.child;\n}\n\nfunction markWorkInProgressReceivedUpdate() {\n  didReceiveUpdate = true;\n}\n\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime) {\n  cancelWorkTimer(workInProgress);\n\n  if (current !== null) {\n    // Reuse previous dependencies\n    workInProgress.dependencies = current.dependencies;\n  }\n\n  {\n    // Don't update \"base\" render times for bailouts.\n    stopProfilerTimerIfRunning();\n  }\n\n  var updateExpirationTime = workInProgress.expirationTime;\n\n  if (updateExpirationTime !== NoWork) {\n    markUnprocessedUpdateTime(updateExpirationTime);\n  } // Check if the children have any pending work.\n\n\n  var childExpirationTime = workInProgress.childExpirationTime;\n\n  if (childExpirationTime < renderExpirationTime) {\n    // The children don't have any work either. We can skip them.\n    // TODO: Once we add back resuming, we should check if the children are\n    // a work-in-progress set. If so, we need to transfer their effects.\n    return null;\n  } else {\n    // This fiber doesn't have work, but its subtree does. Clone the child\n    // fibers and continue.\n    cloneChildFibers(current, workInProgress);\n    return workInProgress.child;\n  }\n}\n\nfunction remountFiber(current, oldWorkInProgress, newWorkInProgress) {\n  {\n    var returnFiber = oldWorkInProgress.return;\n\n    if (returnFiber === null) {\n      throw new Error('Cannot swap the root fiber.');\n    } // Disconnect from the old current.\n    // It will get deleted.\n\n\n    current.alternate = null;\n    oldWorkInProgress.alternate = null; // Connect to the new tree.\n\n    newWorkInProgress.index = oldWorkInProgress.index;\n    newWorkInProgress.sibling = oldWorkInProgress.sibling;\n    newWorkInProgress.return = oldWorkInProgress.return;\n    newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.\n\n    if (oldWorkInProgress === returnFiber.child) {\n      returnFiber.child = newWorkInProgress;\n    } else {\n      var prevSibling = returnFiber.child;\n\n      if (prevSibling === null) {\n        throw new Error('Expected parent to have a child.');\n      }\n\n      while (prevSibling.sibling !== oldWorkInProgress) {\n        prevSibling = prevSibling.sibling;\n\n        if (prevSibling === null) {\n          throw new Error('Expected to find the previous sibling.');\n        }\n      }\n\n      prevSibling.sibling = newWorkInProgress;\n    } // Delete the old fiber and place the new one.\n    // Since the old fiber is disconnected, we have to schedule it manually.\n\n\n    var last = returnFiber.lastEffect;\n\n    if (last !== null) {\n      last.nextEffect = current;\n      returnFiber.lastEffect = current;\n    } else {\n      returnFiber.firstEffect = returnFiber.lastEffect = current;\n    }\n\n    current.nextEffect = null;\n    current.effectTag = Deletion;\n    newWorkInProgress.effectTag |= Placement; // Restart work from the new fiber.\n\n    return newWorkInProgress;\n  }\n}\n\nfunction beginWork(current, workInProgress, renderExpirationTime) {\n  var updateExpirationTime = workInProgress.expirationTime;\n\n  {\n    if (workInProgress._debugNeedsRemount && current !== null) {\n      // This will restart the begin phase with a new fiber.\n      return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.expirationTime));\n    }\n  }\n\n  if (current !== null) {\n    var oldProps = current.memoizedProps;\n    var newProps = workInProgress.pendingProps;\n\n    if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:\n     workInProgress.type !== current.type )) {\n      // If props or context changed, mark the fiber as having performed work.\n      // This may be unset if the props are determined to be equal later (memo).\n      didReceiveUpdate = true;\n    } else if (updateExpirationTime < renderExpirationTime) {\n      didReceiveUpdate = false; // This fiber does not have any pending work. Bailout without entering\n      // the begin phase. There's still some bookkeeping we that needs to be done\n      // in this optimized path, mostly pushing stuff onto the stack.\n\n      switch (workInProgress.tag) {\n        case HostRoot:\n          pushHostRootContext(workInProgress);\n          resetHydrationState();\n          break;\n\n        case HostComponent:\n          pushHostContext(workInProgress);\n\n          if (workInProgress.mode & ConcurrentMode && renderExpirationTime !== Never && shouldDeprioritizeSubtree(workInProgress.type, newProps)) {\n            {\n              markSpawnedWork(Never);\n            } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n            workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n            return null;\n          }\n\n          break;\n\n        case ClassComponent:\n          {\n            var Component = workInProgress.type;\n\n            if (isContextProvider(Component)) {\n              pushContextProvider(workInProgress);\n            }\n\n            break;\n          }\n\n        case HostPortal:\n          pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n          break;\n\n        case ContextProvider:\n          {\n            var newValue = workInProgress.memoizedProps.value;\n            pushProvider(workInProgress, newValue);\n            break;\n          }\n\n        case Profiler:\n          {\n            // Profiler should only call onRender when one of its descendants actually rendered.\n            var hasChildWork = workInProgress.childExpirationTime >= renderExpirationTime;\n\n            if (hasChildWork) {\n              workInProgress.effectTag |= Update;\n            }\n          }\n\n          break;\n\n        case SuspenseComponent:\n          {\n            var state = workInProgress.memoizedState;\n\n            if (state !== null) {\n              // whether to retry the primary children, or to skip over it and\n              // go straight to the fallback. Check the priority of the primary\n              // child fragment.\n\n\n              var primaryChildFragment = workInProgress.child;\n              var primaryChildExpirationTime = primaryChildFragment.childExpirationTime;\n\n              if (primaryChildExpirationTime !== NoWork && primaryChildExpirationTime >= renderExpirationTime) {\n                // The primary children have pending work. Use the normal path\n                // to attempt to render the primary children again.\n                return updateSuspenseComponent(current, workInProgress, renderExpirationTime);\n              } else {\n                pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient\n                // priority. Bailout.\n\n                var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n\n                if (child !== null) {\n                  // The fallback children have pending work. Skip over the\n                  // primary children and work on the fallback.\n                  return child.sibling;\n                } else {\n                  return null;\n                }\n              }\n            } else {\n              pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));\n            }\n\n            break;\n          }\n\n        case SuspenseListComponent:\n          {\n            var didSuspendBefore = (current.effectTag & DidCapture) !== NoEffect;\n\n            var _hasChildWork = workInProgress.childExpirationTime >= renderExpirationTime;\n\n            if (didSuspendBefore) {\n              if (_hasChildWork) {\n                // If something was in fallback state last time, and we have all the\n                // same children then we're still in progressive loading state.\n                // Something might get unblocked by state updates or retries in the\n                // tree which will affect the tail. So we need to use the normal\n                // path to compute the correct tail.\n                return updateSuspenseListComponent(current, workInProgress, renderExpirationTime);\n              } // If none of the children had any work, that means that none of\n              // them got retried so they'll still be blocked in the same way\n              // as before. We can fast bail out.\n\n\n              workInProgress.effectTag |= DidCapture;\n            } // If nothing suspended before and we're rendering the same children,\n            // then the tail doesn't matter. Anything new that suspends will work\n            // in the \"together\" mode, so we can continue from the state we had.\n\n\n            var renderState = workInProgress.memoizedState;\n\n            if (renderState !== null) {\n              // Reset to the \"together\" mode in case we've started a different\n              // update in the past but didn't complete it.\n              renderState.rendering = null;\n              renderState.tail = null;\n            }\n\n            pushSuspenseContext(workInProgress, suspenseStackCursor.current);\n\n            if (_hasChildWork) {\n              break;\n            } else {\n              // If none of the children had any work, that means that none of\n              // them got retried so they'll still be blocked in the same way\n              // as before. We can fast bail out.\n              return null;\n            }\n          }\n      }\n\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n    } else {\n      // An update was scheduled on this fiber, but there are no new props\n      // nor legacy context. Set this to false. If an update queue or context\n      // consumer produces a changed value, it will set this to true. Otherwise,\n      // the component will assume the children have not changed and bail out.\n      didReceiveUpdate = false;\n    }\n  } else {\n    didReceiveUpdate = false;\n  } // Before entering the begin phase, clear pending update priority.\n  // TODO: This assumes that we're about to evaluate the component and process\n  // the update queue. However, there's an exception: SimpleMemoComponent\n  // sometimes bails out later in the begin phase. This indicates that we should\n  // move this assignment out of the common path and into each branch.\n\n\n  workInProgress.expirationTime = NoWork;\n\n  switch (workInProgress.tag) {\n    case IndeterminateComponent:\n      {\n        return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderExpirationTime);\n      }\n\n    case LazyComponent:\n      {\n        var elementType = workInProgress.elementType;\n        return mountLazyComponent(current, workInProgress, elementType, updateExpirationTime, renderExpirationTime);\n      }\n\n    case FunctionComponent:\n      {\n        var _Component = workInProgress.type;\n        var unresolvedProps = workInProgress.pendingProps;\n        var resolvedProps = workInProgress.elementType === _Component ? unresolvedProps : resolveDefaultProps(_Component, unresolvedProps);\n        return updateFunctionComponent(current, workInProgress, _Component, resolvedProps, renderExpirationTime);\n      }\n\n    case ClassComponent:\n      {\n        var _Component2 = workInProgress.type;\n        var _unresolvedProps = workInProgress.pendingProps;\n\n        var _resolvedProps = workInProgress.elementType === _Component2 ? _unresolvedProps : resolveDefaultProps(_Component2, _unresolvedProps);\n\n        return updateClassComponent(current, workInProgress, _Component2, _resolvedProps, renderExpirationTime);\n      }\n\n    case HostRoot:\n      return updateHostRoot(current, workInProgress, renderExpirationTime);\n\n    case HostComponent:\n      return updateHostComponent(current, workInProgress, renderExpirationTime);\n\n    case HostText:\n      return updateHostText(current, workInProgress);\n\n    case SuspenseComponent:\n      return updateSuspenseComponent(current, workInProgress, renderExpirationTime);\n\n    case HostPortal:\n      return updatePortalComponent(current, workInProgress, renderExpirationTime);\n\n    case ForwardRef:\n      {\n        var type = workInProgress.type;\n        var _unresolvedProps2 = workInProgress.pendingProps;\n\n        var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);\n\n        return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderExpirationTime);\n      }\n\n    case Fragment:\n      return updateFragment(current, workInProgress, renderExpirationTime);\n\n    case Mode:\n      return updateMode(current, workInProgress, renderExpirationTime);\n\n    case Profiler:\n      return updateProfiler(current, workInProgress, renderExpirationTime);\n\n    case ContextProvider:\n      return updateContextProvider(current, workInProgress, renderExpirationTime);\n\n    case ContextConsumer:\n      return updateContextConsumer(current, workInProgress, renderExpirationTime);\n\n    case MemoComponent:\n      {\n        var _type2 = workInProgress.type;\n        var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.\n\n        var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);\n\n        {\n          if (workInProgress.type !== workInProgress.elementType) {\n            var outerPropTypes = _type2.propTypes;\n\n            if (outerPropTypes) {\n              checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only\n              'prop', getComponentName(_type2), getCurrentFiberStackInDev);\n            }\n          }\n        }\n\n        _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);\n        return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, updateExpirationTime, renderExpirationTime);\n      }\n\n    case SimpleMemoComponent:\n      {\n        return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, updateExpirationTime, renderExpirationTime);\n      }\n\n    case IncompleteClassComponent:\n      {\n        var _Component3 = workInProgress.type;\n        var _unresolvedProps4 = workInProgress.pendingProps;\n\n        var _resolvedProps4 = workInProgress.elementType === _Component3 ? _unresolvedProps4 : resolveDefaultProps(_Component3, _unresolvedProps4);\n\n        return mountIncompleteClassComponent(current, workInProgress, _Component3, _resolvedProps4, renderExpirationTime);\n      }\n\n    case SuspenseListComponent:\n      {\n        return updateSuspenseListComponent(current, workInProgress, renderExpirationTime);\n      }\n  }\n\n  {\n    {\n      throw Error( \"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction markUpdate(workInProgress) {\n  // Tag the fiber with an update effect. This turns a Placement into\n  // a PlacementAndUpdate.\n  workInProgress.effectTag |= Update;\n}\n\nfunction markRef$1(workInProgress) {\n  workInProgress.effectTag |= Ref;\n}\n\nvar appendAllChildren;\nvar updateHostContainer;\nvar updateHostComponent$1;\nvar updateHostText$1;\n\n{\n  // Mutation mode\n  appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {\n    // We only have the top Fiber that was created but we need recurse down its\n    // children to find all the terminal nodes.\n    var node = workInProgress.child;\n\n    while (node !== null) {\n      if (node.tag === HostComponent || node.tag === HostText) {\n        appendInitialChild(parent, node.stateNode);\n      } else if (node.tag === HostPortal) ; else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === workInProgress) {\n        return;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === workInProgress) {\n          return;\n        }\n\n        node = node.return;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  };\n\n  updateHostContainer = function (workInProgress) {// Noop\n  };\n\n  updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n    // If we have an alternate, that means this is an update and we need to\n    // schedule a side-effect to do the updates.\n    var oldProps = current.memoizedProps;\n\n    if (oldProps === newProps) {\n      // In mutation mode, this is sufficient for a bailout because\n      // we won't touch this node even if children changed.\n      return;\n    } // If we get updated because one of our children updated, we don't\n    // have newProps so we'll have to reuse them.\n    // TODO: Split the update API as separate for the props vs. children.\n    // Even better would be if children weren't special cased at all tho.\n\n\n    var instance = workInProgress.stateNode;\n    var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host\n    // component is hitting the resume path. Figure out why. Possibly\n    // related to `hidden`.\n\n    var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.\n\n    workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n    // is a new ref we mark this as an update. All the work is done in commitWork.\n\n    if (updatePayload) {\n      markUpdate(workInProgress);\n    }\n  };\n\n  updateHostText$1 = function (current, workInProgress, oldText, newText) {\n    // If the text differs, mark it as an update. All the work in done in commitWork.\n    if (oldText !== newText) {\n      markUpdate(workInProgress);\n    }\n  };\n}\n\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  switch (renderState.tailMode) {\n    case 'hidden':\n      {\n        // Any insertions at the end of the tail list after this point\n        // should be invisible. If there are already mounted boundaries\n        // anything before them are not considered for collapsing.\n        // Therefore we need to go through the whole tail to find if\n        // there are any.\n        var tailNode = renderState.tail;\n        var lastTailNode = null;\n\n        while (tailNode !== null) {\n          if (tailNode.alternate !== null) {\n            lastTailNode = tailNode;\n          }\n\n          tailNode = tailNode.sibling;\n        } // Next we're simply going to delete all insertions after the\n        // last rendered item.\n\n\n        if (lastTailNode === null) {\n          // All remaining items in the tail are insertions.\n          renderState.tail = null;\n        } else {\n          // Detach the insertion after the last node that was already\n          // inserted.\n          lastTailNode.sibling = null;\n        }\n\n        break;\n      }\n\n    case 'collapsed':\n      {\n        // Any insertions at the end of the tail list after this point\n        // should be invisible. If there are already mounted boundaries\n        // anything before them are not considered for collapsing.\n        // Therefore we need to go through the whole tail to find if\n        // there are any.\n        var _tailNode = renderState.tail;\n        var _lastTailNode = null;\n\n        while (_tailNode !== null) {\n          if (_tailNode.alternate !== null) {\n            _lastTailNode = _tailNode;\n          }\n\n          _tailNode = _tailNode.sibling;\n        } // Next we're simply going to delete all insertions after the\n        // last rendered item.\n\n\n        if (_lastTailNode === null) {\n          // All remaining items in the tail are insertions.\n          if (!hasRenderedATailFallback && renderState.tail !== null) {\n            // We suspended during the head. We want to show at least one\n            // row at the tail. So we'll keep on and cut off the rest.\n            renderState.tail.sibling = null;\n          } else {\n            renderState.tail = null;\n          }\n        } else {\n          // Detach the insertion after the last node that was already\n          // inserted.\n          _lastTailNode.sibling = null;\n        }\n\n        break;\n      }\n  }\n}\n\nfunction completeWork(current, workInProgress, renderExpirationTime) {\n  var newProps = workInProgress.pendingProps;\n\n  switch (workInProgress.tag) {\n    case IndeterminateComponent:\n    case LazyComponent:\n    case SimpleMemoComponent:\n    case FunctionComponent:\n    case ForwardRef:\n    case Fragment:\n    case Mode:\n    case Profiler:\n    case ContextConsumer:\n    case MemoComponent:\n      return null;\n\n    case ClassComponent:\n      {\n        var Component = workInProgress.type;\n\n        if (isContextProvider(Component)) {\n          popContext(workInProgress);\n        }\n\n        return null;\n      }\n\n    case HostRoot:\n      {\n        popHostContainer(workInProgress);\n        popTopLevelContextObject(workInProgress);\n        var fiberRoot = workInProgress.stateNode;\n\n        if (fiberRoot.pendingContext) {\n          fiberRoot.context = fiberRoot.pendingContext;\n          fiberRoot.pendingContext = null;\n        }\n\n        if (current === null || current.child === null) {\n          // If we hydrated, pop so that we can delete any remaining children\n          // that weren't hydrated.\n          var wasHydrated = popHydrationState(workInProgress);\n\n          if (wasHydrated) {\n            // If we hydrated, then we'll need to schedule an update for\n            // the commit side-effects on the root.\n            markUpdate(workInProgress);\n          }\n        }\n\n        updateHostContainer(workInProgress);\n        return null;\n      }\n\n    case HostComponent:\n      {\n        popHostContext(workInProgress);\n        var rootContainerInstance = getRootHostContainer();\n        var type = workInProgress.type;\n\n        if (current !== null && workInProgress.stateNode != null) {\n          updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);\n\n          if (current.ref !== workInProgress.ref) {\n            markRef$1(workInProgress);\n          }\n        } else {\n          if (!newProps) {\n            if (!(workInProgress.stateNode !== null)) {\n              {\n                throw Error( \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\" );\n              }\n            } // This can happen when we abort work.\n\n\n            return null;\n          }\n\n          var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context\n          // \"stack\" as the parent. Then append children as we go in beginWork\n          // or completeWork depending on whether we want to add them top->down or\n          // bottom->up. Top->down is faster in IE11.\n\n          var _wasHydrated = popHydrationState(workInProgress);\n\n          if (_wasHydrated) {\n            // TODO: Move this and createInstance step into the beginPhase\n            // to consolidate.\n            if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {\n              // If changes to the hydrated node need to be applied at the\n              // commit-phase we mark this as such.\n              markUpdate(workInProgress);\n            }\n          } else {\n            var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);\n            appendAllChildren(instance, workInProgress, false, false); // This needs to be set before we mount Flare event listeners\n\n            workInProgress.stateNode = instance;\n            // (eg DOM renderer supports auto-focus for certain elements).\n            // Make sure such renderers get scheduled for later work.\n\n\n            if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {\n              markUpdate(workInProgress);\n            }\n          }\n\n          if (workInProgress.ref !== null) {\n            // If there is a ref on a host node we need to schedule a callback\n            markRef$1(workInProgress);\n          }\n        }\n\n        return null;\n      }\n\n    case HostText:\n      {\n        var newText = newProps;\n\n        if (current && workInProgress.stateNode != null) {\n          var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need\n          // to schedule a side-effect to do the updates.\n\n          updateHostText$1(current, workInProgress, oldText, newText);\n        } else {\n          if (typeof newText !== 'string') {\n            if (!(workInProgress.stateNode !== null)) {\n              {\n                throw Error( \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\" );\n              }\n            } // This can happen when we abort work.\n\n          }\n\n          var _rootContainerInstance = getRootHostContainer();\n\n          var _currentHostContext = getHostContext();\n\n          var _wasHydrated2 = popHydrationState(workInProgress);\n\n          if (_wasHydrated2) {\n            if (prepareToHydrateHostTextInstance(workInProgress)) {\n              markUpdate(workInProgress);\n            }\n          } else {\n            workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);\n          }\n        }\n\n        return null;\n      }\n\n    case SuspenseComponent:\n      {\n        popSuspenseContext(workInProgress);\n        var nextState = workInProgress.memoizedState;\n\n        if ((workInProgress.effectTag & DidCapture) !== NoEffect) {\n          // Something suspended. Re-render with the fallback children.\n          workInProgress.expirationTime = renderExpirationTime; // Do not reset the effect list.\n\n          return workInProgress;\n        }\n\n        var nextDidTimeout = nextState !== null;\n        var prevDidTimeout = false;\n\n        if (current === null) {\n          if (workInProgress.memoizedProps.fallback !== undefined) {\n            popHydrationState(workInProgress);\n          }\n        } else {\n          var prevState = current.memoizedState;\n          prevDidTimeout = prevState !== null;\n\n          if (!nextDidTimeout && prevState !== null) {\n            // We just switched from the fallback to the normal children.\n            // Delete the fallback.\n            // TODO: Would it be better to store the fallback fragment on\n            // the stateNode during the begin phase?\n            var currentFallbackChild = current.child.sibling;\n\n            if (currentFallbackChild !== null) {\n              // Deletions go at the beginning of the return fiber's effect list\n              var first = workInProgress.firstEffect;\n\n              if (first !== null) {\n                workInProgress.firstEffect = currentFallbackChild;\n                currentFallbackChild.nextEffect = first;\n              } else {\n                workInProgress.firstEffect = workInProgress.lastEffect = currentFallbackChild;\n                currentFallbackChild.nextEffect = null;\n              }\n\n              currentFallbackChild.effectTag = Deletion;\n            }\n          }\n        }\n\n        if (nextDidTimeout && !prevDidTimeout) {\n          // If this subtreee is running in blocking mode we can suspend,\n          // otherwise we won't suspend.\n          // TODO: This will still suspend a synchronous tree if anything\n          // in the concurrent tree already suspended during this render.\n          // This is a known bug.\n          if ((workInProgress.mode & BlockingMode) !== NoMode) {\n            // TODO: Move this back to throwException because this is too late\n            // if this is a large tree which is common for initial loads. We\n            // don't know if we should restart a render or not until we get\n            // this marker, and this is too late.\n            // If this render already had a ping or lower pri updates,\n            // and this is the first time we know we're going to suspend we\n            // should be able to immediately restart from within throwException.\n            var hasInvisibleChildContext = current === null && workInProgress.memoizedProps.unstable_avoidThisFallback !== true;\n\n            if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {\n              // If this was in an invisible tree or a new render, then showing\n              // this boundary is ok.\n              renderDidSuspend();\n            } else {\n              // Otherwise, we're going to have to hide content so we should\n              // suspend for longer if possible.\n              renderDidSuspendDelayIfPossible();\n            }\n          }\n        }\n\n        {\n          // TODO: Only schedule updates if these values are non equal, i.e. it changed.\n          if (nextDidTimeout || prevDidTimeout) {\n            // If this boundary just timed out, schedule an effect to attach a\n            // retry listener to the promise. This flag is also used to hide the\n            // primary children. In mutation mode, we also need the flag to\n            // *unhide* children that were previously hidden, so check if this\n            // is currently timed out, too.\n            workInProgress.effectTag |= Update;\n          }\n        }\n\n        return null;\n      }\n\n    case HostPortal:\n      popHostContainer(workInProgress);\n      updateHostContainer(workInProgress);\n      return null;\n\n    case ContextProvider:\n      // Pop provider fiber\n      popProvider(workInProgress);\n      return null;\n\n    case IncompleteClassComponent:\n      {\n        // Same as class component case. I put it down here so that the tags are\n        // sequential to ensure this switch is compiled to a jump table.\n        var _Component = workInProgress.type;\n\n        if (isContextProvider(_Component)) {\n          popContext(workInProgress);\n        }\n\n        return null;\n      }\n\n    case SuspenseListComponent:\n      {\n        popSuspenseContext(workInProgress);\n        var renderState = workInProgress.memoizedState;\n\n        if (renderState === null) {\n          // We're running in the default, \"independent\" mode.\n          // We don't do anything in this mode.\n          return null;\n        }\n\n        var didSuspendAlready = (workInProgress.effectTag & DidCapture) !== NoEffect;\n        var renderedTail = renderState.rendering;\n\n        if (renderedTail === null) {\n          // We just rendered the head.\n          if (!didSuspendAlready) {\n            // This is the first pass. We need to figure out if anything is still\n            // suspended in the rendered set.\n            // If new content unsuspended, but there's still some content that\n            // didn't. Then we need to do a second pass that forces everything\n            // to keep showing their fallbacks.\n            // We might be suspended if something in this render pass suspended, or\n            // something in the previous committed pass suspended. Otherwise,\n            // there's no chance so we can skip the expensive call to\n            // findFirstSuspended.\n            var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.effectTag & DidCapture) === NoEffect);\n\n            if (!cannotBeSuspended) {\n              var row = workInProgress.child;\n\n              while (row !== null) {\n                var suspended = findFirstSuspended(row);\n\n                if (suspended !== null) {\n                  didSuspendAlready = true;\n                  workInProgress.effectTag |= DidCapture;\n                  cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as\n                  // part of the second pass. In that case nothing will subscribe to\n                  // its thennables. Instead, we'll transfer its thennables to the\n                  // SuspenseList so that it can retry if they resolve.\n                  // There might be multiple of these in the list but since we're\n                  // going to wait for all of them anyway, it doesn't really matter\n                  // which ones gets to ping. In theory we could get clever and keep\n                  // track of how many dependencies remain but it gets tricky because\n                  // in the meantime, we can add/remove/change items and dependencies.\n                  // We might bail out of the loop before finding any but that\n                  // doesn't matter since that means that the other boundaries that\n                  // we did find already has their listeners attached.\n\n                  var newThennables = suspended.updateQueue;\n\n                  if (newThennables !== null) {\n                    workInProgress.updateQueue = newThennables;\n                    workInProgress.effectTag |= Update;\n                  } // Rerender the whole list, but this time, we'll force fallbacks\n                  // to stay in place.\n                  // Reset the effect list before doing the second pass since that's now invalid.\n\n\n                  if (renderState.lastEffect === null) {\n                    workInProgress.firstEffect = null;\n                  }\n\n                  workInProgress.lastEffect = renderState.lastEffect; // Reset the child fibers to their original state.\n\n                  resetChildFibers(workInProgress, renderExpirationTime); // Set up the Suspense Context to force suspense and immediately\n                  // rerender the children.\n\n                  pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback));\n                  return workInProgress.child;\n                }\n\n                row = row.sibling;\n              }\n            }\n          } else {\n            cutOffTailIfNeeded(renderState, false);\n          } // Next we're going to render the tail.\n\n        } else {\n          // Append the rendered row to the child list.\n          if (!didSuspendAlready) {\n            var _suspended = findFirstSuspended(renderedTail);\n\n            if (_suspended !== null) {\n              workInProgress.effectTag |= DidCapture;\n              didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't\n              // get lost if this row ends up dropped during a second pass.\n\n              var _newThennables = _suspended.updateQueue;\n\n              if (_newThennables !== null) {\n                workInProgress.updateQueue = _newThennables;\n                workInProgress.effectTag |= Update;\n              }\n\n              cutOffTailIfNeeded(renderState, true); // This might have been modified.\n\n              if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate) {\n                // We need to delete the row we just rendered.\n                // Reset the effect list to what it was before we rendered this\n                // child. The nested children have already appended themselves.\n                var lastEffect = workInProgress.lastEffect = renderState.lastEffect; // Remove any effects that were appended after this point.\n\n                if (lastEffect !== null) {\n                  lastEffect.nextEffect = null;\n                } // We're done.\n\n\n                return null;\n              }\n            } else if ( // The time it took to render last row is greater than time until\n            // the expiration.\n            now() * 2 - renderState.renderingStartTime > renderState.tailExpiration && renderExpirationTime > Never) {\n              // We have now passed our CPU deadline and we'll just give up further\n              // attempts to render the main content and only render fallbacks.\n              // The assumption is that this is usually faster.\n              workInProgress.effectTag |= DidCapture;\n              didSuspendAlready = true;\n              cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n              // to get it started back up to attempt the next item. If we can show\n              // them, then they really have the same priority as this render.\n              // So we'll pick it back up the very next render pass once we've had\n              // an opportunity to yield for paint.\n\n              var nextPriority = renderExpirationTime - 1;\n              workInProgress.expirationTime = workInProgress.childExpirationTime = nextPriority;\n\n              {\n                markSpawnedWork(nextPriority);\n              }\n            }\n          }\n\n          if (renderState.isBackwards) {\n            // The effect list of the backwards tail will have been added\n            // to the end. This breaks the guarantee that life-cycles fire in\n            // sibling order but that isn't a strong guarantee promised by React.\n            // Especially since these might also just pop in during future commits.\n            // Append to the beginning of the list.\n            renderedTail.sibling = workInProgress.child;\n            workInProgress.child = renderedTail;\n          } else {\n            var previousSibling = renderState.last;\n\n            if (previousSibling !== null) {\n              previousSibling.sibling = renderedTail;\n            } else {\n              workInProgress.child = renderedTail;\n            }\n\n            renderState.last = renderedTail;\n          }\n        }\n\n        if (renderState.tail !== null) {\n          // We still have tail rows to render.\n          if (renderState.tailExpiration === 0) {\n            // Heuristic for how long we're willing to spend rendering rows\n            // until we just give up and show what we have so far.\n            var TAIL_EXPIRATION_TIMEOUT_MS = 500;\n            renderState.tailExpiration = now() + TAIL_EXPIRATION_TIMEOUT_MS; // TODO: This is meant to mimic the train model or JND but this\n            // is a per component value. It should really be since the start\n            // of the total render or last commit. Consider using something like\n            // globalMostRecentFallbackTime. That doesn't account for being\n            // suspended for part of the time or when it's a new render.\n            // It should probably use a global start time value instead.\n          } // Pop a row.\n\n\n          var next = renderState.tail;\n          renderState.rendering = next;\n          renderState.tail = next.sibling;\n          renderState.lastEffect = workInProgress.lastEffect;\n          renderState.renderingStartTime = now();\n          next.sibling = null; // Restore the context.\n          // TODO: We can probably just avoid popping it instead and only\n          // setting it the first time we go from not suspended to suspended.\n\n          var suspenseContext = suspenseStackCursor.current;\n\n          if (didSuspendAlready) {\n            suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n          } else {\n            suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n          }\n\n          pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.\n\n          return next;\n        }\n\n        return null;\n      }\n  }\n\n  {\n    {\n      throw Error( \"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction unwindWork(workInProgress, renderExpirationTime) {\n  switch (workInProgress.tag) {\n    case ClassComponent:\n      {\n        var Component = workInProgress.type;\n\n        if (isContextProvider(Component)) {\n          popContext(workInProgress);\n        }\n\n        var effectTag = workInProgress.effectTag;\n\n        if (effectTag & ShouldCapture) {\n          workInProgress.effectTag = effectTag & ~ShouldCapture | DidCapture;\n          return workInProgress;\n        }\n\n        return null;\n      }\n\n    case HostRoot:\n      {\n        popHostContainer(workInProgress);\n        popTopLevelContextObject(workInProgress);\n        var _effectTag = workInProgress.effectTag;\n\n        if (!((_effectTag & DidCapture) === NoEffect)) {\n          {\n            throw Error( \"The root failed to unmount after an error. This is likely a bug in React. Please file an issue.\" );\n          }\n        }\n\n        workInProgress.effectTag = _effectTag & ~ShouldCapture | DidCapture;\n        return workInProgress;\n      }\n\n    case HostComponent:\n      {\n        // TODO: popHydrationState\n        popHostContext(workInProgress);\n        return null;\n      }\n\n    case SuspenseComponent:\n      {\n        popSuspenseContext(workInProgress);\n\n        var _effectTag2 = workInProgress.effectTag;\n\n        if (_effectTag2 & ShouldCapture) {\n          workInProgress.effectTag = _effectTag2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.\n\n          return workInProgress;\n        }\n\n        return null;\n      }\n\n    case SuspenseListComponent:\n      {\n        popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been\n        // caught by a nested boundary. If not, it should bubble through.\n\n        return null;\n      }\n\n    case HostPortal:\n      popHostContainer(workInProgress);\n      return null;\n\n    case ContextProvider:\n      popProvider(workInProgress);\n      return null;\n\n    default:\n      return null;\n  }\n}\n\nfunction unwindInterruptedWork(interruptedWork) {\n  switch (interruptedWork.tag) {\n    case ClassComponent:\n      {\n        var childContextTypes = interruptedWork.type.childContextTypes;\n\n        if (childContextTypes !== null && childContextTypes !== undefined) {\n          popContext(interruptedWork);\n        }\n\n        break;\n      }\n\n    case HostRoot:\n      {\n        popHostContainer(interruptedWork);\n        popTopLevelContextObject(interruptedWork);\n        break;\n      }\n\n    case HostComponent:\n      {\n        popHostContext(interruptedWork);\n        break;\n      }\n\n    case HostPortal:\n      popHostContainer(interruptedWork);\n      break;\n\n    case SuspenseComponent:\n      popSuspenseContext(interruptedWork);\n      break;\n\n    case SuspenseListComponent:\n      popSuspenseContext(interruptedWork);\n      break;\n\n    case ContextProvider:\n      popProvider(interruptedWork);\n      break;\n  }\n}\n\nfunction createCapturedValue(value, source) {\n  // If the value is an error, call this function immediately after it is thrown\n  // so the stack is accurate.\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\n\nfunction logCapturedError(capturedError) {\n\n  var error = capturedError.error;\n\n  {\n    var componentName = capturedError.componentName,\n        componentStack = capturedError.componentStack,\n        errorBoundaryName = capturedError.errorBoundaryName,\n        errorBoundaryFound = capturedError.errorBoundaryFound,\n        willRetry = capturedError.willRetry; // Browsers support silencing uncaught errors by calling\n    // `preventDefault()` in window `error` handler.\n    // We record this information as an expando on the error.\n\n    if (error != null && error._suppressLogging) {\n      if (errorBoundaryFound && willRetry) {\n        // The error is recoverable and was silenced.\n        // Ignore it and don't print the stack addendum.\n        // This is handy for testing error boundaries without noise.\n        return;\n      } // The error is fatal. Since the silencing might have\n      // been accidental, we'll surface it anyway.\n      // However, the browser would have silenced the original error\n      // so we'll print it first, and then print the stack addendum.\n\n\n      console['error'](error); // Don't transform to our wrapper\n      // For a more detailed description of this block, see:\n      // https://github.com/facebook/react/pull/13384\n    }\n\n    var componentNameMessage = componentName ? \"The above error occurred in the <\" + componentName + \"> component:\" : 'The above error occurred in one of your React components:';\n    var errorBoundaryMessage; // errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow.\n\n    if (errorBoundaryFound && errorBoundaryName) {\n      if (willRetry) {\n        errorBoundaryMessage = \"React will try to recreate this component tree from scratch \" + (\"using the error boundary you provided, \" + errorBoundaryName + \".\");\n      } else {\n        errorBoundaryMessage = \"This error was initially handled by the error boundary \" + errorBoundaryName + \".\\n\" + \"Recreating the tree from scratch failed so React will unmount the tree.\";\n      }\n    } else {\n      errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.';\n    }\n\n    var combinedMessage = \"\" + componentNameMessage + componentStack + \"\\n\\n\" + (\"\" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.\n    // We don't include the original error message and JS stack because the browser\n    // has already printed it. Even if the application swallows the error, it is still\n    // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n\n    console['error'](combinedMessage); // Don't transform to our wrapper\n  }\n}\n\nvar didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n\n{\n  didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n}\n\nvar PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;\nfunction logError(boundary, errorInfo) {\n  var source = errorInfo.source;\n  var stack = errorInfo.stack;\n\n  if (stack === null && source !== null) {\n    stack = getStackByFiberInDevAndProd(source);\n  }\n\n  var capturedError = {\n    componentName: source !== null ? getComponentName(source.type) : null,\n    componentStack: stack !== null ? stack : '',\n    error: errorInfo.value,\n    errorBoundary: null,\n    errorBoundaryName: null,\n    errorBoundaryFound: false,\n    willRetry: false\n  };\n\n  if (boundary !== null && boundary.tag === ClassComponent) {\n    capturedError.errorBoundary = boundary.stateNode;\n    capturedError.errorBoundaryName = getComponentName(boundary.type);\n    capturedError.errorBoundaryFound = true;\n    capturedError.willRetry = true;\n  }\n\n  try {\n    logCapturedError(capturedError);\n  } catch (e) {\n    // This method must not throw, or React internal state will get messed up.\n    // If console.error is overridden, or logCapturedError() shows a dialog that throws,\n    // we want to report this error outside of the normal stack as a last resort.\n    // https://github.com/facebook/react/issues/13188\n    setTimeout(function () {\n      throw e;\n    });\n  }\n}\n\nvar callComponentWillUnmountWithTimer = function (current, instance) {\n  startPhaseTimer(current, 'componentWillUnmount');\n  instance.props = current.memoizedProps;\n  instance.state = current.memoizedState;\n  instance.componentWillUnmount();\n  stopPhaseTimer();\n}; // Capture errors so they don't interrupt unmounting.\n\n\nfunction safelyCallComponentWillUnmount(current, instance) {\n  {\n    invokeGuardedCallback(null, callComponentWillUnmountWithTimer, null, current, instance);\n\n    if (hasCaughtError()) {\n      var unmountError = clearCaughtError();\n      captureCommitPhaseError(current, unmountError);\n    }\n  }\n}\n\nfunction safelyDetachRef(current) {\n  var ref = current.ref;\n\n  if (ref !== null) {\n    if (typeof ref === 'function') {\n      {\n        invokeGuardedCallback(null, ref, null, null);\n\n        if (hasCaughtError()) {\n          var refError = clearCaughtError();\n          captureCommitPhaseError(current, refError);\n        }\n      }\n    } else {\n      ref.current = null;\n    }\n  }\n}\n\nfunction safelyCallDestroy(current, destroy) {\n  {\n    invokeGuardedCallback(null, destroy, null);\n\n    if (hasCaughtError()) {\n      var error = clearCaughtError();\n      captureCommitPhaseError(current, error);\n    }\n  }\n}\n\nfunction commitBeforeMutationLifeCycles(current, finishedWork) {\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case SimpleMemoComponent:\n    case Block:\n      {\n        return;\n      }\n\n    case ClassComponent:\n      {\n        if (finishedWork.effectTag & Snapshot) {\n          if (current !== null) {\n            var prevProps = current.memoizedProps;\n            var prevState = current.memoizedState;\n            startPhaseTimer(finishedWork, 'getSnapshotBeforeUpdate');\n            var instance = finishedWork.stateNode; // We could update instance props and state here,\n            // but instead we rely on them being set during last render.\n            // TODO: revisit this when we implement resuming.\n\n            {\n              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                if (instance.props !== finishedWork.memoizedProps) {\n                  error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n\n                if (instance.state !== finishedWork.memoizedState) {\n                  error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n              }\n            }\n\n            var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);\n\n            {\n              var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;\n\n              if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {\n                didWarnSet.add(finishedWork.type);\n\n                error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentName(finishedWork.type));\n              }\n            }\n\n            instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n            stopPhaseTimer();\n          }\n        }\n\n        return;\n      }\n\n    case HostRoot:\n    case HostComponent:\n    case HostText:\n    case HostPortal:\n    case IncompleteClassComponent:\n      // Nothing to do for these component types\n      return;\n  }\n\n  {\n    {\n      throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction commitHookEffectListUnmount(tag, finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n  if (lastEffect !== null) {\n    var firstEffect = lastEffect.next;\n    var effect = firstEffect;\n\n    do {\n      if ((effect.tag & tag) === tag) {\n        // Unmount\n        var destroy = effect.destroy;\n        effect.destroy = undefined;\n\n        if (destroy !== undefined) {\n          destroy();\n        }\n      }\n\n      effect = effect.next;\n    } while (effect !== firstEffect);\n  }\n}\n\nfunction commitHookEffectListMount(tag, finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n  if (lastEffect !== null) {\n    var firstEffect = lastEffect.next;\n    var effect = firstEffect;\n\n    do {\n      if ((effect.tag & tag) === tag) {\n        // Mount\n        var create = effect.create;\n        effect.destroy = create();\n\n        {\n          var destroy = effect.destroy;\n\n          if (destroy !== undefined && typeof destroy !== 'function') {\n            var addendum = void 0;\n\n            if (destroy === null) {\n              addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';\n            } else if (typeof destroy.then === 'function') {\n              addendum = '\\n\\nIt looks like you wrote useEffect(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + 'useEffect(() => {\\n' + '  async function fetchData() {\\n' + '    // You can await here\\n' + '    const response = await MyAPI.getData(someId);\\n' + '    // ...\\n' + '  }\\n' + '  fetchData();\\n' + \"}, [someId]); // Or [] if effect doesn't need props or state\\n\\n\" + 'Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching';\n            } else {\n              addendum = ' You returned: ' + destroy;\n            }\n\n            error('An effect function must not return anything besides a function, ' + 'which is used for clean-up.%s%s', addendum, getStackByFiberInDevAndProd(finishedWork));\n          }\n        }\n      }\n\n      effect = effect.next;\n    } while (effect !== firstEffect);\n  }\n}\n\nfunction commitPassiveHookEffects(finishedWork) {\n  if ((finishedWork.effectTag & Passive) !== NoEffect) {\n    switch (finishedWork.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case SimpleMemoComponent:\n      case Block:\n        {\n          // TODO (#17945) We should call all passive destroy functions (for all fibers)\n          // before calling any create functions. The current approach only serializes\n          // these for a single fiber.\n          commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork);\n          commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);\n          break;\n        }\n    }\n  }\n}\n\nfunction commitLifeCycles(finishedRoot, current, finishedWork, committedExpirationTime) {\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case SimpleMemoComponent:\n    case Block:\n      {\n        // At this point layout effects have already been destroyed (during mutation phase).\n        // This is done to prevent sibling component effects from interfering with each other,\n        // e.g. a destroy function in one component should never override a ref set\n        // by a create function in another component during the same commit.\n        commitHookEffectListMount(Layout | HasEffect, finishedWork);\n\n        return;\n      }\n\n    case ClassComponent:\n      {\n        var instance = finishedWork.stateNode;\n\n        if (finishedWork.effectTag & Update) {\n          if (current === null) {\n            startPhaseTimer(finishedWork, 'componentDidMount'); // We could update instance props and state here,\n            // but instead we rely on them being set during last render.\n            // TODO: revisit this when we implement resuming.\n\n            {\n              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                if (instance.props !== finishedWork.memoizedProps) {\n                  error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n\n                if (instance.state !== finishedWork.memoizedState) {\n                  error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n              }\n            }\n\n            instance.componentDidMount();\n            stopPhaseTimer();\n          } else {\n            var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);\n            var prevState = current.memoizedState;\n            startPhaseTimer(finishedWork, 'componentDidUpdate'); // We could update instance props and state here,\n            // but instead we rely on them being set during last render.\n            // TODO: revisit this when we implement resuming.\n\n            {\n              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                if (instance.props !== finishedWork.memoizedProps) {\n                  error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n\n                if (instance.state !== finishedWork.memoizedState) {\n                  error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n                }\n              }\n            }\n\n            instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n            stopPhaseTimer();\n          }\n        }\n\n        var updateQueue = finishedWork.updateQueue;\n\n        if (updateQueue !== null) {\n          {\n            if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n              if (instance.props !== finishedWork.memoizedProps) {\n                error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n              }\n\n              if (instance.state !== finishedWork.memoizedState) {\n                error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n              }\n            }\n          } // We could update instance props and state here,\n          // but instead we rely on them being set during last render.\n          // TODO: revisit this when we implement resuming.\n\n\n          commitUpdateQueue(finishedWork, updateQueue, instance);\n        }\n\n        return;\n      }\n\n    case HostRoot:\n      {\n        var _updateQueue = finishedWork.updateQueue;\n\n        if (_updateQueue !== null) {\n          var _instance = null;\n\n          if (finishedWork.child !== null) {\n            switch (finishedWork.child.tag) {\n              case HostComponent:\n                _instance = getPublicInstance(finishedWork.child.stateNode);\n                break;\n\n              case ClassComponent:\n                _instance = finishedWork.child.stateNode;\n                break;\n            }\n          }\n\n          commitUpdateQueue(finishedWork, _updateQueue, _instance);\n        }\n\n        return;\n      }\n\n    case HostComponent:\n      {\n        var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted\n        // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n        // These effects should only be committed when components are first mounted,\n        // aka when there is no current/alternate.\n\n        if (current === null && finishedWork.effectTag & Update) {\n          var type = finishedWork.type;\n          var props = finishedWork.memoizedProps;\n          commitMount(_instance2, type, props);\n        }\n\n        return;\n      }\n\n    case HostText:\n      {\n        // We have no life-cycles associated with text.\n        return;\n      }\n\n    case HostPortal:\n      {\n        // We have no life-cycles associated with portals.\n        return;\n      }\n\n    case Profiler:\n      {\n        {\n          var onRender = finishedWork.memoizedProps.onRender;\n\n          if (typeof onRender === 'function') {\n            {\n              onRender(finishedWork.memoizedProps.id, current === null ? 'mount' : 'update', finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, getCommitTime(), finishedRoot.memoizedInteractions);\n            }\n          }\n        }\n\n        return;\n      }\n\n    case SuspenseComponent:\n      {\n        commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        return;\n      }\n\n    case SuspenseListComponent:\n    case IncompleteClassComponent:\n    case FundamentalComponent:\n    case ScopeComponent:\n      return;\n  }\n\n  {\n    {\n      throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n  {\n    // We only have the top Fiber that was inserted but we need to recurse down its\n    // children to find all the terminal nodes.\n    var node = finishedWork;\n\n    while (true) {\n      if (node.tag === HostComponent) {\n        var instance = node.stateNode;\n\n        if (isHidden) {\n          hideInstance(instance);\n        } else {\n          unhideInstance(node.stateNode, node.memoizedProps);\n        }\n      } else if (node.tag === HostText) {\n        var _instance3 = node.stateNode;\n\n        if (isHidden) {\n          hideTextInstance(_instance3);\n        } else {\n          unhideTextInstance(_instance3, node.memoizedProps);\n        }\n      } else if (node.tag === SuspenseComponent && node.memoizedState !== null && node.memoizedState.dehydrated === null) {\n        // Found a nested Suspense component that timed out. Skip over the\n        // primary child fragment, which should remain hidden.\n        var fallbackChildFragment = node.child.sibling;\n        fallbackChildFragment.return = node;\n        node = fallbackChildFragment;\n        continue;\n      } else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === finishedWork) {\n        return;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === finishedWork) {\n          return;\n        }\n\n        node = node.return;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n}\n\nfunction commitAttachRef(finishedWork) {\n  var ref = finishedWork.ref;\n\n  if (ref !== null) {\n    var instance = finishedWork.stateNode;\n    var instanceToUse;\n\n    switch (finishedWork.tag) {\n      case HostComponent:\n        instanceToUse = getPublicInstance(instance);\n        break;\n\n      default:\n        instanceToUse = instance;\n    } // Moved outside to ensure DCE works with this flag\n\n    if (typeof ref === 'function') {\n      ref(instanceToUse);\n    } else {\n      {\n        if (!ref.hasOwnProperty('current')) {\n          error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().%s', getComponentName(finishedWork.type), getStackByFiberInDevAndProd(finishedWork));\n        }\n      }\n\n      ref.current = instanceToUse;\n    }\n  }\n}\n\nfunction commitDetachRef(current) {\n  var currentRef = current.ref;\n\n  if (currentRef !== null) {\n    if (typeof currentRef === 'function') {\n      currentRef(null);\n    } else {\n      currentRef.current = null;\n    }\n  }\n} // User-originating errors (lifecycles and refs) should not interrupt\n// deletion, so don't let them throw. Host-originating errors should\n// interrupt deletion, so it's okay\n\n\nfunction commitUnmount(finishedRoot, current, renderPriorityLevel) {\n  onCommitUnmount(current);\n\n  switch (current.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case MemoComponent:\n    case SimpleMemoComponent:\n    case Block:\n      {\n        var updateQueue = current.updateQueue;\n\n        if (updateQueue !== null) {\n          var lastEffect = updateQueue.lastEffect;\n\n          if (lastEffect !== null) {\n            var firstEffect = lastEffect.next;\n\n            {\n              // When the owner fiber is deleted, the destroy function of a passive\n              // effect hook is called during the synchronous commit phase. This is\n              // a concession to implementation complexity. Calling it in the\n              // passive effect phase (like they usually are, when dependencies\n              // change during an update) would require either traversing the\n              // children of the deleted fiber again, or including unmount effects\n              // as part of the fiber effect list.\n              //\n              // Because this is during the sync commit phase, we need to change\n              // the priority.\n              //\n              // TODO: Reconsider this implementation trade off.\n              var priorityLevel = renderPriorityLevel > NormalPriority ? NormalPriority : renderPriorityLevel;\n              runWithPriority$1(priorityLevel, function () {\n                var effect = firstEffect;\n\n                do {\n                  var _destroy = effect.destroy;\n\n                  if (_destroy !== undefined) {\n                    safelyCallDestroy(current, _destroy);\n                  }\n\n                  effect = effect.next;\n                } while (effect !== firstEffect);\n              });\n            }\n          }\n        }\n\n        return;\n      }\n\n    case ClassComponent:\n      {\n        safelyDetachRef(current);\n        var instance = current.stateNode;\n\n        if (typeof instance.componentWillUnmount === 'function') {\n          safelyCallComponentWillUnmount(current, instance);\n        }\n\n        return;\n      }\n\n    case HostComponent:\n      {\n\n        safelyDetachRef(current);\n        return;\n      }\n\n    case HostPortal:\n      {\n        // TODO: this is recursive.\n        // We are also not using this parent because\n        // the portal will get pushed immediately.\n        {\n          unmountHostComponents(finishedRoot, current, renderPriorityLevel);\n        }\n\n        return;\n      }\n\n    case FundamentalComponent:\n      {\n\n        return;\n      }\n\n    case DehydratedFragment:\n      {\n\n        return;\n      }\n\n    case ScopeComponent:\n      {\n\n        return;\n      }\n  }\n}\n\nfunction commitNestedUnmounts(finishedRoot, root, renderPriorityLevel) {\n  // While we're inside a removed host node we don't want to call\n  // removeChild on the inner nodes because they're removed by the top\n  // call anyway. We also want to call componentWillUnmount on all\n  // composites before this host node is removed from the tree. Therefore\n  // we do an inner loop while we're still inside the host node.\n  var node = root;\n\n  while (true) {\n    commitUnmount(finishedRoot, node, renderPriorityLevel); // Visit children because they may contain more composite or host nodes.\n    // Skip portals because commitUnmount() currently visits them recursively.\n\n    if (node.child !== null && ( // If we use mutation we drill down into portals using commitUnmount above.\n    // If we don't use mutation we drill down into portals here instead.\n     node.tag !== HostPortal)) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === root) {\n      return;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === root) {\n        return;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n}\n\nfunction detachFiber(current) {\n  var alternate = current.alternate; // Cut off the return pointers to disconnect it from the tree. Ideally, we\n  // should clear the child pointer of the parent alternate to let this\n  // get GC:ed but we don't know which for sure which parent is the current\n  // one so we'll settle for GC:ing the subtree of this child. This child\n  // itself will be GC:ed when the parent updates the next time.\n\n  current.return = null;\n  current.child = null;\n  current.memoizedState = null;\n  current.updateQueue = null;\n  current.dependencies = null;\n  current.alternate = null;\n  current.firstEffect = null;\n  current.lastEffect = null;\n  current.pendingProps = null;\n  current.memoizedProps = null;\n  current.stateNode = null;\n\n  if (alternate !== null) {\n    detachFiber(alternate);\n  }\n}\n\nfunction getHostParentFiber(fiber) {\n  var parent = fiber.return;\n\n  while (parent !== null) {\n    if (isHostParent(parent)) {\n      return parent;\n    }\n\n    parent = parent.return;\n  }\n\n  {\n    {\n      throw Error( \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction isHostParent(fiber) {\n  return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;\n}\n\nfunction getHostSibling(fiber) {\n  // We're going to search forward into the tree until we find a sibling host\n  // node. Unfortunately, if multiple insertions are done in a row we have to\n  // search past them. This leads to exponential search for the next sibling.\n  // TODO: Find a more efficient way to do this.\n  var node = fiber;\n\n  siblings: while (true) {\n    // If we didn't find anything, let's try the next sibling.\n    while (node.sibling === null) {\n      if (node.return === null || isHostParent(node.return)) {\n        // If we pop out of the root or hit the parent the fiber we are the\n        // last sibling.\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n\n    while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {\n      // If it is not host node and, we might have a host node inside it.\n      // Try to search down until we find one.\n      if (node.effectTag & Placement) {\n        // If we don't have a child, try the siblings instead.\n        continue siblings;\n      } // If we don't have a child, try the siblings instead.\n      // We also skip portals because they are not part of this host tree.\n\n\n      if (node.child === null || node.tag === HostPortal) {\n        continue siblings;\n      } else {\n        node.child.return = node;\n        node = node.child;\n      }\n    } // Check if this host node is stable or about to be placed.\n\n\n    if (!(node.effectTag & Placement)) {\n      // Found it!\n      return node.stateNode;\n    }\n  }\n}\n\nfunction commitPlacement(finishedWork) {\n\n\n  var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.\n\n  var parent;\n  var isContainer;\n  var parentStateNode = parentFiber.stateNode;\n\n  switch (parentFiber.tag) {\n    case HostComponent:\n      parent = parentStateNode;\n      isContainer = false;\n      break;\n\n    case HostRoot:\n      parent = parentStateNode.containerInfo;\n      isContainer = true;\n      break;\n\n    case HostPortal:\n      parent = parentStateNode.containerInfo;\n      isContainer = true;\n      break;\n\n    case FundamentalComponent:\n\n    // eslint-disable-next-line-no-fallthrough\n\n    default:\n      {\n        {\n          throw Error( \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\" );\n        }\n      }\n\n  }\n\n  if (parentFiber.effectTag & ContentReset) {\n    // Reset the text content of the parent before doing any insertions\n    resetTextContent(parent); // Clear ContentReset from the effect tag\n\n    parentFiber.effectTag &= ~ContentReset;\n  }\n\n  var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its\n  // children to find all the terminal nodes.\n\n  if (isContainer) {\n    insertOrAppendPlacementNodeIntoContainer(finishedWork, before, parent);\n  } else {\n    insertOrAppendPlacementNode(finishedWork, before, parent);\n  }\n}\n\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  var isHost = tag === HostComponent || tag === HostText;\n\n  if (isHost || enableFundamentalAPI ) {\n    var stateNode = isHost ? node.stateNode : node.stateNode.instance;\n\n    if (before) {\n      insertInContainerBefore(parent, stateNode, before);\n    } else {\n      appendChildToContainer(parent, stateNode);\n    }\n  } else if (tag === HostPortal) ; else {\n    var child = node.child;\n\n    if (child !== null) {\n      insertOrAppendPlacementNodeIntoContainer(child, before, parent);\n      var sibling = child.sibling;\n\n      while (sibling !== null) {\n        insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);\n        sibling = sibling.sibling;\n      }\n    }\n  }\n}\n\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  var isHost = tag === HostComponent || tag === HostText;\n\n  if (isHost || enableFundamentalAPI ) {\n    var stateNode = isHost ? node.stateNode : node.stateNode.instance;\n\n    if (before) {\n      insertBefore(parent, stateNode, before);\n    } else {\n      appendChild(parent, stateNode);\n    }\n  } else if (tag === HostPortal) ; else {\n    var child = node.child;\n\n    if (child !== null) {\n      insertOrAppendPlacementNode(child, before, parent);\n      var sibling = child.sibling;\n\n      while (sibling !== null) {\n        insertOrAppendPlacementNode(sibling, before, parent);\n        sibling = sibling.sibling;\n      }\n    }\n  }\n}\n\nfunction unmountHostComponents(finishedRoot, current, renderPriorityLevel) {\n  // We only have the top Fiber that was deleted but we need to recurse down its\n  // children to find all the terminal nodes.\n  var node = current; // Each iteration, currentParent is populated with node's host parent if not\n  // currentParentIsValid.\n\n  var currentParentIsValid = false; // Note: these two variables *must* always be updated together.\n\n  var currentParent;\n  var currentParentIsContainer;\n\n  while (true) {\n    if (!currentParentIsValid) {\n      var parent = node.return;\n\n      findParent: while (true) {\n        if (!(parent !== null)) {\n          {\n            throw Error( \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\" );\n          }\n        }\n\n        var parentStateNode = parent.stateNode;\n\n        switch (parent.tag) {\n          case HostComponent:\n            currentParent = parentStateNode;\n            currentParentIsContainer = false;\n            break findParent;\n\n          case HostRoot:\n            currentParent = parentStateNode.containerInfo;\n            currentParentIsContainer = true;\n            break findParent;\n\n          case HostPortal:\n            currentParent = parentStateNode.containerInfo;\n            currentParentIsContainer = true;\n            break findParent;\n\n        }\n\n        parent = parent.return;\n      }\n\n      currentParentIsValid = true;\n    }\n\n    if (node.tag === HostComponent || node.tag === HostText) {\n      commitNestedUnmounts(finishedRoot, node, renderPriorityLevel); // After all the children have unmounted, it is now safe to remove the\n      // node from the tree.\n\n      if (currentParentIsContainer) {\n        removeChildFromContainer(currentParent, node.stateNode);\n      } else {\n        removeChild(currentParent, node.stateNode);\n      } // Don't visit children because we already visited them.\n\n    } else if (node.tag === HostPortal) {\n      if (node.child !== null) {\n        // When we go into a portal, it becomes the parent to remove from.\n        // We will reassign it back when we pop the portal on the way up.\n        currentParent = node.stateNode.containerInfo;\n        currentParentIsContainer = true; // Visit children because portals might contain host components.\n\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n    } else {\n      commitUnmount(finishedRoot, node, renderPriorityLevel); // Visit children because we may find more host components below.\n\n      if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n    }\n\n    if (node === current) {\n      return;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === current) {\n        return;\n      }\n\n      node = node.return;\n\n      if (node.tag === HostPortal) {\n        // When we go out of the portal, we need to restore the parent.\n        // Since we don't keep a stack of them, we will search for it.\n        currentParentIsValid = false;\n      }\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n}\n\nfunction commitDeletion(finishedRoot, current, renderPriorityLevel) {\n  {\n    // Recursively delete all host nodes from the parent.\n    // Detach refs and call componentWillUnmount() on the whole subtree.\n    unmountHostComponents(finishedRoot, current, renderPriorityLevel);\n  }\n\n  detachFiber(current);\n}\n\nfunction commitWork(current, finishedWork) {\n\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case MemoComponent:\n    case SimpleMemoComponent:\n    case Block:\n      {\n        // Layout effects are destroyed during the mutation phase so that all\n        // destroy functions for all fibers are called before any create functions.\n        // This prevents sibling component effects from interfering with each other,\n        // e.g. a destroy function in one component should never override a ref set\n        // by a create function in another component during the same commit.\n        commitHookEffectListUnmount(Layout | HasEffect, finishedWork);\n        return;\n      }\n\n    case ClassComponent:\n      {\n        return;\n      }\n\n    case HostComponent:\n      {\n        var instance = finishedWork.stateNode;\n\n        if (instance != null) {\n          // Commit the work prepared earlier.\n          var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n          // as the newProps. The updatePayload will contain the real change in\n          // this case.\n\n          var oldProps = current !== null ? current.memoizedProps : newProps;\n          var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.\n\n          var updatePayload = finishedWork.updateQueue;\n          finishedWork.updateQueue = null;\n\n          if (updatePayload !== null) {\n            commitUpdate(instance, updatePayload, type, oldProps, newProps);\n          }\n        }\n\n        return;\n      }\n\n    case HostText:\n      {\n        if (!(finishedWork.stateNode !== null)) {\n          {\n            throw Error( \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\" );\n          }\n        }\n\n        var textInstance = finishedWork.stateNode;\n        var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n        // as the newProps. The updatePayload will contain the real change in\n        // this case.\n\n        var oldText = current !== null ? current.memoizedProps : newText;\n        commitTextUpdate(textInstance, oldText, newText);\n        return;\n      }\n\n    case HostRoot:\n      {\n        {\n          var _root = finishedWork.stateNode;\n\n          if (_root.hydrate) {\n            // We've just hydrated. No need to hydrate again.\n            _root.hydrate = false;\n            commitHydratedContainer(_root.containerInfo);\n          }\n        }\n\n        return;\n      }\n\n    case Profiler:\n      {\n        return;\n      }\n\n    case SuspenseComponent:\n      {\n        commitSuspenseComponent(finishedWork);\n        attachSuspenseRetryListeners(finishedWork);\n        return;\n      }\n\n    case SuspenseListComponent:\n      {\n        attachSuspenseRetryListeners(finishedWork);\n        return;\n      }\n\n    case IncompleteClassComponent:\n      {\n        return;\n      }\n  }\n\n  {\n    {\n      throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  }\n}\n\nfunction commitSuspenseComponent(finishedWork) {\n  var newState = finishedWork.memoizedState;\n  var newDidTimeout;\n  var primaryChildParent = finishedWork;\n\n  if (newState === null) {\n    newDidTimeout = false;\n  } else {\n    newDidTimeout = true;\n    primaryChildParent = finishedWork.child;\n    markCommitTimeOfFallback();\n  }\n\n  if ( primaryChildParent !== null) {\n    hideOrUnhideAllChildren(primaryChildParent, newDidTimeout);\n  }\n}\n\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n\n  var newState = finishedWork.memoizedState;\n\n  if (newState === null) {\n    var current = finishedWork.alternate;\n\n    if (current !== null) {\n      var prevState = current.memoizedState;\n\n      if (prevState !== null) {\n        var suspenseInstance = prevState.dehydrated;\n\n        if (suspenseInstance !== null) {\n          commitHydratedSuspenseInstance(suspenseInstance);\n        }\n      }\n    }\n  }\n}\n\nfunction attachSuspenseRetryListeners(finishedWork) {\n  // If this boundary just timed out, then it will have a set of thenables.\n  // For each thenable, attach a listener so that when it resolves, React\n  // attempts to re-render the boundary in the primary (pre-timeout) state.\n  var thenables = finishedWork.updateQueue;\n\n  if (thenables !== null) {\n    finishedWork.updateQueue = null;\n    var retryCache = finishedWork.stateNode;\n\n    if (retryCache === null) {\n      retryCache = finishedWork.stateNode = new PossiblyWeakSet();\n    }\n\n    thenables.forEach(function (thenable) {\n      // Memoize using the boundary fiber to prevent redundant listeners.\n      var retry = resolveRetryThenable.bind(null, finishedWork, thenable);\n\n      if (!retryCache.has(thenable)) {\n        {\n          if (thenable.__reactDoNotTraceInteractions !== true) {\n            retry = tracing.unstable_wrap(retry);\n          }\n        }\n\n        retryCache.add(thenable);\n        thenable.then(retry, retry);\n      }\n    });\n  }\n}\n\nfunction commitResetTextContent(current) {\n\n  resetTextContent(current.stateNode);\n}\n\nvar PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;\n\nfunction createRootErrorUpdate(fiber, errorInfo, expirationTime) {\n  var update = createUpdate(expirationTime, null); // Unmount the root by rendering null.\n\n  update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property\n  // being called \"element\".\n\n  update.payload = {\n    element: null\n  };\n  var error = errorInfo.value;\n\n  update.callback = function () {\n    onUncaughtError(error);\n    logError(fiber, errorInfo);\n  };\n\n  return update;\n}\n\nfunction createClassErrorUpdate(fiber, errorInfo, expirationTime) {\n  var update = createUpdate(expirationTime, null);\n  update.tag = CaptureUpdate;\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n\n  if (typeof getDerivedStateFromError === 'function') {\n    var error$1 = errorInfo.value;\n\n    update.payload = function () {\n      logError(fiber, errorInfo);\n      return getDerivedStateFromError(error$1);\n    };\n  }\n\n  var inst = fiber.stateNode;\n\n  if (inst !== null && typeof inst.componentDidCatch === 'function') {\n    update.callback = function callback() {\n      {\n        markFailedErrorBoundaryForHotReloading(fiber);\n      }\n\n      if (typeof getDerivedStateFromError !== 'function') {\n        // To preserve the preexisting retry behavior of error boundaries,\n        // we keep track of which ones already failed during this batch.\n        // This gets reset before we yield back to the browser.\n        // TODO: Warn in strict mode if getDerivedStateFromError is\n        // not defined.\n        markLegacyErrorBoundaryAsFailed(this); // Only log here if componentDidCatch is the only error boundary method defined\n\n        logError(fiber, errorInfo);\n      }\n\n      var error$1 = errorInfo.value;\n      var stack = errorInfo.stack;\n      this.componentDidCatch(error$1, {\n        componentStack: stack !== null ? stack : ''\n      });\n\n      {\n        if (typeof getDerivedStateFromError !== 'function') {\n          // If componentDidCatch is the only error boundary method defined,\n          // then it needs to call setState to recover from errors.\n          // If no state update is scheduled then the boundary will swallow the error.\n          if (fiber.expirationTime !== Sync) {\n            error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentName(fiber.type) || 'Unknown');\n          }\n        }\n      }\n    };\n  } else {\n    update.callback = function () {\n      markFailedErrorBoundaryForHotReloading(fiber);\n    };\n  }\n\n  return update;\n}\n\nfunction attachPingListener(root, renderExpirationTime, thenable) {\n  // Attach a listener to the promise to \"ping\" the root and retry. But\n  // only if one does not already exist for the current render expiration\n  // time (which acts like a \"thread ID\" here).\n  var pingCache = root.pingCache;\n  var threadIDs;\n\n  if (pingCache === null) {\n    pingCache = root.pingCache = new PossiblyWeakMap$1();\n    threadIDs = new Set();\n    pingCache.set(thenable, threadIDs);\n  } else {\n    threadIDs = pingCache.get(thenable);\n\n    if (threadIDs === undefined) {\n      threadIDs = new Set();\n      pingCache.set(thenable, threadIDs);\n    }\n  }\n\n  if (!threadIDs.has(renderExpirationTime)) {\n    // Memoize using the thread ID to prevent redundant listeners.\n    threadIDs.add(renderExpirationTime);\n    var ping = pingSuspendedRoot.bind(null, root, thenable, renderExpirationTime);\n    thenable.then(ping, ping);\n  }\n}\n\nfunction throwException(root, returnFiber, sourceFiber, value, renderExpirationTime) {\n  // The source fiber did not complete.\n  sourceFiber.effectTag |= Incomplete; // Its effect list is no longer valid.\n\n  sourceFiber.firstEffect = sourceFiber.lastEffect = null;\n\n  if (value !== null && typeof value === 'object' && typeof value.then === 'function') {\n    // This is a thenable.\n    var thenable = value;\n\n    if ((sourceFiber.mode & BlockingMode) === NoMode) {\n      // Reset the memoizedState to what it was before we attempted\n      // to render it.\n      var currentSource = sourceFiber.alternate;\n\n      if (currentSource) {\n        sourceFiber.updateQueue = currentSource.updateQueue;\n        sourceFiber.memoizedState = currentSource.memoizedState;\n        sourceFiber.expirationTime = currentSource.expirationTime;\n      } else {\n        sourceFiber.updateQueue = null;\n        sourceFiber.memoizedState = null;\n      }\n    }\n\n    var hasInvisibleParentBoundary = hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext); // Schedule the nearest Suspense to re-render the timed out view.\n\n    var _workInProgress = returnFiber;\n\n    do {\n      if (_workInProgress.tag === SuspenseComponent && shouldCaptureSuspense(_workInProgress, hasInvisibleParentBoundary)) {\n        // Found the nearest boundary.\n        // Stash the promise on the boundary fiber. If the boundary times out, we'll\n        // attach another listener to flip the boundary back to its normal state.\n        var thenables = _workInProgress.updateQueue;\n\n        if (thenables === null) {\n          var updateQueue = new Set();\n          updateQueue.add(thenable);\n          _workInProgress.updateQueue = updateQueue;\n        } else {\n          thenables.add(thenable);\n        } // If the boundary is outside of blocking mode, we should *not*\n        // suspend the commit. Pretend as if the suspended component rendered\n        // null and keep rendering. In the commit phase, we'll schedule a\n        // subsequent synchronous update to re-render the Suspense.\n        //\n        // Note: It doesn't matter whether the component that suspended was\n        // inside a blocking mode tree. If the Suspense is outside of it, we\n        // should *not* suspend the commit.\n\n\n        if ((_workInProgress.mode & BlockingMode) === NoMode) {\n          _workInProgress.effectTag |= DidCapture; // We're going to commit this fiber even though it didn't complete.\n          // But we shouldn't call any lifecycle methods or callbacks. Remove\n          // all lifecycle effect tags.\n\n          sourceFiber.effectTag &= ~(LifecycleEffectMask | Incomplete);\n\n          if (sourceFiber.tag === ClassComponent) {\n            var currentSourceFiber = sourceFiber.alternate;\n\n            if (currentSourceFiber === null) {\n              // This is a new mount. Change the tag so it's not mistaken for a\n              // completed class component. For example, we should not call\n              // componentWillUnmount if it is deleted.\n              sourceFiber.tag = IncompleteClassComponent;\n            } else {\n              // When we try rendering again, we should not reuse the current fiber,\n              // since it's known to be in an inconsistent state. Use a force update to\n              // prevent a bail out.\n              var update = createUpdate(Sync, null);\n              update.tag = ForceUpdate;\n              enqueueUpdate(sourceFiber, update);\n            }\n          } // The source fiber did not complete. Mark it with Sync priority to\n          // indicate that it still has pending work.\n\n\n          sourceFiber.expirationTime = Sync; // Exit without suspending.\n\n          return;\n        } // Confirmed that the boundary is in a concurrent mode tree. Continue\n        // with the normal suspend path.\n        //\n        // After this we'll use a set of heuristics to determine whether this\n        // render pass will run to completion or restart or \"suspend\" the commit.\n        // The actual logic for this is spread out in different places.\n        //\n        // This first principle is that if we're going to suspend when we complete\n        // a root, then we should also restart if we get an update or ping that\n        // might unsuspend it, and vice versa. The only reason to suspend is\n        // because you think you might want to restart before committing. However,\n        // it doesn't make sense to restart only while in the period we're suspended.\n        //\n        // Restarting too aggressively is also not good because it starves out any\n        // intermediate loading state. So we use heuristics to determine when.\n        // Suspense Heuristics\n        //\n        // If nothing threw a Promise or all the same fallbacks are already showing,\n        // then don't suspend/restart.\n        //\n        // If this is an initial render of a new tree of Suspense boundaries and\n        // those trigger a fallback, then don't suspend/restart. We want to ensure\n        // that we can show the initial loading state as quickly as possible.\n        //\n        // If we hit a \"Delayed\" case, such as when we'd switch from content back into\n        // a fallback, then we should always suspend/restart. SuspenseConfig applies to\n        // this case. If none is defined, JND is used instead.\n        //\n        // If we're already showing a fallback and it gets \"retried\", allowing us to show\n        // another level, but there's still an inner boundary that would show a fallback,\n        // then we suspend/restart for 500ms since the last time we showed a fallback\n        // anywhere in the tree. This effectively throttles progressive loading into a\n        // consistent train of commits. This also gives us an opportunity to restart to\n        // get to the completed state slightly earlier.\n        //\n        // If there's ambiguity due to batching it's resolved in preference of:\n        // 1) \"delayed\", 2) \"initial render\", 3) \"retry\".\n        //\n        // We want to ensure that a \"busy\" state doesn't get force committed. We want to\n        // ensure that new initial loading states can commit as soon as possible.\n\n\n        attachPingListener(root, renderExpirationTime, thenable);\n        _workInProgress.effectTag |= ShouldCapture;\n        _workInProgress.expirationTime = renderExpirationTime;\n        return;\n      } // This boundary already captured during this render. Continue to the next\n      // boundary.\n\n\n      _workInProgress = _workInProgress.return;\n    } while (_workInProgress !== null); // No boundary was found. Fallthrough to error mode.\n    // TODO: Use invariant so the message is stripped in prod?\n\n\n    value = new Error((getComponentName(sourceFiber.type) || 'A React component') + ' suspended while rendering, but no fallback UI was specified.\\n' + '\\n' + 'Add a <Suspense fallback=...> component higher in the tree to ' + 'provide a loading indicator or placeholder to display.' + getStackByFiberInDevAndProd(sourceFiber));\n  } // We didn't find a boundary that could handle this type of exception. Start\n  // over and traverse parent path again, this time treating the exception\n  // as an error.\n\n\n  renderDidError();\n  value = createCapturedValue(value, sourceFiber);\n  var workInProgress = returnFiber;\n\n  do {\n    switch (workInProgress.tag) {\n      case HostRoot:\n        {\n          var _errorInfo = value;\n          workInProgress.effectTag |= ShouldCapture;\n          workInProgress.expirationTime = renderExpirationTime;\n\n          var _update = createRootErrorUpdate(workInProgress, _errorInfo, renderExpirationTime);\n\n          enqueueCapturedUpdate(workInProgress, _update);\n          return;\n        }\n\n      case ClassComponent:\n        // Capture and retry\n        var errorInfo = value;\n        var ctor = workInProgress.type;\n        var instance = workInProgress.stateNode;\n\n        if ((workInProgress.effectTag & DidCapture) === NoEffect && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {\n          workInProgress.effectTag |= ShouldCapture;\n          workInProgress.expirationTime = renderExpirationTime; // Schedule the error boundary to re-render using updated state\n\n          var _update2 = createClassErrorUpdate(workInProgress, errorInfo, renderExpirationTime);\n\n          enqueueCapturedUpdate(workInProgress, _update2);\n          return;\n        }\n\n        break;\n    }\n\n    workInProgress = workInProgress.return;\n  } while (workInProgress !== null);\n}\n\nvar ceil = Math.ceil;\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n    ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,\n    IsSomeRendererActing = ReactSharedInternals.IsSomeRendererActing;\nvar NoContext =\n/*                    */\n0;\nvar BatchedContext =\n/*               */\n1;\nvar EventContext =\n/*                 */\n2;\nvar DiscreteEventContext =\n/*         */\n4;\nvar LegacyUnbatchedContext =\n/*       */\n8;\nvar RenderContext =\n/*                */\n16;\nvar CommitContext =\n/*                */\n32;\nvar RootIncomplete = 0;\nvar RootFatalErrored = 1;\nvar RootErrored = 2;\nvar RootSuspended = 3;\nvar RootSuspendedWithDelay = 4;\nvar RootCompleted = 5;\n// Describes where we are in the React execution stack\nvar executionContext = NoContext; // The root we're working on\n\nvar workInProgressRoot = null; // The fiber we're working on\n\nvar workInProgress = null; // The expiration time we're rendering\n\nvar renderExpirationTime$1 = NoWork; // Whether to root completed, errored, suspended, etc.\n\nvar workInProgressRootExitStatus = RootIncomplete; // A fatal error, if one is thrown\n\nvar workInProgressRootFatalError = null; // Most recent event time among processed updates during this render.\n// This is conceptually a time stamp but expressed in terms of an ExpirationTime\n// because we deal mostly with expiration times in the hot path, so this avoids\n// the conversion happening in the hot path.\n\nvar workInProgressRootLatestProcessedExpirationTime = Sync;\nvar workInProgressRootLatestSuspenseTimeout = Sync;\nvar workInProgressRootCanSuspendUsingConfig = null; // The work left over by components that were visited during this render. Only\n// includes unprocessed updates, not work in bailed out children.\n\nvar workInProgressRootNextUnprocessedUpdateTime = NoWork; // If we're pinged while rendering we don't always restart immediately.\n// This flag determines if it might be worthwhile to restart if an opportunity\n// happens latere.\n\nvar workInProgressRootHasPendingPing = false; // The most recent time we committed a fallback. This lets us ensure a train\n// model where we don't commit new loading states in too quick succession.\n\nvar globalMostRecentFallbackTime = 0;\nvar FALLBACK_THROTTLE_MS = 500;\nvar nextEffect = null;\nvar hasUncaughtError = false;\nvar firstUncaughtError = null;\nvar legacyErrorBoundariesThatAlreadyFailed = null;\nvar rootDoesHavePassiveEffects = false;\nvar rootWithPendingPassiveEffects = null;\nvar pendingPassiveEffectsRenderPriority = NoPriority;\nvar pendingPassiveEffectsExpirationTime = NoWork;\nvar rootsWithPendingDiscreteUpdates = null; // Use these to prevent an infinite loop of nested updates\n\nvar NESTED_UPDATE_LIMIT = 50;\nvar nestedUpdateCount = 0;\nvar rootWithNestedUpdates = null;\nvar NESTED_PASSIVE_UPDATE_LIMIT = 50;\nvar nestedPassiveUpdateCount = 0;\nvar interruptedBy = null; // Marks the need to reschedule pending interactions at these expiration times\n// during the commit phase. This enables them to be traced across components\n// that spawn new work during render. E.g. hidden boundaries, suspended SSR\n// hydration or SuspenseList.\n\nvar spawnedWorkDuringRender = null; // Expiration times are computed by adding to the current time (the start\n// time). However, if two updates are scheduled within the same event, we\n// should treat their start times as simultaneous, even if the actual clock\n// time has advanced between the first and second call.\n// In other words, because expiration times determine how updates are batched,\n// we want all updates of like priority that occur within the same event to\n// receive the same expiration time. Otherwise we get tearing.\n\nvar currentEventTime = NoWork;\nfunction requestCurrentTimeForUpdate() {\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    // We're inside React, so it's fine to read the actual time.\n    return msToExpirationTime(now());\n  } // We're not inside React, so we may be in the middle of a browser event.\n\n\n  if (currentEventTime !== NoWork) {\n    // Use the same start time for all updates until we enter React again.\n    return currentEventTime;\n  } // This is the first update since React yielded. Compute a new start time.\n\n\n  currentEventTime = msToExpirationTime(now());\n  return currentEventTime;\n}\nfunction getCurrentTime() {\n  return msToExpirationTime(now());\n}\nfunction computeExpirationForFiber(currentTime, fiber, suspenseConfig) {\n  var mode = fiber.mode;\n\n  if ((mode & BlockingMode) === NoMode) {\n    return Sync;\n  }\n\n  var priorityLevel = getCurrentPriorityLevel();\n\n  if ((mode & ConcurrentMode) === NoMode) {\n    return priorityLevel === ImmediatePriority ? Sync : Batched;\n  }\n\n  if ((executionContext & RenderContext) !== NoContext) {\n    // Use whatever time we're already rendering\n    // TODO: Should there be a way to opt out, like with `runWithPriority`?\n    return renderExpirationTime$1;\n  }\n\n  var expirationTime;\n\n  if (suspenseConfig !== null) {\n    // Compute an expiration time based on the Suspense timeout.\n    expirationTime = computeSuspenseExpiration(currentTime, suspenseConfig.timeoutMs | 0 || LOW_PRIORITY_EXPIRATION);\n  } else {\n    // Compute an expiration time based on the Scheduler priority.\n    switch (priorityLevel) {\n      case ImmediatePriority:\n        expirationTime = Sync;\n        break;\n\n      case UserBlockingPriority$1:\n        // TODO: Rename this to computeUserBlockingExpiration\n        expirationTime = computeInteractiveExpiration(currentTime);\n        break;\n\n      case NormalPriority:\n      case LowPriority:\n        // TODO: Handle LowPriority\n        // TODO: Rename this to... something better.\n        expirationTime = computeAsyncExpiration(currentTime);\n        break;\n\n      case IdlePriority:\n        expirationTime = Idle;\n        break;\n\n      default:\n        {\n          {\n            throw Error( \"Expected a valid priority level\" );\n          }\n        }\n\n    }\n  } // If we're in the middle of rendering a tree, do not update at the same\n  // expiration time that is already rendering.\n  // TODO: We shouldn't have to do this if the update is on a different root.\n  // Refactor computeExpirationForFiber + scheduleUpdate so we have access to\n  // the root when we check for this condition.\n\n\n  if (workInProgressRoot !== null && expirationTime === renderExpirationTime$1) {\n    // This is a trick to move this update into a separate batch\n    expirationTime -= 1;\n  }\n\n  return expirationTime;\n}\nfunction scheduleUpdateOnFiber(fiber, expirationTime) {\n  checkForNestedUpdates();\n  warnAboutRenderPhaseUpdatesInDEV(fiber);\n  var root = markUpdateTimeFromFiberToRoot(fiber, expirationTime);\n\n  if (root === null) {\n    warnAboutUpdateOnUnmountedFiberInDEV(fiber);\n    return;\n  }\n\n  checkForInterruption(fiber, expirationTime);\n  recordScheduleUpdate(); // TODO: computeExpirationForFiber also reads the priority. Pass the\n  // priority as an argument to that function and this one.\n\n  var priorityLevel = getCurrentPriorityLevel();\n\n  if (expirationTime === Sync) {\n    if ( // Check if we're inside unbatchedUpdates\n    (executionContext & LegacyUnbatchedContext) !== NoContext && // Check if we're not already rendering\n    (executionContext & (RenderContext | CommitContext)) === NoContext) {\n      // Register pending interactions on the root to avoid losing traced interaction data.\n      schedulePendingInteractions(root, expirationTime); // This is a legacy edge case. The initial mount of a ReactDOM.render-ed\n      // root inside of batchedUpdates should be synchronous, but layout updates\n      // should be deferred until the end of the batch.\n\n      performSyncWorkOnRoot(root);\n    } else {\n      ensureRootIsScheduled(root);\n      schedulePendingInteractions(root, expirationTime);\n\n      if (executionContext === NoContext) {\n        // Flush the synchronous work now, unless we're already working or inside\n        // a batch. This is intentionally inside scheduleUpdateOnFiber instead of\n        // scheduleCallbackForFiber to preserve the ability to schedule a callback\n        // without immediately flushing it. We only do this for user-initiated\n        // updates, to preserve historical behavior of legacy mode.\n        flushSyncCallbackQueue();\n      }\n    }\n  } else {\n    ensureRootIsScheduled(root);\n    schedulePendingInteractions(root, expirationTime);\n  }\n\n  if ((executionContext & DiscreteEventContext) !== NoContext && ( // Only updates at user-blocking priority or greater are considered\n  // discrete, even inside a discrete event.\n  priorityLevel === UserBlockingPriority$1 || priorityLevel === ImmediatePriority)) {\n    // This is the result of a discrete event. Track the lowest priority\n    // discrete update per root so we can flush them early, if needed.\n    if (rootsWithPendingDiscreteUpdates === null) {\n      rootsWithPendingDiscreteUpdates = new Map([[root, expirationTime]]);\n    } else {\n      var lastDiscreteTime = rootsWithPendingDiscreteUpdates.get(root);\n\n      if (lastDiscreteTime === undefined || lastDiscreteTime > expirationTime) {\n        rootsWithPendingDiscreteUpdates.set(root, expirationTime);\n      }\n    }\n  }\n}\nvar scheduleWork = scheduleUpdateOnFiber; // This is split into a separate function so we can mark a fiber with pending\n// work without treating it as a typical update that originates from an event;\n// e.g. retrying a Suspense boundary isn't an update, but it does schedule work\n// on a fiber.\n\nfunction markUpdateTimeFromFiberToRoot(fiber, expirationTime) {\n  // Update the source fiber's expiration time\n  if (fiber.expirationTime < expirationTime) {\n    fiber.expirationTime = expirationTime;\n  }\n\n  var alternate = fiber.alternate;\n\n  if (alternate !== null && alternate.expirationTime < expirationTime) {\n    alternate.expirationTime = expirationTime;\n  } // Walk the parent path to the root and update the child expiration time.\n\n\n  var node = fiber.return;\n  var root = null;\n\n  if (node === null && fiber.tag === HostRoot) {\n    root = fiber.stateNode;\n  } else {\n    while (node !== null) {\n      alternate = node.alternate;\n\n      if (node.childExpirationTime < expirationTime) {\n        node.childExpirationTime = expirationTime;\n\n        if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n          alternate.childExpirationTime = expirationTime;\n        }\n      } else if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n        alternate.childExpirationTime = expirationTime;\n      }\n\n      if (node.return === null && node.tag === HostRoot) {\n        root = node.stateNode;\n        break;\n      }\n\n      node = node.return;\n    }\n  }\n\n  if (root !== null) {\n    if (workInProgressRoot === root) {\n      // Received an update to a tree that's in the middle of rendering. Mark\n      // that's unprocessed work on this root.\n      markUnprocessedUpdateTime(expirationTime);\n\n      if (workInProgressRootExitStatus === RootSuspendedWithDelay) {\n        // The root already suspended with a delay, which means this render\n        // definitely won't finish. Since we have a new update, let's mark it as\n        // suspended now, right before marking the incoming update. This has the\n        // effect of interrupting the current render and switching to the update.\n        // TODO: This happens to work when receiving an update during the render\n        // phase, because of the trick inside computeExpirationForFiber to\n        // subtract 1 from `renderExpirationTime` to move it into a\n        // separate bucket. But we should probably model it with an exception,\n        // using the same mechanism we use to force hydration of a subtree.\n        // TODO: This does not account for low pri updates that were already\n        // scheduled before the root started rendering. Need to track the next\n        // pending expiration time (perhaps by backtracking the return path) and\n        // then trigger a restart in the `renderDidSuspendDelayIfPossible` path.\n        markRootSuspendedAtTime(root, renderExpirationTime$1);\n      }\n    } // Mark that the root has a pending update.\n\n\n    markRootUpdatedAtTime(root, expirationTime);\n  }\n\n  return root;\n}\n\nfunction getNextRootExpirationTimeToWorkOn(root) {\n  // Determines the next expiration time that the root should render, taking\n  // into account levels that may be suspended, or levels that may have\n  // received a ping.\n  var lastExpiredTime = root.lastExpiredTime;\n\n  if (lastExpiredTime !== NoWork) {\n    return lastExpiredTime;\n  } // \"Pending\" refers to any update that hasn't committed yet, including if it\n  // suspended. The \"suspended\" range is therefore a subset.\n\n\n  var firstPendingTime = root.firstPendingTime;\n\n  if (!isRootSuspendedAtTime(root, firstPendingTime)) {\n    // The highest priority pending time is not suspended. Let's work on that.\n    return firstPendingTime;\n  } // If the first pending time is suspended, check if there's a lower priority\n  // pending level that we know about. Or check if we received a ping. Work\n  // on whichever is higher priority.\n\n\n  var lastPingedTime = root.lastPingedTime;\n  var nextKnownPendingLevel = root.nextKnownPendingLevel;\n  var nextLevel = lastPingedTime > nextKnownPendingLevel ? lastPingedTime : nextKnownPendingLevel;\n\n  if ( nextLevel <= Idle && firstPendingTime !== nextLevel) {\n    // Don't work on Idle/Never priority unless everything else is committed.\n    return NoWork;\n  }\n\n  return nextLevel;\n} // Use this function to schedule a task for a root. There's only one task per\n// root; if a task was already scheduled, we'll check to make sure the\n// expiration time of the existing task is the same as the expiration time of\n// the next level that the root has work on. This function is called on every\n// update, and right before exiting a task.\n\n\nfunction ensureRootIsScheduled(root) {\n  var lastExpiredTime = root.lastExpiredTime;\n\n  if (lastExpiredTime !== NoWork) {\n    // Special case: Expired work should flush synchronously.\n    root.callbackExpirationTime = Sync;\n    root.callbackPriority = ImmediatePriority;\n    root.callbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n    return;\n  }\n\n  var expirationTime = getNextRootExpirationTimeToWorkOn(root);\n  var existingCallbackNode = root.callbackNode;\n\n  if (expirationTime === NoWork) {\n    // There's nothing to work on.\n    if (existingCallbackNode !== null) {\n      root.callbackNode = null;\n      root.callbackExpirationTime = NoWork;\n      root.callbackPriority = NoPriority;\n    }\n\n    return;\n  } // TODO: If this is an update, we already read the current time. Pass the\n  // time as an argument.\n\n\n  var currentTime = requestCurrentTimeForUpdate();\n  var priorityLevel = inferPriorityFromExpirationTime(currentTime, expirationTime); // If there's an existing render task, confirm it has the correct priority and\n  // expiration time. Otherwise, we'll cancel it and schedule a new one.\n\n  if (existingCallbackNode !== null) {\n    var existingCallbackPriority = root.callbackPriority;\n    var existingCallbackExpirationTime = root.callbackExpirationTime;\n\n    if ( // Callback must have the exact same expiration time.\n    existingCallbackExpirationTime === expirationTime && // Callback must have greater or equal priority.\n    existingCallbackPriority >= priorityLevel) {\n      // Existing callback is sufficient.\n      return;\n    } // Need to schedule a new task.\n    // TODO: Instead of scheduling a new task, we should be able to change the\n    // priority of the existing one.\n\n\n    cancelCallback(existingCallbackNode);\n  }\n\n  root.callbackExpirationTime = expirationTime;\n  root.callbackPriority = priorityLevel;\n  var callbackNode;\n\n  if (expirationTime === Sync) {\n    // Sync React callbacks are scheduled on a special internal queue\n    callbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n  } else {\n    callbackNode = scheduleCallback(priorityLevel, performConcurrentWorkOnRoot.bind(null, root), // Compute a task timeout based on the expiration time. This also affects\n    // ordering because tasks are processed in timeout order.\n    {\n      timeout: expirationTimeToMs(expirationTime) - now()\n    });\n  }\n\n  root.callbackNode = callbackNode;\n} // This is the entry point for every concurrent task, i.e. anything that\n// goes through Scheduler.\n\n\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n  // Since we know we're in a React event, we can clear the current\n  // event time. The next update will compute a new event time.\n  currentEventTime = NoWork;\n\n  if (didTimeout) {\n    // The render task took too long to complete. Mark the current time as\n    // expired to synchronously render all expired work in a single batch.\n    var currentTime = requestCurrentTimeForUpdate();\n    markRootExpiredAtTime(root, currentTime); // This will schedule a synchronous callback.\n\n    ensureRootIsScheduled(root);\n    return null;\n  } // Determine the next expiration time to work on, using the fields stored\n  // on the root.\n\n\n  var expirationTime = getNextRootExpirationTimeToWorkOn(root);\n\n  if (expirationTime !== NoWork) {\n    var originalCallbackNode = root.callbackNode;\n\n    if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n      {\n        throw Error( \"Should not already be working.\" );\n      }\n    }\n\n    flushPassiveEffects(); // If the root or expiration time have changed, throw out the existing stack\n    // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n    if (root !== workInProgressRoot || expirationTime !== renderExpirationTime$1) {\n      prepareFreshStack(root, expirationTime);\n      startWorkOnPendingInteractions(root, expirationTime);\n    } // If we have a work-in-progress fiber, it means there's still work to do\n    // in this root.\n\n\n    if (workInProgress !== null) {\n      var prevExecutionContext = executionContext;\n      executionContext |= RenderContext;\n      var prevDispatcher = pushDispatcher();\n      var prevInteractions = pushInteractions(root);\n      startWorkLoopTimer(workInProgress);\n\n      do {\n        try {\n          workLoopConcurrent();\n          break;\n        } catch (thrownValue) {\n          handleError(root, thrownValue);\n        }\n      } while (true);\n\n      resetContextDependencies();\n      executionContext = prevExecutionContext;\n      popDispatcher(prevDispatcher);\n\n      {\n        popInteractions(prevInteractions);\n      }\n\n      if (workInProgressRootExitStatus === RootFatalErrored) {\n        var fatalError = workInProgressRootFatalError;\n        stopInterruptedWorkLoopTimer();\n        prepareFreshStack(root, expirationTime);\n        markRootSuspendedAtTime(root, expirationTime);\n        ensureRootIsScheduled(root);\n        throw fatalError;\n      }\n\n      if (workInProgress !== null) {\n        // There's still work left over. Exit without committing.\n        stopInterruptedWorkLoopTimer();\n      } else {\n        // We now have a consistent tree. The next step is either to commit it,\n        // or, if something suspended, wait to commit it after a timeout.\n        stopFinishedWorkLoopTimer();\n        var finishedWork = root.finishedWork = root.current.alternate;\n        root.finishedExpirationTime = expirationTime;\n        finishConcurrentRender(root, finishedWork, workInProgressRootExitStatus, expirationTime);\n      }\n\n      ensureRootIsScheduled(root);\n\n      if (root.callbackNode === originalCallbackNode) {\n        // The task node scheduled for this root is the same one that's\n        // currently executed. Need to return a continuation.\n        return performConcurrentWorkOnRoot.bind(null, root);\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction finishConcurrentRender(root, finishedWork, exitStatus, expirationTime) {\n  // Set this to null to indicate there's no in-progress render.\n  workInProgressRoot = null;\n\n  switch (exitStatus) {\n    case RootIncomplete:\n    case RootFatalErrored:\n      {\n        {\n          {\n            throw Error( \"Root did not complete. This is a bug in React.\" );\n          }\n        }\n      }\n    // Flow knows about invariant, so it complains if I add a break\n    // statement, but eslint doesn't know about invariant, so it complains\n    // if I do. eslint-disable-next-line no-fallthrough\n\n    case RootErrored:\n      {\n        // If this was an async render, the error may have happened due to\n        // a mutation in a concurrent event. Try rendering one more time,\n        // synchronously, to see if the error goes away. If there are\n        // lower priority updates, let's include those, too, in case they\n        // fix the inconsistency. Render at Idle to include all updates.\n        // If it was Idle or Never or some not-yet-invented time, render\n        // at that time.\n        markRootExpiredAtTime(root, expirationTime > Idle ? Idle : expirationTime); // We assume that this second render pass will be synchronous\n        // and therefore not hit this path again.\n\n        break;\n      }\n\n    case RootSuspended:\n      {\n        markRootSuspendedAtTime(root, expirationTime);\n        var lastSuspendedTime = root.lastSuspendedTime;\n\n        if (expirationTime === lastSuspendedTime) {\n          root.nextKnownPendingLevel = getRemainingExpirationTime(finishedWork);\n        } // We have an acceptable loading state. We need to figure out if we\n        // should immediately commit it or wait a bit.\n        // If we have processed new updates during this render, we may now\n        // have a new loading state ready. We want to ensure that we commit\n        // that as soon as possible.\n\n\n        var hasNotProcessedNewUpdates = workInProgressRootLatestProcessedExpirationTime === Sync;\n\n        if (hasNotProcessedNewUpdates && // do not delay if we're inside an act() scope\n        !( IsThisRendererActing.current)) {\n          // If we have not processed any new updates during this pass, then\n          // this is either a retry of an existing fallback state or a\n          // hidden tree. Hidden trees shouldn't be batched with other work\n          // and after that's fixed it can only be a retry. We're going to\n          // throttle committing retries so that we don't show too many\n          // loading states too quickly.\n          var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.\n\n          if (msUntilTimeout > 10) {\n            if (workInProgressRootHasPendingPing) {\n              var lastPingedTime = root.lastPingedTime;\n\n              if (lastPingedTime === NoWork || lastPingedTime >= expirationTime) {\n                // This render was pinged but we didn't get to restart\n                // earlier so try restarting now instead.\n                root.lastPingedTime = expirationTime;\n                prepareFreshStack(root, expirationTime);\n                break;\n              }\n            }\n\n            var nextTime = getNextRootExpirationTimeToWorkOn(root);\n\n            if (nextTime !== NoWork && nextTime !== expirationTime) {\n              // There's additional work on this root.\n              break;\n            }\n\n            if (lastSuspendedTime !== NoWork && lastSuspendedTime !== expirationTime) {\n              // We should prefer to render the fallback of at the last\n              // suspended level. Ping the last suspended level to try\n              // rendering it again.\n              root.lastPingedTime = lastSuspendedTime;\n              break;\n            } // The render is suspended, it hasn't timed out, and there's no\n            // lower priority work to do. Instead of committing the fallback\n            // immediately, wait for more data to arrive.\n\n\n            root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), msUntilTimeout);\n            break;\n          }\n        } // The work expired. Commit immediately.\n\n\n        commitRoot(root);\n        break;\n      }\n\n    case RootSuspendedWithDelay:\n      {\n        markRootSuspendedAtTime(root, expirationTime);\n        var _lastSuspendedTime = root.lastSuspendedTime;\n\n        if (expirationTime === _lastSuspendedTime) {\n          root.nextKnownPendingLevel = getRemainingExpirationTime(finishedWork);\n        }\n\n        if ( // do not delay if we're inside an act() scope\n        !( IsThisRendererActing.current)) {\n          // We're suspended in a state that should be avoided. We'll try to\n          // avoid committing it for as long as the timeouts let us.\n          if (workInProgressRootHasPendingPing) {\n            var _lastPingedTime = root.lastPingedTime;\n\n            if (_lastPingedTime === NoWork || _lastPingedTime >= expirationTime) {\n              // This render was pinged but we didn't get to restart earlier\n              // so try restarting now instead.\n              root.lastPingedTime = expirationTime;\n              prepareFreshStack(root, expirationTime);\n              break;\n            }\n          }\n\n          var _nextTime = getNextRootExpirationTimeToWorkOn(root);\n\n          if (_nextTime !== NoWork && _nextTime !== expirationTime) {\n            // There's additional work on this root.\n            break;\n          }\n\n          if (_lastSuspendedTime !== NoWork && _lastSuspendedTime !== expirationTime) {\n            // We should prefer to render the fallback of at the last\n            // suspended level. Ping the last suspended level to try\n            // rendering it again.\n            root.lastPingedTime = _lastSuspendedTime;\n            break;\n          }\n\n          var _msUntilTimeout;\n\n          if (workInProgressRootLatestSuspenseTimeout !== Sync) {\n            // We have processed a suspense config whose expiration time we\n            // can use as the timeout.\n            _msUntilTimeout = expirationTimeToMs(workInProgressRootLatestSuspenseTimeout) - now();\n          } else if (workInProgressRootLatestProcessedExpirationTime === Sync) {\n            // This should never normally happen because only new updates\n            // cause delayed states, so we should have processed something.\n            // However, this could also happen in an offscreen tree.\n            _msUntilTimeout = 0;\n          } else {\n            // If we don't have a suspense config, we're going to use a\n            // heuristic to determine how long we can suspend.\n            var eventTimeMs = inferTimeFromExpirationTime(workInProgressRootLatestProcessedExpirationTime);\n            var currentTimeMs = now();\n            var timeUntilExpirationMs = expirationTimeToMs(expirationTime) - currentTimeMs;\n            var timeElapsed = currentTimeMs - eventTimeMs;\n\n            if (timeElapsed < 0) {\n              // We get this wrong some time since we estimate the time.\n              timeElapsed = 0;\n            }\n\n            _msUntilTimeout = jnd(timeElapsed) - timeElapsed; // Clamp the timeout to the expiration time. TODO: Once the\n            // event time is exact instead of inferred from expiration time\n            // we don't need this.\n\n            if (timeUntilExpirationMs < _msUntilTimeout) {\n              _msUntilTimeout = timeUntilExpirationMs;\n            }\n          } // Don't bother with a very short suspense time.\n\n\n          if (_msUntilTimeout > 10) {\n            // The render is suspended, it hasn't timed out, and there's no\n            // lower priority work to do. Instead of committing the fallback\n            // immediately, wait for more data to arrive.\n            root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout);\n            break;\n          }\n        } // The work expired. Commit immediately.\n\n\n        commitRoot(root);\n        break;\n      }\n\n    case RootCompleted:\n      {\n        // The work completed. Ready to commit.\n        if ( // do not delay if we're inside an act() scope\n        !( IsThisRendererActing.current) && workInProgressRootLatestProcessedExpirationTime !== Sync && workInProgressRootCanSuspendUsingConfig !== null) {\n          // If we have exceeded the minimum loading delay, which probably\n          // means we have shown a spinner already, we might have to suspend\n          // a bit longer to ensure that the spinner is shown for\n          // enough time.\n          var _msUntilTimeout2 = computeMsUntilSuspenseLoadingDelay(workInProgressRootLatestProcessedExpirationTime, expirationTime, workInProgressRootCanSuspendUsingConfig);\n\n          if (_msUntilTimeout2 > 10) {\n            markRootSuspendedAtTime(root, expirationTime);\n            root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout2);\n            break;\n          }\n        }\n\n        commitRoot(root);\n        break;\n      }\n\n    default:\n      {\n        {\n          {\n            throw Error( \"Unknown root exit status.\" );\n          }\n        }\n      }\n  }\n} // This is the entry point for synchronous tasks that don't go\n// through Scheduler\n\n\nfunction performSyncWorkOnRoot(root) {\n  // Check if there's expired work on this root. Otherwise, render at Sync.\n  var lastExpiredTime = root.lastExpiredTime;\n  var expirationTime = lastExpiredTime !== NoWork ? lastExpiredTime : Sync;\n\n  if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n    {\n      throw Error( \"Should not already be working.\" );\n    }\n  }\n\n  flushPassiveEffects(); // If the root or expiration time have changed, throw out the existing stack\n  // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n  if (root !== workInProgressRoot || expirationTime !== renderExpirationTime$1) {\n    prepareFreshStack(root, expirationTime);\n    startWorkOnPendingInteractions(root, expirationTime);\n  } // If we have a work-in-progress fiber, it means there's still work to do\n  // in this root.\n\n\n  if (workInProgress !== null) {\n    var prevExecutionContext = executionContext;\n    executionContext |= RenderContext;\n    var prevDispatcher = pushDispatcher();\n    var prevInteractions = pushInteractions(root);\n    startWorkLoopTimer(workInProgress);\n\n    do {\n      try {\n        workLoopSync();\n        break;\n      } catch (thrownValue) {\n        handleError(root, thrownValue);\n      }\n    } while (true);\n\n    resetContextDependencies();\n    executionContext = prevExecutionContext;\n    popDispatcher(prevDispatcher);\n\n    {\n      popInteractions(prevInteractions);\n    }\n\n    if (workInProgressRootExitStatus === RootFatalErrored) {\n      var fatalError = workInProgressRootFatalError;\n      stopInterruptedWorkLoopTimer();\n      prepareFreshStack(root, expirationTime);\n      markRootSuspendedAtTime(root, expirationTime);\n      ensureRootIsScheduled(root);\n      throw fatalError;\n    }\n\n    if (workInProgress !== null) {\n      // This is a sync render, so we should have finished the whole tree.\n      {\n        {\n          throw Error( \"Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.\" );\n        }\n      }\n    } else {\n      // We now have a consistent tree. Because this is a sync render, we\n      // will commit it even if something suspended.\n      stopFinishedWorkLoopTimer();\n      root.finishedWork = root.current.alternate;\n      root.finishedExpirationTime = expirationTime;\n      finishSyncRender(root);\n    } // Before exiting, make sure there's a callback scheduled for the next\n    // pending level.\n\n\n    ensureRootIsScheduled(root);\n  }\n\n  return null;\n}\n\nfunction finishSyncRender(root) {\n  // Set this to null to indicate there's no in-progress render.\n  workInProgressRoot = null;\n  commitRoot(root);\n}\nfunction flushDiscreteUpdates() {\n  // TODO: Should be able to flush inside batchedUpdates, but not inside `act`.\n  // However, `act` uses `batchedUpdates`, so there's no way to distinguish\n  // those two cases. Need to fix this before exposing flushDiscreteUpdates\n  // as a public API.\n  if ((executionContext & (BatchedContext | RenderContext | CommitContext)) !== NoContext) {\n    {\n      if ((executionContext & RenderContext) !== NoContext) {\n        error('unstable_flushDiscreteUpdates: Cannot flush updates when React is ' + 'already rendering.');\n      }\n    } // We're already rendering, so we can't synchronously flush pending work.\n    // This is probably a nested event dispatch triggered by a lifecycle/effect,\n    // like `el.focus()`. Exit.\n\n\n    return;\n  }\n\n  flushPendingDiscreteUpdates(); // If the discrete updates scheduled passive effects, flush them now so that\n  // they fire before the next serial event.\n\n  flushPassiveEffects();\n}\nfunction syncUpdates(fn, a, b, c) {\n  return runWithPriority$1(ImmediatePriority, fn.bind(null, a, b, c));\n}\n\nfunction flushPendingDiscreteUpdates() {\n  if (rootsWithPendingDiscreteUpdates !== null) {\n    // For each root with pending discrete updates, schedule a callback to\n    // immediately flush them.\n    var roots = rootsWithPendingDiscreteUpdates;\n    rootsWithPendingDiscreteUpdates = null;\n    roots.forEach(function (expirationTime, root) {\n      markRootExpiredAtTime(root, expirationTime);\n      ensureRootIsScheduled(root);\n    }); // Now flush the immediate queue.\n\n    flushSyncCallbackQueue();\n  }\n}\n\nfunction batchedUpdates$1(fn, a) {\n  var prevExecutionContext = executionContext;\n  executionContext |= BatchedContext;\n\n  try {\n    return fn(a);\n  } finally {\n    executionContext = prevExecutionContext;\n\n    if (executionContext === NoContext) {\n      // Flush the immediate callbacks that were scheduled during this batch\n      flushSyncCallbackQueue();\n    }\n  }\n}\nfunction batchedEventUpdates$1(fn, a) {\n  var prevExecutionContext = executionContext;\n  executionContext |= EventContext;\n\n  try {\n    return fn(a);\n  } finally {\n    executionContext = prevExecutionContext;\n\n    if (executionContext === NoContext) {\n      // Flush the immediate callbacks that were scheduled during this batch\n      flushSyncCallbackQueue();\n    }\n  }\n}\nfunction discreteUpdates$1(fn, a, b, c, d) {\n  var prevExecutionContext = executionContext;\n  executionContext |= DiscreteEventContext;\n\n  try {\n    // Should this\n    return runWithPriority$1(UserBlockingPriority$1, fn.bind(null, a, b, c, d));\n  } finally {\n    executionContext = prevExecutionContext;\n\n    if (executionContext === NoContext) {\n      // Flush the immediate callbacks that were scheduled during this batch\n      flushSyncCallbackQueue();\n    }\n  }\n}\nfunction unbatchedUpdates(fn, a) {\n  var prevExecutionContext = executionContext;\n  executionContext &= ~BatchedContext;\n  executionContext |= LegacyUnbatchedContext;\n\n  try {\n    return fn(a);\n  } finally {\n    executionContext = prevExecutionContext;\n\n    if (executionContext === NoContext) {\n      // Flush the immediate callbacks that were scheduled during this batch\n      flushSyncCallbackQueue();\n    }\n  }\n}\nfunction flushSync(fn, a) {\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    {\n      {\n        throw Error( \"flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.\" );\n      }\n    }\n  }\n\n  var prevExecutionContext = executionContext;\n  executionContext |= BatchedContext;\n\n  try {\n    return runWithPriority$1(ImmediatePriority, fn.bind(null, a));\n  } finally {\n    executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.\n    // Note that this will happen even if batchedUpdates is higher up\n    // the stack.\n\n    flushSyncCallbackQueue();\n  }\n}\n\nfunction prepareFreshStack(root, expirationTime) {\n  root.finishedWork = null;\n  root.finishedExpirationTime = NoWork;\n  var timeoutHandle = root.timeoutHandle;\n\n  if (timeoutHandle !== noTimeout) {\n    // The root previous suspended and scheduled a timeout to commit a fallback\n    // state. Now that we have additional work, cancel the timeout.\n    root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\n\n    cancelTimeout(timeoutHandle);\n  }\n\n  if (workInProgress !== null) {\n    var interruptedWork = workInProgress.return;\n\n    while (interruptedWork !== null) {\n      unwindInterruptedWork(interruptedWork);\n      interruptedWork = interruptedWork.return;\n    }\n  }\n\n  workInProgressRoot = root;\n  workInProgress = createWorkInProgress(root.current, null);\n  renderExpirationTime$1 = expirationTime;\n  workInProgressRootExitStatus = RootIncomplete;\n  workInProgressRootFatalError = null;\n  workInProgressRootLatestProcessedExpirationTime = Sync;\n  workInProgressRootLatestSuspenseTimeout = Sync;\n  workInProgressRootCanSuspendUsingConfig = null;\n  workInProgressRootNextUnprocessedUpdateTime = NoWork;\n  workInProgressRootHasPendingPing = false;\n\n  {\n    spawnedWorkDuringRender = null;\n  }\n\n  {\n    ReactStrictModeWarnings.discardPendingWarnings();\n  }\n}\n\nfunction handleError(root, thrownValue) {\n  do {\n    try {\n      // Reset module-level state that was set during the render phase.\n      resetContextDependencies();\n      resetHooksAfterThrow();\n      resetCurrentFiber();\n\n      if (workInProgress === null || workInProgress.return === null) {\n        // Expected to be working on a non-root fiber. This is a fatal error\n        // because there's no ancestor that can handle it; the root is\n        // supposed to capture all errors that weren't caught by an error\n        // boundary.\n        workInProgressRootExitStatus = RootFatalErrored;\n        workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next\n        // sibling, or the parent if there are no siblings. But since the root\n        // has no siblings nor a parent, we set it to null. Usually this is\n        // handled by `completeUnitOfWork` or `unwindWork`, but since we're\n        // interntionally not calling those, we need set it here.\n        // TODO: Consider calling `unwindWork` to pop the contexts.\n\n        workInProgress = null;\n        return null;\n      }\n\n      if (enableProfilerTimer && workInProgress.mode & ProfileMode) {\n        // Record the time spent rendering before an error was thrown. This\n        // avoids inaccurate Profiler durations in the case of a\n        // suspended render.\n        stopProfilerTimerIfRunningAndRecordDelta(workInProgress, true);\n      }\n\n      throwException(root, workInProgress.return, workInProgress, thrownValue, renderExpirationTime$1);\n      workInProgress = completeUnitOfWork(workInProgress);\n    } catch (yetAnotherThrownValue) {\n      // Something in the return path also threw.\n      thrownValue = yetAnotherThrownValue;\n      continue;\n    } // Return to the normal work loop.\n\n\n    return;\n  } while (true);\n}\n\nfunction pushDispatcher(root) {\n  var prevDispatcher = ReactCurrentDispatcher$1.current;\n  ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n  if (prevDispatcher === null) {\n    // The React isomorphic package does not include a default dispatcher.\n    // Instead the first renderer will lazily attach one, in order to give\n    // nicer error messages.\n    return ContextOnlyDispatcher;\n  } else {\n    return prevDispatcher;\n  }\n}\n\nfunction popDispatcher(prevDispatcher) {\n  ReactCurrentDispatcher$1.current = prevDispatcher;\n}\n\nfunction pushInteractions(root) {\n  {\n    var prevInteractions = tracing.__interactionsRef.current;\n    tracing.__interactionsRef.current = root.memoizedInteractions;\n    return prevInteractions;\n  }\n}\n\nfunction popInteractions(prevInteractions) {\n  {\n    tracing.__interactionsRef.current = prevInteractions;\n  }\n}\n\nfunction markCommitTimeOfFallback() {\n  globalMostRecentFallbackTime = now();\n}\nfunction markRenderEventTimeAndConfig(expirationTime, suspenseConfig) {\n  if (expirationTime < workInProgressRootLatestProcessedExpirationTime && expirationTime > Idle) {\n    workInProgressRootLatestProcessedExpirationTime = expirationTime;\n  }\n\n  if (suspenseConfig !== null) {\n    if (expirationTime < workInProgressRootLatestSuspenseTimeout && expirationTime > Idle) {\n      workInProgressRootLatestSuspenseTimeout = expirationTime; // Most of the time we only have one config and getting wrong is not bad.\n\n      workInProgressRootCanSuspendUsingConfig = suspenseConfig;\n    }\n  }\n}\nfunction markUnprocessedUpdateTime(expirationTime) {\n  if (expirationTime > workInProgressRootNextUnprocessedUpdateTime) {\n    workInProgressRootNextUnprocessedUpdateTime = expirationTime;\n  }\n}\nfunction renderDidSuspend() {\n  if (workInProgressRootExitStatus === RootIncomplete) {\n    workInProgressRootExitStatus = RootSuspended;\n  }\n}\nfunction renderDidSuspendDelayIfPossible() {\n  if (workInProgressRootExitStatus === RootIncomplete || workInProgressRootExitStatus === RootSuspended) {\n    workInProgressRootExitStatus = RootSuspendedWithDelay;\n  } // Check if there's a lower priority update somewhere else in the tree.\n\n\n  if (workInProgressRootNextUnprocessedUpdateTime !== NoWork && workInProgressRoot !== null) {\n    // Mark the current render as suspended, and then mark that there's a\n    // pending update.\n    // TODO: This should immediately interrupt the current render, instead\n    // of waiting until the next time we yield.\n    markRootSuspendedAtTime(workInProgressRoot, renderExpirationTime$1);\n    markRootUpdatedAtTime(workInProgressRoot, workInProgressRootNextUnprocessedUpdateTime);\n  }\n}\nfunction renderDidError() {\n  if (workInProgressRootExitStatus !== RootCompleted) {\n    workInProgressRootExitStatus = RootErrored;\n  }\n} // Called during render to determine if anything has suspended.\n// Returns false if we're not sure.\n\nfunction renderHasNotSuspendedYet() {\n  // If something errored or completed, we can't really be sure,\n  // so those are false.\n  return workInProgressRootExitStatus === RootIncomplete;\n}\n\nfunction inferTimeFromExpirationTime(expirationTime) {\n  // We don't know exactly when the update was scheduled, but we can infer an\n  // approximate start time from the expiration time.\n  var earliestExpirationTimeMs = expirationTimeToMs(expirationTime);\n  return earliestExpirationTimeMs - LOW_PRIORITY_EXPIRATION;\n}\n\nfunction inferTimeFromExpirationTimeWithSuspenseConfig(expirationTime, suspenseConfig) {\n  // We don't know exactly when the update was scheduled, but we can infer an\n  // approximate start time from the expiration time by subtracting the timeout\n  // that was added to the event time.\n  var earliestExpirationTimeMs = expirationTimeToMs(expirationTime);\n  return earliestExpirationTimeMs - (suspenseConfig.timeoutMs | 0 || LOW_PRIORITY_EXPIRATION);\n} // The work loop is an extremely hot path. Tell Closure not to inline it.\n\n/** @noinline */\n\n\nfunction workLoopSync() {\n  // Already timed out, so perform work without checking if we need to yield.\n  while (workInProgress !== null) {\n    workInProgress = performUnitOfWork(workInProgress);\n  }\n}\n/** @noinline */\n\n\nfunction workLoopConcurrent() {\n  // Perform work until Scheduler asks us to yield\n  while (workInProgress !== null && !shouldYield()) {\n    workInProgress = performUnitOfWork(workInProgress);\n  }\n}\n\nfunction performUnitOfWork(unitOfWork) {\n  // The current, flushed, state of this fiber is the alternate. Ideally\n  // nothing should rely on this, but relying on it here means that we don't\n  // need an additional field on the work in progress.\n  var current = unitOfWork.alternate;\n  startWorkTimer(unitOfWork);\n  setCurrentFiber(unitOfWork);\n  var next;\n\n  if ( (unitOfWork.mode & ProfileMode) !== NoMode) {\n    startProfilerTimer(unitOfWork);\n    next = beginWork$1(current, unitOfWork, renderExpirationTime$1);\n    stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);\n  } else {\n    next = beginWork$1(current, unitOfWork, renderExpirationTime$1);\n  }\n\n  resetCurrentFiber();\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n\n  if (next === null) {\n    // If this doesn't spawn new work, complete the current work.\n    next = completeUnitOfWork(unitOfWork);\n  }\n\n  ReactCurrentOwner$2.current = null;\n  return next;\n}\n\nfunction completeUnitOfWork(unitOfWork) {\n  // Attempt to complete the current unit of work, then move to the next\n  // sibling. If there are no more siblings, return to the parent fiber.\n  workInProgress = unitOfWork;\n\n  do {\n    // The current, flushed, state of this fiber is the alternate. Ideally\n    // nothing should rely on this, but relying on it here means that we don't\n    // need an additional field on the work in progress.\n    var current = workInProgress.alternate;\n    var returnFiber = workInProgress.return; // Check if the work completed or if something threw.\n\n    if ((workInProgress.effectTag & Incomplete) === NoEffect) {\n      setCurrentFiber(workInProgress);\n      var next = void 0;\n\n      if ( (workInProgress.mode & ProfileMode) === NoMode) {\n        next = completeWork(current, workInProgress, renderExpirationTime$1);\n      } else {\n        startProfilerTimer(workInProgress);\n        next = completeWork(current, workInProgress, renderExpirationTime$1); // Update render duration assuming we didn't error.\n\n        stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false);\n      }\n\n      stopWorkTimer(workInProgress);\n      resetCurrentFiber();\n      resetChildExpirationTime(workInProgress);\n\n      if (next !== null) {\n        // Completing this fiber spawned new work. Work on that next.\n        return next;\n      }\n\n      if (returnFiber !== null && // Do not append effects to parents if a sibling failed to complete\n      (returnFiber.effectTag & Incomplete) === NoEffect) {\n        // Append all the effects of the subtree and this fiber onto the effect\n        // list of the parent. The completion order of the children affects the\n        // side-effect order.\n        if (returnFiber.firstEffect === null) {\n          returnFiber.firstEffect = workInProgress.firstEffect;\n        }\n\n        if (workInProgress.lastEffect !== null) {\n          if (returnFiber.lastEffect !== null) {\n            returnFiber.lastEffect.nextEffect = workInProgress.firstEffect;\n          }\n\n          returnFiber.lastEffect = workInProgress.lastEffect;\n        } // If this fiber had side-effects, we append it AFTER the children's\n        // side-effects. We can perform certain side-effects earlier if needed,\n        // by doing multiple passes over the effect list. We don't want to\n        // schedule our own side-effect on our own list because if end up\n        // reusing children we'll schedule this effect onto itself since we're\n        // at the end.\n\n\n        var effectTag = workInProgress.effectTag; // Skip both NoWork and PerformedWork tags when creating the effect\n        // list. PerformedWork effect is read by React DevTools but shouldn't be\n        // committed.\n\n        if (effectTag > PerformedWork) {\n          if (returnFiber.lastEffect !== null) {\n            returnFiber.lastEffect.nextEffect = workInProgress;\n          } else {\n            returnFiber.firstEffect = workInProgress;\n          }\n\n          returnFiber.lastEffect = workInProgress;\n        }\n      }\n    } else {\n      // This fiber did not complete because something threw. Pop values off\n      // the stack without entering the complete phase. If this is a boundary,\n      // capture values if possible.\n      var _next = unwindWork(workInProgress); // Because this fiber did not complete, don't reset its expiration time.\n\n\n      if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n        // Record the render duration for the fiber that errored.\n        stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false); // Include the time spent working on failed children before continuing.\n\n        var actualDuration = workInProgress.actualDuration;\n        var child = workInProgress.child;\n\n        while (child !== null) {\n          actualDuration += child.actualDuration;\n          child = child.sibling;\n        }\n\n        workInProgress.actualDuration = actualDuration;\n      }\n\n      if (_next !== null) {\n        // If completing this work spawned new work, do that next. We'll come\n        // back here again.\n        // Since we're restarting, remove anything that is not a host effect\n        // from the effect tag.\n        // TODO: The name stopFailedWorkTimer is misleading because Suspense\n        // also captures and restarts.\n        stopFailedWorkTimer(workInProgress);\n        _next.effectTag &= HostEffectMask;\n        return _next;\n      }\n\n      stopWorkTimer(workInProgress);\n\n      if (returnFiber !== null) {\n        // Mark the parent fiber as incomplete and clear its effect list.\n        returnFiber.firstEffect = returnFiber.lastEffect = null;\n        returnFiber.effectTag |= Incomplete;\n      }\n    }\n\n    var siblingFiber = workInProgress.sibling;\n\n    if (siblingFiber !== null) {\n      // If there is more work to do in this returnFiber, do that next.\n      return siblingFiber;\n    } // Otherwise, return to the parent\n\n\n    workInProgress = returnFiber;\n  } while (workInProgress !== null); // We've reached the root.\n\n\n  if (workInProgressRootExitStatus === RootIncomplete) {\n    workInProgressRootExitStatus = RootCompleted;\n  }\n\n  return null;\n}\n\nfunction getRemainingExpirationTime(fiber) {\n  var updateExpirationTime = fiber.expirationTime;\n  var childExpirationTime = fiber.childExpirationTime;\n  return updateExpirationTime > childExpirationTime ? updateExpirationTime : childExpirationTime;\n}\n\nfunction resetChildExpirationTime(completedWork) {\n  if (renderExpirationTime$1 !== Never && completedWork.childExpirationTime === Never) {\n    // The children of this component are hidden. Don't bubble their\n    // expiration times.\n    return;\n  }\n\n  var newChildExpirationTime = NoWork; // Bubble up the earliest expiration time.\n\n  if ( (completedWork.mode & ProfileMode) !== NoMode) {\n    // In profiling mode, resetChildExpirationTime is also used to reset\n    // profiler durations.\n    var actualDuration = completedWork.actualDuration;\n    var treeBaseDuration = completedWork.selfBaseDuration; // When a fiber is cloned, its actualDuration is reset to 0. This value will\n    // only be updated if work is done on the fiber (i.e. it doesn't bailout).\n    // When work is done, it should bubble to the parent's actualDuration. If\n    // the fiber has not been cloned though, (meaning no work was done), then\n    // this value will reflect the amount of time spent working on a previous\n    // render. In that case it should not bubble. We determine whether it was\n    // cloned by comparing the child pointer.\n\n    var shouldBubbleActualDurations = completedWork.alternate === null || completedWork.child !== completedWork.alternate.child;\n    var child = completedWork.child;\n\n    while (child !== null) {\n      var childUpdateExpirationTime = child.expirationTime;\n      var childChildExpirationTime = child.childExpirationTime;\n\n      if (childUpdateExpirationTime > newChildExpirationTime) {\n        newChildExpirationTime = childUpdateExpirationTime;\n      }\n\n      if (childChildExpirationTime > newChildExpirationTime) {\n        newChildExpirationTime = childChildExpirationTime;\n      }\n\n      if (shouldBubbleActualDurations) {\n        actualDuration += child.actualDuration;\n      }\n\n      treeBaseDuration += child.treeBaseDuration;\n      child = child.sibling;\n    }\n\n    completedWork.actualDuration = actualDuration;\n    completedWork.treeBaseDuration = treeBaseDuration;\n  } else {\n    var _child = completedWork.child;\n\n    while (_child !== null) {\n      var _childUpdateExpirationTime = _child.expirationTime;\n      var _childChildExpirationTime = _child.childExpirationTime;\n\n      if (_childUpdateExpirationTime > newChildExpirationTime) {\n        newChildExpirationTime = _childUpdateExpirationTime;\n      }\n\n      if (_childChildExpirationTime > newChildExpirationTime) {\n        newChildExpirationTime = _childChildExpirationTime;\n      }\n\n      _child = _child.sibling;\n    }\n  }\n\n  completedWork.childExpirationTime = newChildExpirationTime;\n}\n\nfunction commitRoot(root) {\n  var renderPriorityLevel = getCurrentPriorityLevel();\n  runWithPriority$1(ImmediatePriority, commitRootImpl.bind(null, root, renderPriorityLevel));\n  return null;\n}\n\nfunction commitRootImpl(root, renderPriorityLevel) {\n  do {\n    // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which\n    // means `flushPassiveEffects` will sometimes result in additional\n    // passive effects. So we need to keep flushing in a loop until there are\n    // no more pending effects.\n    // TODO: Might be better if `flushPassiveEffects` did not automatically\n    // flush synchronous work at the end, to avoid factoring hazards like this.\n    flushPassiveEffects();\n  } while (rootWithPendingPassiveEffects !== null);\n\n  flushRenderPhaseStrictModeWarningsInDEV();\n\n  if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n    {\n      throw Error( \"Should not already be working.\" );\n    }\n  }\n\n  var finishedWork = root.finishedWork;\n  var expirationTime = root.finishedExpirationTime;\n\n  if (finishedWork === null) {\n    return null;\n  }\n\n  root.finishedWork = null;\n  root.finishedExpirationTime = NoWork;\n\n  if (!(finishedWork !== root.current)) {\n    {\n      throw Error( \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\" );\n    }\n  } // commitRoot never returns a continuation; it always finishes synchronously.\n  // So we can clear these now to allow a new callback to be scheduled.\n\n\n  root.callbackNode = null;\n  root.callbackExpirationTime = NoWork;\n  root.callbackPriority = NoPriority;\n  root.nextKnownPendingLevel = NoWork;\n  startCommitTimer(); // Update the first and last pending times on this root. The new first\n  // pending time is whatever is left on the root fiber.\n\n  var remainingExpirationTimeBeforeCommit = getRemainingExpirationTime(finishedWork);\n  markRootFinishedAtTime(root, expirationTime, remainingExpirationTimeBeforeCommit);\n\n  if (root === workInProgressRoot) {\n    // We can reset these now that they are finished.\n    workInProgressRoot = null;\n    workInProgress = null;\n    renderExpirationTime$1 = NoWork;\n  } // This indicates that the last root we worked on is not the same one that\n  // we're committing now. This most commonly happens when a suspended root\n  // times out.\n  // Get the list of effects.\n\n\n  var firstEffect;\n\n  if (finishedWork.effectTag > PerformedWork) {\n    // A fiber's effect list consists only of its children, not itself. So if\n    // the root has an effect, we need to add it to the end of the list. The\n    // resulting list is the set that would belong to the root's parent, if it\n    // had one; that is, all the effects in the tree including the root.\n    if (finishedWork.lastEffect !== null) {\n      finishedWork.lastEffect.nextEffect = finishedWork;\n      firstEffect = finishedWork.firstEffect;\n    } else {\n      firstEffect = finishedWork;\n    }\n  } else {\n    // There is no effect on the root.\n    firstEffect = finishedWork.firstEffect;\n  }\n\n  if (firstEffect !== null) {\n    var prevExecutionContext = executionContext;\n    executionContext |= CommitContext;\n    var prevInteractions = pushInteractions(root); // Reset this to null before calling lifecycles\n\n    ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass\n    // of the effect list for each phase: all mutation effects come before all\n    // layout effects, and so on.\n    // The first phase a \"before mutation\" phase. We use this phase to read the\n    // state of the host tree right before we mutate it. This is where\n    // getSnapshotBeforeUpdate is called.\n\n    startCommitSnapshotEffectsTimer();\n    prepareForCommit(root.containerInfo);\n    nextEffect = firstEffect;\n\n    do {\n      {\n        invokeGuardedCallback(null, commitBeforeMutationEffects, null);\n\n        if (hasCaughtError()) {\n          if (!(nextEffect !== null)) {\n            {\n              throw Error( \"Should be working on an effect.\" );\n            }\n          }\n\n          var error = clearCaughtError();\n          captureCommitPhaseError(nextEffect, error);\n          nextEffect = nextEffect.nextEffect;\n        }\n      }\n    } while (nextEffect !== null);\n\n    stopCommitSnapshotEffectsTimer();\n\n    {\n      // Mark the current commit time to be shared by all Profilers in this\n      // batch. This enables them to be grouped later.\n      recordCommitTime();\n    } // The next phase is the mutation phase, where we mutate the host tree.\n\n\n    startCommitHostEffectsTimer();\n    nextEffect = firstEffect;\n\n    do {\n      {\n        invokeGuardedCallback(null, commitMutationEffects, null, root, renderPriorityLevel);\n\n        if (hasCaughtError()) {\n          if (!(nextEffect !== null)) {\n            {\n              throw Error( \"Should be working on an effect.\" );\n            }\n          }\n\n          var _error = clearCaughtError();\n\n          captureCommitPhaseError(nextEffect, _error);\n          nextEffect = nextEffect.nextEffect;\n        }\n      }\n    } while (nextEffect !== null);\n\n    stopCommitHostEffectsTimer();\n    resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after\n    // the mutation phase, so that the previous tree is still current during\n    // componentWillUnmount, but before the layout phase, so that the finished\n    // work is current during componentDidMount/Update.\n\n    root.current = finishedWork; // The next phase is the layout phase, where we call effects that read\n    // the host tree after it's been mutated. The idiomatic use case for this is\n    // layout, but class component lifecycles also fire here for legacy reasons.\n\n    startCommitLifeCyclesTimer();\n    nextEffect = firstEffect;\n\n    do {\n      {\n        invokeGuardedCallback(null, commitLayoutEffects, null, root, expirationTime);\n\n        if (hasCaughtError()) {\n          if (!(nextEffect !== null)) {\n            {\n              throw Error( \"Should be working on an effect.\" );\n            }\n          }\n\n          var _error2 = clearCaughtError();\n\n          captureCommitPhaseError(nextEffect, _error2);\n          nextEffect = nextEffect.nextEffect;\n        }\n      }\n    } while (nextEffect !== null);\n\n    stopCommitLifeCyclesTimer();\n    nextEffect = null; // Tell Scheduler to yield at the end of the frame, so the browser has an\n    // opportunity to paint.\n\n    requestPaint();\n\n    {\n      popInteractions(prevInteractions);\n    }\n\n    executionContext = prevExecutionContext;\n  } else {\n    // No effects.\n    root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were\n    // no effects.\n    // TODO: Maybe there's a better way to report this.\n\n    startCommitSnapshotEffectsTimer();\n    stopCommitSnapshotEffectsTimer();\n\n    {\n      recordCommitTime();\n    }\n\n    startCommitHostEffectsTimer();\n    stopCommitHostEffectsTimer();\n    startCommitLifeCyclesTimer();\n    stopCommitLifeCyclesTimer();\n  }\n\n  stopCommitTimer();\n  var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;\n\n  if (rootDoesHavePassiveEffects) {\n    // This commit has passive effects. Stash a reference to them. But don't\n    // schedule a callback until after flushing layout work.\n    rootDoesHavePassiveEffects = false;\n    rootWithPendingPassiveEffects = root;\n    pendingPassiveEffectsExpirationTime = expirationTime;\n    pendingPassiveEffectsRenderPriority = renderPriorityLevel;\n  } else {\n    // We are done with the effect chain at this point so let's clear the\n    // nextEffect pointers to assist with GC. If we have passive effects, we'll\n    // clear this in flushPassiveEffects.\n    nextEffect = firstEffect;\n\n    while (nextEffect !== null) {\n      var nextNextEffect = nextEffect.nextEffect;\n      nextEffect.nextEffect = null;\n      nextEffect = nextNextEffect;\n    }\n  } // Check if there's remaining work on this root\n\n\n  var remainingExpirationTime = root.firstPendingTime;\n\n  if (remainingExpirationTime !== NoWork) {\n    {\n      if (spawnedWorkDuringRender !== null) {\n        var expirationTimes = spawnedWorkDuringRender;\n        spawnedWorkDuringRender = null;\n\n        for (var i = 0; i < expirationTimes.length; i++) {\n          scheduleInteractions(root, expirationTimes[i], root.memoizedInteractions);\n        }\n      }\n\n      schedulePendingInteractions(root, remainingExpirationTime);\n    }\n  } else {\n    // If there's no remaining work, we can clear the set of already failed\n    // error boundaries.\n    legacyErrorBoundariesThatAlreadyFailed = null;\n  }\n\n  {\n    if (!rootDidHavePassiveEffects) {\n      // If there are no passive effects, then we can complete the pending interactions.\n      // Otherwise, we'll wait until after the passive effects are flushed.\n      // Wait to do this until after remaining work has been scheduled,\n      // so that we don't prematurely signal complete for interactions when there's e.g. hidden work.\n      finishPendingInteractions(root, expirationTime);\n    }\n  }\n\n  if (remainingExpirationTime === Sync) {\n    // Count the number of times the root synchronously re-renders without\n    // finishing. If there are too many, it indicates an infinite update loop.\n    if (root === rootWithNestedUpdates) {\n      nestedUpdateCount++;\n    } else {\n      nestedUpdateCount = 0;\n      rootWithNestedUpdates = root;\n    }\n  } else {\n    nestedUpdateCount = 0;\n  }\n\n  onCommitRoot(finishedWork.stateNode, expirationTime); // Always call this before exiting `commitRoot`, to ensure that any\n  // additional work on this root is scheduled.\n\n  ensureRootIsScheduled(root);\n\n  if (hasUncaughtError) {\n    hasUncaughtError = false;\n    var _error3 = firstUncaughtError;\n    firstUncaughtError = null;\n    throw _error3;\n  }\n\n  if ((executionContext & LegacyUnbatchedContext) !== NoContext) {\n    // This is a legacy edge case. We just committed the initial mount of\n    // a ReactDOM.render-ed root inside of batchedUpdates. The commit fired\n    // synchronously, but layout updates should be deferred until the end\n    // of the batch.\n    return null;\n  } // If layout work was scheduled, flush it now.\n\n\n  flushSyncCallbackQueue();\n  return null;\n}\n\nfunction commitBeforeMutationEffects() {\n  while (nextEffect !== null) {\n    var effectTag = nextEffect.effectTag;\n\n    if ((effectTag & Snapshot) !== NoEffect) {\n      setCurrentFiber(nextEffect);\n      recordEffect();\n      var current = nextEffect.alternate;\n      commitBeforeMutationLifeCycles(current, nextEffect);\n      resetCurrentFiber();\n    }\n\n    if ((effectTag & Passive) !== NoEffect) {\n      // If there are passive effects, schedule a callback to flush at\n      // the earliest opportunity.\n      if (!rootDoesHavePassiveEffects) {\n        rootDoesHavePassiveEffects = true;\n        scheduleCallback(NormalPriority, function () {\n          flushPassiveEffects();\n          return null;\n        });\n      }\n    }\n\n    nextEffect = nextEffect.nextEffect;\n  }\n}\n\nfunction commitMutationEffects(root, renderPriorityLevel) {\n  // TODO: Should probably move the bulk of this function to commitWork.\n  while (nextEffect !== null) {\n    setCurrentFiber(nextEffect);\n    var effectTag = nextEffect.effectTag;\n\n    if (effectTag & ContentReset) {\n      commitResetTextContent(nextEffect);\n    }\n\n    if (effectTag & Ref) {\n      var current = nextEffect.alternate;\n\n      if (current !== null) {\n        commitDetachRef(current);\n      }\n    } // The following switch statement is only concerned about placement,\n    // updates, and deletions. To avoid needing to add a case for every possible\n    // bitmap value, we remove the secondary effects from the effect tag and\n    // switch on that value.\n\n\n    var primaryEffectTag = effectTag & (Placement | Update | Deletion | Hydrating);\n\n    switch (primaryEffectTag) {\n      case Placement:\n        {\n          commitPlacement(nextEffect); // Clear the \"placement\" from effect tag so that we know that this is\n          // inserted, before any life-cycles like componentDidMount gets called.\n          // TODO: findDOMNode doesn't rely on this any more but isMounted does\n          // and isMounted is deprecated anyway so we should be able to kill this.\n\n          nextEffect.effectTag &= ~Placement;\n          break;\n        }\n\n      case PlacementAndUpdate:\n        {\n          // Placement\n          commitPlacement(nextEffect); // Clear the \"placement\" from effect tag so that we know that this is\n          // inserted, before any life-cycles like componentDidMount gets called.\n\n          nextEffect.effectTag &= ~Placement; // Update\n\n          var _current = nextEffect.alternate;\n          commitWork(_current, nextEffect);\n          break;\n        }\n\n      case Hydrating:\n        {\n          nextEffect.effectTag &= ~Hydrating;\n          break;\n        }\n\n      case HydratingAndUpdate:\n        {\n          nextEffect.effectTag &= ~Hydrating; // Update\n\n          var _current2 = nextEffect.alternate;\n          commitWork(_current2, nextEffect);\n          break;\n        }\n\n      case Update:\n        {\n          var _current3 = nextEffect.alternate;\n          commitWork(_current3, nextEffect);\n          break;\n        }\n\n      case Deletion:\n        {\n          commitDeletion(root, nextEffect, renderPriorityLevel);\n          break;\n        }\n    } // TODO: Only record a mutation effect if primaryEffectTag is non-zero.\n\n\n    recordEffect();\n    resetCurrentFiber();\n    nextEffect = nextEffect.nextEffect;\n  }\n}\n\nfunction commitLayoutEffects(root, committedExpirationTime) {\n  // TODO: Should probably move the bulk of this function to commitWork.\n  while (nextEffect !== null) {\n    setCurrentFiber(nextEffect);\n    var effectTag = nextEffect.effectTag;\n\n    if (effectTag & (Update | Callback)) {\n      recordEffect();\n      var current = nextEffect.alternate;\n      commitLifeCycles(root, current, nextEffect);\n    }\n\n    if (effectTag & Ref) {\n      recordEffect();\n      commitAttachRef(nextEffect);\n    }\n\n    resetCurrentFiber();\n    nextEffect = nextEffect.nextEffect;\n  }\n}\n\nfunction flushPassiveEffects() {\n  if (pendingPassiveEffectsRenderPriority !== NoPriority) {\n    var priorityLevel = pendingPassiveEffectsRenderPriority > NormalPriority ? NormalPriority : pendingPassiveEffectsRenderPriority;\n    pendingPassiveEffectsRenderPriority = NoPriority;\n    return runWithPriority$1(priorityLevel, flushPassiveEffectsImpl);\n  }\n}\n\nfunction flushPassiveEffectsImpl() {\n  if (rootWithPendingPassiveEffects === null) {\n    return false;\n  }\n\n  var root = rootWithPendingPassiveEffects;\n  var expirationTime = pendingPassiveEffectsExpirationTime;\n  rootWithPendingPassiveEffects = null;\n  pendingPassiveEffectsExpirationTime = NoWork;\n\n  if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n    {\n      throw Error( \"Cannot flush passive effects while already rendering.\" );\n    }\n  }\n\n  var prevExecutionContext = executionContext;\n  executionContext |= CommitContext;\n  var prevInteractions = pushInteractions(root);\n\n  {\n    // Note: This currently assumes there are no passive effects on the root fiber\n    // because the root is not part of its own effect list.\n    // This could change in the future.\n    var _effect2 = root.current.firstEffect;\n\n    while (_effect2 !== null) {\n      {\n        setCurrentFiber(_effect2);\n        invokeGuardedCallback(null, commitPassiveHookEffects, null, _effect2);\n\n        if (hasCaughtError()) {\n          if (!(_effect2 !== null)) {\n            {\n              throw Error( \"Should be working on an effect.\" );\n            }\n          }\n\n          var _error5 = clearCaughtError();\n\n          captureCommitPhaseError(_effect2, _error5);\n        }\n\n        resetCurrentFiber();\n      }\n\n      var nextNextEffect = _effect2.nextEffect; // Remove nextEffect pointer to assist GC\n\n      _effect2.nextEffect = null;\n      _effect2 = nextNextEffect;\n    }\n  }\n\n  {\n    popInteractions(prevInteractions);\n    finishPendingInteractions(root, expirationTime);\n  }\n\n  executionContext = prevExecutionContext;\n  flushSyncCallbackQueue(); // If additional passive effects were scheduled, increment a counter. If this\n  // exceeds the limit, we'll fire a warning.\n\n  nestedPassiveUpdateCount = rootWithPendingPassiveEffects === null ? 0 : nestedPassiveUpdateCount + 1;\n  return true;\n}\n\nfunction isAlreadyFailedLegacyErrorBoundary(instance) {\n  return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);\n}\nfunction markLegacyErrorBoundaryAsFailed(instance) {\n  if (legacyErrorBoundariesThatAlreadyFailed === null) {\n    legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);\n  } else {\n    legacyErrorBoundariesThatAlreadyFailed.add(instance);\n  }\n}\n\nfunction prepareToThrowUncaughtError(error) {\n  if (!hasUncaughtError) {\n    hasUncaughtError = true;\n    firstUncaughtError = error;\n  }\n}\n\nvar onUncaughtError = prepareToThrowUncaughtError;\n\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  var errorInfo = createCapturedValue(error, sourceFiber);\n  var update = createRootErrorUpdate(rootFiber, errorInfo, Sync);\n  enqueueUpdate(rootFiber, update);\n  var root = markUpdateTimeFromFiberToRoot(rootFiber, Sync);\n\n  if (root !== null) {\n    ensureRootIsScheduled(root);\n    schedulePendingInteractions(root, Sync);\n  }\n}\n\nfunction captureCommitPhaseError(sourceFiber, error) {\n  if (sourceFiber.tag === HostRoot) {\n    // Error was thrown at the root. There is no parent, so the root\n    // itself should capture it.\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n    return;\n  }\n\n  var fiber = sourceFiber.return;\n\n  while (fiber !== null) {\n    if (fiber.tag === HostRoot) {\n      captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error);\n      return;\n    } else if (fiber.tag === ClassComponent) {\n      var ctor = fiber.type;\n      var instance = fiber.stateNode;\n\n      if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {\n        var errorInfo = createCapturedValue(error, sourceFiber);\n        var update = createClassErrorUpdate(fiber, errorInfo, // TODO: This is always sync\n        Sync);\n        enqueueUpdate(fiber, update);\n        var root = markUpdateTimeFromFiberToRoot(fiber, Sync);\n\n        if (root !== null) {\n          ensureRootIsScheduled(root);\n          schedulePendingInteractions(root, Sync);\n        }\n\n        return;\n      }\n    }\n\n    fiber = fiber.return;\n  }\n}\nfunction pingSuspendedRoot(root, thenable, suspendedTime) {\n  var pingCache = root.pingCache;\n\n  if (pingCache !== null) {\n    // The thenable resolved, so we no longer need to memoize, because it will\n    // never be thrown again.\n    pingCache.delete(thenable);\n  }\n\n  if (workInProgressRoot === root && renderExpirationTime$1 === suspendedTime) {\n    // Received a ping at the same priority level at which we're currently\n    // rendering. We might want to restart this render. This should mirror\n    // the logic of whether or not a root suspends once it completes.\n    // TODO: If we're rendering sync either due to Sync, Batched or expired,\n    // we should probably never restart.\n    // If we're suspended with delay, we'll always suspend so we can always\n    // restart. If we're suspended without any updates, it might be a retry.\n    // If it's early in the retry we can restart. We can't know for sure\n    // whether we'll eventually process an update during this render pass,\n    // but it's somewhat unlikely that we get to a ping before that, since\n    // getting to the root most update is usually very fast.\n    if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && workInProgressRootLatestProcessedExpirationTime === Sync && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {\n      // Restart from the root. Don't need to schedule a ping because\n      // we're already working on this tree.\n      prepareFreshStack(root, renderExpirationTime$1);\n    } else {\n      // Even though we can't restart right now, we might get an\n      // opportunity later. So we mark this render as having a ping.\n      workInProgressRootHasPendingPing = true;\n    }\n\n    return;\n  }\n\n  if (!isRootSuspendedAtTime(root, suspendedTime)) {\n    // The root is no longer suspended at this time.\n    return;\n  }\n\n  var lastPingedTime = root.lastPingedTime;\n\n  if (lastPingedTime !== NoWork && lastPingedTime < suspendedTime) {\n    // There's already a lower priority ping scheduled.\n    return;\n  } // Mark the time at which this ping was scheduled.\n\n\n  root.lastPingedTime = suspendedTime;\n\n  ensureRootIsScheduled(root);\n  schedulePendingInteractions(root, suspendedTime);\n}\n\nfunction retryTimedOutBoundary(boundaryFiber, retryTime) {\n  // The boundary fiber (a Suspense component or SuspenseList component)\n  // previously was rendered in its fallback state. One of the promises that\n  // suspended it has resolved, which means at least part of the tree was\n  // likely unblocked. Try rendering again, at a new expiration time.\n  if (retryTime === NoWork) {\n    var suspenseConfig = null; // Retries don't carry over the already committed update.\n\n    var currentTime = requestCurrentTimeForUpdate();\n    retryTime = computeExpirationForFiber(currentTime, boundaryFiber, suspenseConfig);\n  } // TODO: Special case idle priority?\n\n\n  var root = markUpdateTimeFromFiberToRoot(boundaryFiber, retryTime);\n\n  if (root !== null) {\n    ensureRootIsScheduled(root);\n    schedulePendingInteractions(root, retryTime);\n  }\n}\nfunction resolveRetryThenable(boundaryFiber, thenable) {\n  var retryTime = NoWork; // Default\n\n  var retryCache;\n\n  {\n    retryCache = boundaryFiber.stateNode;\n  }\n\n  if (retryCache !== null) {\n    // The thenable resolved, so we no longer need to memoize, because it will\n    // never be thrown again.\n    retryCache.delete(thenable);\n  }\n\n  retryTimedOutBoundary(boundaryFiber, retryTime);\n} // Computes the next Just Noticeable Difference (JND) boundary.\n// The theory is that a person can't tell the difference between small differences in time.\n// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable\n// difference in the experience. However, waiting for longer might mean that we can avoid\n// showing an intermediate loading state. The longer we have already waited, the harder it\n// is to tell small differences in time. Therefore, the longer we've already waited,\n// the longer we can wait additionally. At some point we have to give up though.\n// We pick a train model where the next boundary commits at a consistent schedule.\n// These particular numbers are vague estimates. We expect to adjust them based on research.\n\nfunction jnd(timeElapsed) {\n  return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;\n}\n\nfunction computeMsUntilSuspenseLoadingDelay(mostRecentEventTime, committedExpirationTime, suspenseConfig) {\n  var busyMinDurationMs = suspenseConfig.busyMinDurationMs | 0;\n\n  if (busyMinDurationMs <= 0) {\n    return 0;\n  }\n\n  var busyDelayMs = suspenseConfig.busyDelayMs | 0; // Compute the time until this render pass would expire.\n\n  var currentTimeMs = now();\n  var eventTimeMs = inferTimeFromExpirationTimeWithSuspenseConfig(mostRecentEventTime, suspenseConfig);\n  var timeElapsed = currentTimeMs - eventTimeMs;\n\n  if (timeElapsed <= busyDelayMs) {\n    // If we haven't yet waited longer than the initial delay, we don't\n    // have to wait any additional time.\n    return 0;\n  }\n\n  var msUntilTimeout = busyDelayMs + busyMinDurationMs - timeElapsed; // This is the value that is passed to `setTimeout`.\n\n  return msUntilTimeout;\n}\n\nfunction checkForNestedUpdates() {\n  if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n    nestedUpdateCount = 0;\n    rootWithNestedUpdates = null;\n\n    {\n      {\n        throw Error( \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\" );\n      }\n    }\n  }\n\n  {\n    if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {\n      nestedPassiveUpdateCount = 0;\n\n      error('Maximum update depth exceeded. This can happen when a component ' + \"calls setState inside useEffect, but useEffect either doesn't \" + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');\n    }\n  }\n}\n\nfunction flushRenderPhaseStrictModeWarningsInDEV() {\n  {\n    ReactStrictModeWarnings.flushLegacyContextWarning();\n\n    {\n      ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n    }\n  }\n}\n\nfunction stopFinishedWorkLoopTimer() {\n  var didCompleteRoot = true;\n  stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n  interruptedBy = null;\n}\n\nfunction stopInterruptedWorkLoopTimer() {\n  // TODO: Track which fiber caused the interruption.\n  var didCompleteRoot = false;\n  stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n  interruptedBy = null;\n}\n\nfunction checkForInterruption(fiberThatReceivedUpdate, updateExpirationTime) {\n  if ( workInProgressRoot !== null && updateExpirationTime > renderExpirationTime$1) {\n    interruptedBy = fiberThatReceivedUpdate;\n  }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = null;\n\nfunction warnAboutUpdateOnUnmountedFiberInDEV(fiber) {\n  {\n    var tag = fiber.tag;\n\n    if (tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent && tag !== Block) {\n      // Only warn for user-defined components, not internal ones like Suspense.\n      return;\n    }\n    // the problematic code almost always lies inside that component.\n\n\n    var componentName = getComponentName(fiber.type) || 'ReactComponent';\n\n    if (didWarnStateUpdateForUnmountedComponent !== null) {\n      if (didWarnStateUpdateForUnmountedComponent.has(componentName)) {\n        return;\n      }\n\n      didWarnStateUpdateForUnmountedComponent.add(componentName);\n    } else {\n      didWarnStateUpdateForUnmountedComponent = new Set([componentName]);\n    }\n\n    error(\"Can't perform a React state update on an unmounted component. This \" + 'is a no-op, but it indicates a memory leak in your application. To ' + 'fix, cancel all subscriptions and asynchronous tasks in %s.%s', tag === ClassComponent ? 'the componentWillUnmount method' : 'a useEffect cleanup function', getStackByFiberInDevAndProd(fiber));\n  }\n}\n\nvar beginWork$1;\n\n{\n  var dummyFiber = null;\n\n  beginWork$1 = function (current, unitOfWork, expirationTime) {\n    // If a component throws an error, we replay it again in a synchronously\n    // dispatched event, so that the debugger will treat it as an uncaught\n    // error See ReactErrorUtils for more information.\n    // Before entering the begin phase, copy the work-in-progress onto a dummy\n    // fiber. If beginWork throws, we'll use this to reset the state.\n    var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);\n\n    try {\n      return beginWork(current, unitOfWork, expirationTime);\n    } catch (originalError) {\n      if (originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {\n        // Don't replay promises. Treat everything else like an error.\n        throw originalError;\n      } // Keep this code in sync with handleError; any changes here must have\n      // corresponding changes there.\n\n\n      resetContextDependencies();\n      resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the\n      // same fiber again.\n      // Unwind the failed stack frame\n\n      unwindInterruptedWork(unitOfWork); // Restore the original properties of the fiber.\n\n      assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);\n\n      if ( unitOfWork.mode & ProfileMode) {\n        // Reset the profiler timer.\n        startProfilerTimer(unitOfWork);\n      } // Run beginWork again.\n\n\n      invokeGuardedCallback(null, beginWork, null, current, unitOfWork, expirationTime);\n\n      if (hasCaughtError()) {\n        var replayError = clearCaughtError(); // `invokeGuardedCallback` sometimes sets an expando `_suppressLogging`.\n        // Rethrow this error instead of the original one.\n\n        throw replayError;\n      } else {\n        // This branch is reachable if the render phase is impure.\n        throw originalError;\n      }\n    }\n  };\n}\n\nvar didWarnAboutUpdateInRender = false;\nvar didWarnAboutUpdateInRenderForAnotherComponent;\n\n{\n  didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n}\n\nfunction warnAboutRenderPhaseUpdatesInDEV(fiber) {\n  {\n    if (isRendering && (executionContext & RenderContext) !== NoContext) {\n      switch (fiber.tag) {\n        case FunctionComponent:\n        case ForwardRef:\n        case SimpleMemoComponent:\n          {\n            var renderingComponentName = workInProgress && getComponentName(workInProgress.type) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.\n\n            var dedupeKey = renderingComponentName;\n\n            if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {\n              didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);\n              var setStateComponentName = getComponentName(fiber.type) || 'Unknown';\n\n              error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://fb.me/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);\n            }\n\n            break;\n          }\n\n        case ClassComponent:\n          {\n            if (!didWarnAboutUpdateInRender) {\n              error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');\n\n              didWarnAboutUpdateInRender = true;\n            }\n\n            break;\n          }\n      }\n    }\n  }\n} // a 'shared' variable that changes when act() opens/closes in tests.\n\n\nvar IsThisRendererActing = {\n  current: false\n};\nfunction warnIfNotScopedWithMatchingAct(fiber) {\n  {\n    if ( IsSomeRendererActing.current === true && IsThisRendererActing.current !== true) {\n      error(\"It looks like you're using the wrong act() around your test interactions.\\n\" + 'Be sure to use the matching version of act() corresponding to your renderer:\\n\\n' + '// for react-dom:\\n' + \"import {act} from 'react-dom/test-utils';\\n\" + '// ...\\n' + 'act(() => ...);\\n\\n' + '// for react-test-renderer:\\n' + \"import TestRenderer from 'react-test-renderer';\\n\" + 'const {act} = TestRenderer;\\n' + '// ...\\n' + 'act(() => ...);' + '%s', getStackByFiberInDevAndProd(fiber));\n    }\n  }\n}\nfunction warnIfNotCurrentlyActingEffectsInDEV(fiber) {\n  {\n    if ( (fiber.mode & StrictMode) !== NoMode && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {\n      error('An update to %s ran an effect, but was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + '  /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n    }\n  }\n}\n\nfunction warnIfNotCurrentlyActingUpdatesInDEV(fiber) {\n  {\n    if ( executionContext === NoContext && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {\n      error('An update to %s inside a test was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + '  /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n    }\n  }\n}\n\nvar warnIfNotCurrentlyActingUpdatesInDev = warnIfNotCurrentlyActingUpdatesInDEV; // In tests, we want to enforce a mocked scheduler.\n\nvar didWarnAboutUnmockedScheduler = false; // TODO Before we release concurrent mode, revisit this and decide whether a mocked\n// scheduler is the actual recommendation. The alternative could be a testing build,\n// a new lib, or whatever; we dunno just yet. This message is for early adopters\n// to get their tests right.\n\nfunction warnIfUnmockedScheduler(fiber) {\n  {\n    if (didWarnAboutUnmockedScheduler === false && Scheduler.unstable_flushAllWithoutAsserting === undefined) {\n      if (fiber.mode & BlockingMode || fiber.mode & ConcurrentMode) {\n        didWarnAboutUnmockedScheduler = true;\n\n        error('In Concurrent or Sync modes, the \"scheduler\" module needs to be mocked ' + 'to guarantee consistent behaviour across tests and browsers. ' + 'For example, with jest: \\n' + \"jest.mock('scheduler', () => require('scheduler/unstable_mock'));\\n\\n\" + 'For more info, visit https://fb.me/react-mock-scheduler');\n      }\n    }\n  }\n}\n\nfunction computeThreadID(root, expirationTime) {\n  // Interaction threads are unique per root and expiration time.\n  return expirationTime * 1000 + root.interactionThreadID;\n}\n\nfunction markSpawnedWork(expirationTime) {\n\n  if (spawnedWorkDuringRender === null) {\n    spawnedWorkDuringRender = [expirationTime];\n  } else {\n    spawnedWorkDuringRender.push(expirationTime);\n  }\n}\n\nfunction scheduleInteractions(root, expirationTime, interactions) {\n\n  if (interactions.size > 0) {\n    var pendingInteractionMap = root.pendingInteractionMap;\n    var pendingInteractions = pendingInteractionMap.get(expirationTime);\n\n    if (pendingInteractions != null) {\n      interactions.forEach(function (interaction) {\n        if (!pendingInteractions.has(interaction)) {\n          // Update the pending async work count for previously unscheduled interaction.\n          interaction.__count++;\n        }\n\n        pendingInteractions.add(interaction);\n      });\n    } else {\n      pendingInteractionMap.set(expirationTime, new Set(interactions)); // Update the pending async work count for the current interactions.\n\n      interactions.forEach(function (interaction) {\n        interaction.__count++;\n      });\n    }\n\n    var subscriber = tracing.__subscriberRef.current;\n\n    if (subscriber !== null) {\n      var threadID = computeThreadID(root, expirationTime);\n      subscriber.onWorkScheduled(interactions, threadID);\n    }\n  }\n}\n\nfunction schedulePendingInteractions(root, expirationTime) {\n\n  scheduleInteractions(root, expirationTime, tracing.__interactionsRef.current);\n}\n\nfunction startWorkOnPendingInteractions(root, expirationTime) {\n  // we can accurately attribute time spent working on it, And so that cascading\n  // work triggered during the render phase will be associated with it.\n\n\n  var interactions = new Set();\n  root.pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n    if (scheduledExpirationTime >= expirationTime) {\n      scheduledInteractions.forEach(function (interaction) {\n        return interactions.add(interaction);\n      });\n    }\n  }); // Store the current set of interactions on the FiberRoot for a few reasons:\n  // We can re-use it in hot functions like performConcurrentWorkOnRoot()\n  // without having to recalculate it. We will also use it in commitWork() to\n  // pass to any Profiler onRender() hooks. This also provides DevTools with a\n  // way to access it when the onCommitRoot() hook is called.\n\n  root.memoizedInteractions = interactions;\n\n  if (interactions.size > 0) {\n    var subscriber = tracing.__subscriberRef.current;\n\n    if (subscriber !== null) {\n      var threadID = computeThreadID(root, expirationTime);\n\n      try {\n        subscriber.onWorkStarted(interactions, threadID);\n      } catch (error) {\n        // If the subscriber throws, rethrow it in a separate task\n        scheduleCallback(ImmediatePriority, function () {\n          throw error;\n        });\n      }\n    }\n  }\n}\n\nfunction finishPendingInteractions(root, committedExpirationTime) {\n\n  var earliestRemainingTimeAfterCommit = root.firstPendingTime;\n  var subscriber;\n\n  try {\n    subscriber = tracing.__subscriberRef.current;\n\n    if (subscriber !== null && root.memoizedInteractions.size > 0) {\n      var threadID = computeThreadID(root, committedExpirationTime);\n      subscriber.onWorkStopped(root.memoizedInteractions, threadID);\n    }\n  } catch (error) {\n    // If the subscriber throws, rethrow it in a separate task\n    scheduleCallback(ImmediatePriority, function () {\n      throw error;\n    });\n  } finally {\n    // Clear completed interactions from the pending Map.\n    // Unless the render was suspended or cascading work was scheduled,\n    // In which case– leave pending interactions until the subsequent render.\n    var pendingInteractionMap = root.pendingInteractionMap;\n    pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n      // Only decrement the pending interaction count if we're done.\n      // If there's still work at the current priority,\n      // That indicates that we are waiting for suspense data.\n      if (scheduledExpirationTime > earliestRemainingTimeAfterCommit) {\n        pendingInteractionMap.delete(scheduledExpirationTime);\n        scheduledInteractions.forEach(function (interaction) {\n          interaction.__count--;\n\n          if (subscriber !== null && interaction.__count === 0) {\n            try {\n              subscriber.onInteractionScheduledWorkCompleted(interaction);\n            } catch (error) {\n              // If the subscriber throws, rethrow it in a separate task\n              scheduleCallback(ImmediatePriority, function () {\n                throw error;\n              });\n            }\n          }\n        });\n      }\n    });\n  }\n}\n\nvar onScheduleFiberRoot = null;\nvar onCommitFiberRoot = null;\nvar onCommitFiberUnmount = null;\nvar hasLoggedError = false;\nvar isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';\nfunction injectInternals(internals) {\n  if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n    // No DevTools\n    return false;\n  }\n\n  var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n  if (hook.isDisabled) {\n    // This isn't a real property on the hook, but it can be set to opt out\n    // of DevTools integration and associated warnings and logs.\n    // https://github.com/facebook/react/issues/3877\n    return true;\n  }\n\n  if (!hook.supportsFiber) {\n    {\n      error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://fb.me/react-devtools');\n    } // DevTools exists, even though it doesn't support Fiber.\n\n\n    return true;\n  }\n\n  try {\n    var rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.\n\n    if (true) {\n      // Only used by Fast Refresh\n      if (typeof hook.onScheduleFiberRoot === 'function') {\n        onScheduleFiberRoot = function (root, children) {\n          try {\n            hook.onScheduleFiberRoot(rendererID, root, children);\n          } catch (err) {\n            if ( true && !hasLoggedError) {\n              hasLoggedError = true;\n\n              error('React instrumentation encountered an error: %s', err);\n            }\n          }\n        };\n      }\n    }\n\n    onCommitFiberRoot = function (root, expirationTime) {\n      try {\n        var didError = (root.current.effectTag & DidCapture) === DidCapture;\n\n        if (enableProfilerTimer) {\n          var currentTime = getCurrentTime();\n          var priorityLevel = inferPriorityFromExpirationTime(currentTime, expirationTime);\n          hook.onCommitFiberRoot(rendererID, root, priorityLevel, didError);\n        } else {\n          hook.onCommitFiberRoot(rendererID, root, undefined, didError);\n        }\n      } catch (err) {\n        if (true) {\n          if (!hasLoggedError) {\n            hasLoggedError = true;\n\n            error('React instrumentation encountered an error: %s', err);\n          }\n        }\n      }\n    };\n\n    onCommitFiberUnmount = function (fiber) {\n      try {\n        hook.onCommitFiberUnmount(rendererID, fiber);\n      } catch (err) {\n        if (true) {\n          if (!hasLoggedError) {\n            hasLoggedError = true;\n\n            error('React instrumentation encountered an error: %s', err);\n          }\n        }\n      }\n    };\n  } catch (err) {\n    // Catch all errors because it is unsafe to throw during initialization.\n    {\n      error('React instrumentation encountered an error: %s.', err);\n    }\n  } // DevTools exists\n\n\n  return true;\n}\nfunction onScheduleRoot(root, children) {\n  if (typeof onScheduleFiberRoot === 'function') {\n    onScheduleFiberRoot(root, children);\n  }\n}\nfunction onCommitRoot(root, expirationTime) {\n  if (typeof onCommitFiberRoot === 'function') {\n    onCommitFiberRoot(root, expirationTime);\n  }\n}\nfunction onCommitUnmount(fiber) {\n  if (typeof onCommitFiberUnmount === 'function') {\n    onCommitFiberUnmount(fiber);\n  }\n}\n\nvar hasBadMapPolyfill;\n\n{\n  hasBadMapPolyfill = false;\n\n  try {\n    var nonExtensibleObject = Object.preventExtensions({});\n    var testMap = new Map([[nonExtensibleObject, null]]);\n    var testSet = new Set([nonExtensibleObject]); // This is necessary for Rollup to not consider these unused.\n    // https://github.com/rollup/rollup/issues/1771\n    // TODO: we can remove these if Rollup fixes the bug.\n\n    testMap.set(0, 0);\n    testSet.add(0);\n  } catch (e) {\n    // TODO: Consider warning about bad polyfills\n    hasBadMapPolyfill = true;\n  }\n}\n\nvar debugCounter = 1;\n\nfunction FiberNode(tag, pendingProps, key, mode) {\n  // Instance\n  this.tag = tag;\n  this.key = key;\n  this.elementType = null;\n  this.type = null;\n  this.stateNode = null; // Fiber\n\n  this.return = null;\n  this.child = null;\n  this.sibling = null;\n  this.index = 0;\n  this.ref = null;\n  this.pendingProps = pendingProps;\n  this.memoizedProps = null;\n  this.updateQueue = null;\n  this.memoizedState = null;\n  this.dependencies = null;\n  this.mode = mode; // Effects\n\n  this.effectTag = NoEffect;\n  this.nextEffect = null;\n  this.firstEffect = null;\n  this.lastEffect = null;\n  this.expirationTime = NoWork;\n  this.childExpirationTime = NoWork;\n  this.alternate = null;\n\n  {\n    // Note: The following is done to avoid a v8 performance cliff.\n    //\n    // Initializing the fields below to smis and later updating them with\n    // double values will cause Fibers to end up having separate shapes.\n    // This behavior/bug has something to do with Object.preventExtension().\n    // Fortunately this only impacts DEV builds.\n    // Unfortunately it makes React unusably slow for some applications.\n    // To work around this, initialize the fields below with doubles.\n    //\n    // Learn more about this here:\n    // https://github.com/facebook/react/issues/14365\n    // https://bugs.chromium.org/p/v8/issues/detail?id=8538\n    this.actualDuration = Number.NaN;\n    this.actualStartTime = Number.NaN;\n    this.selfBaseDuration = Number.NaN;\n    this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.\n    // This won't trigger the performance cliff mentioned above,\n    // and it simplifies other profiler code (including DevTools).\n\n    this.actualDuration = 0;\n    this.actualStartTime = -1;\n    this.selfBaseDuration = 0;\n    this.treeBaseDuration = 0;\n  } // This is normally DEV-only except www when it adds listeners.\n  // TODO: remove the User Timing integration in favor of Root Events.\n\n\n  {\n    this._debugID = debugCounter++;\n    this._debugIsCurrentlyTiming = false;\n  }\n\n  {\n    this._debugSource = null;\n    this._debugOwner = null;\n    this._debugNeedsRemount = false;\n    this._debugHookTypes = null;\n\n    if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n      Object.preventExtensions(this);\n    }\n  }\n} // This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n//    more difficult to predict when they get optimized and they are almost\n//    never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n//    always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n//    to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n//    is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n//    compatible.\n\n\nvar createFiber = function (tag, pendingProps, key, mode) {\n  // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\n  return new FiberNode(tag, pendingProps, key, mode);\n};\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction isSimpleFunctionComponent(type) {\n  return typeof type === 'function' && !shouldConstruct(type) && type.defaultProps === undefined;\n}\nfunction resolveLazyComponentTag(Component) {\n  if (typeof Component === 'function') {\n    return shouldConstruct(Component) ? ClassComponent : FunctionComponent;\n  } else if (Component !== undefined && Component !== null) {\n    var $$typeof = Component.$$typeof;\n\n    if ($$typeof === REACT_FORWARD_REF_TYPE) {\n      return ForwardRef;\n    }\n\n    if ($$typeof === REACT_MEMO_TYPE) {\n      return MemoComponent;\n    }\n  }\n\n  return IndeterminateComponent;\n} // This is used to create an alternate fiber to do work on.\n\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n\n  if (workInProgress === null) {\n    // We use a double buffering pooling technique because we know that we'll\n    // only ever need at most two versions of a tree. We pool the \"other\" unused\n    // node that we're free to reuse. This is lazily created to avoid allocating\n    // extra objects for things that are never updated. It also allow us to\n    // reclaim the extra memory if needed.\n    workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);\n    workInProgress.elementType = current.elementType;\n    workInProgress.type = current.type;\n    workInProgress.stateNode = current.stateNode;\n\n    {\n      // DEV-only fields\n      {\n        workInProgress._debugID = current._debugID;\n      }\n\n      workInProgress._debugSource = current._debugSource;\n      workInProgress._debugOwner = current._debugOwner;\n      workInProgress._debugHookTypes = current._debugHookTypes;\n    }\n\n    workInProgress.alternate = current;\n    current.alternate = workInProgress;\n  } else {\n    workInProgress.pendingProps = pendingProps; // We already have an alternate.\n    // Reset the effect tag.\n\n    workInProgress.effectTag = NoEffect; // The effect list is no longer valid.\n\n    workInProgress.nextEffect = null;\n    workInProgress.firstEffect = null;\n    workInProgress.lastEffect = null;\n\n    {\n      // We intentionally reset, rather than copy, actualDuration & actualStartTime.\n      // This prevents time from endlessly accumulating in new commits.\n      // This has the downside of resetting values for different priority renders,\n      // But works for yielding (the common case) and should support resuming.\n      workInProgress.actualDuration = 0;\n      workInProgress.actualStartTime = -1;\n    }\n  }\n\n  workInProgress.childExpirationTime = current.childExpirationTime;\n  workInProgress.expirationTime = current.expirationTime;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n  // it cannot be shared with the current fiber.\n\n  var currentDependencies = current.dependencies;\n  workInProgress.dependencies = currentDependencies === null ? null : {\n    expirationTime: currentDependencies.expirationTime,\n    firstContext: currentDependencies.firstContext,\n    responders: currentDependencies.responders\n  }; // These will be overridden during the parent's reconciliation\n\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n\n  {\n    workInProgress.selfBaseDuration = current.selfBaseDuration;\n    workInProgress.treeBaseDuration = current.treeBaseDuration;\n  }\n\n  {\n    workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n\n    switch (workInProgress.tag) {\n      case IndeterminateComponent:\n      case FunctionComponent:\n      case SimpleMemoComponent:\n        workInProgress.type = resolveFunctionForHotReloading(current.type);\n        break;\n\n      case ClassComponent:\n        workInProgress.type = resolveClassForHotReloading(current.type);\n        break;\n\n      case ForwardRef:\n        workInProgress.type = resolveForwardRefForHotReloading(current.type);\n        break;\n    }\n  }\n\n  return workInProgress;\n} // Used to reuse a Fiber for a second pass.\n\nfunction resetWorkInProgress(workInProgress, renderExpirationTime) {\n  // This resets the Fiber to what createFiber or createWorkInProgress would\n  // have set the values to before during the first pass. Ideally this wouldn't\n  // be necessary but unfortunately many code paths reads from the workInProgress\n  // when they should be reading from current and writing to workInProgress.\n  // We assume pendingProps, index, key, ref, return are still untouched to\n  // avoid doing another reconciliation.\n  // Reset the effect tag but keep any Placement tags, since that's something\n  // that child fiber is setting, not the reconciliation.\n  workInProgress.effectTag &= Placement; // The effect list is no longer valid.\n\n  workInProgress.nextEffect = null;\n  workInProgress.firstEffect = null;\n  workInProgress.lastEffect = null;\n  var current = workInProgress.alternate;\n\n  if (current === null) {\n    // Reset to createFiber's initial values.\n    workInProgress.childExpirationTime = NoWork;\n    workInProgress.expirationTime = renderExpirationTime;\n    workInProgress.child = null;\n    workInProgress.memoizedProps = null;\n    workInProgress.memoizedState = null;\n    workInProgress.updateQueue = null;\n    workInProgress.dependencies = null;\n\n    {\n      // Note: We don't reset the actualTime counts. It's useful to accumulate\n      // actual time across multiple render passes.\n      workInProgress.selfBaseDuration = 0;\n      workInProgress.treeBaseDuration = 0;\n    }\n  } else {\n    // Reset to the cloned values that createWorkInProgress would've.\n    workInProgress.childExpirationTime = current.childExpirationTime;\n    workInProgress.expirationTime = current.expirationTime;\n    workInProgress.child = current.child;\n    workInProgress.memoizedProps = current.memoizedProps;\n    workInProgress.memoizedState = current.memoizedState;\n    workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n    // it cannot be shared with the current fiber.\n\n    var currentDependencies = current.dependencies;\n    workInProgress.dependencies = currentDependencies === null ? null : {\n      expirationTime: currentDependencies.expirationTime,\n      firstContext: currentDependencies.firstContext,\n      responders: currentDependencies.responders\n    };\n\n    {\n      // Note: We don't reset the actualTime counts. It's useful to accumulate\n      // actual time across multiple render passes.\n      workInProgress.selfBaseDuration = current.selfBaseDuration;\n      workInProgress.treeBaseDuration = current.treeBaseDuration;\n    }\n  }\n\n  return workInProgress;\n}\nfunction createHostRootFiber(tag) {\n  var mode;\n\n  if (tag === ConcurrentRoot) {\n    mode = ConcurrentMode | BlockingMode | StrictMode;\n  } else if (tag === BlockingRoot) {\n    mode = BlockingMode | StrictMode;\n  } else {\n    mode = NoMode;\n  }\n\n  if ( isDevToolsPresent) {\n    // Always collect profile timings when DevTools are present.\n    // This enables DevTools to start capturing timing at any point–\n    // Without some nodes in the tree having empty base times.\n    mode |= ProfileMode;\n  }\n\n  return createFiber(HostRoot, null, null, mode);\n}\nfunction createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {\n  var fiber;\n  var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.\n\n  var resolvedType = type;\n\n  if (typeof type === 'function') {\n    if (shouldConstruct(type)) {\n      fiberTag = ClassComponent;\n\n      {\n        resolvedType = resolveClassForHotReloading(resolvedType);\n      }\n    } else {\n      {\n        resolvedType = resolveFunctionForHotReloading(resolvedType);\n      }\n    }\n  } else if (typeof type === 'string') {\n    fiberTag = HostComponent;\n  } else {\n    getTag: switch (type) {\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, expirationTime, key);\n\n      case REACT_CONCURRENT_MODE_TYPE:\n        fiberTag = Mode;\n        mode |= ConcurrentMode | BlockingMode | StrictMode;\n        break;\n\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = Mode;\n        mode |= StrictMode;\n        break;\n\n      case REACT_PROFILER_TYPE:\n        return createFiberFromProfiler(pendingProps, mode, expirationTime, key);\n\n      case REACT_SUSPENSE_TYPE:\n        return createFiberFromSuspense(pendingProps, mode, expirationTime, key);\n\n      case REACT_SUSPENSE_LIST_TYPE:\n        return createFiberFromSuspenseList(pendingProps, mode, expirationTime, key);\n\n      default:\n        {\n          if (typeof type === 'object' && type !== null) {\n            switch (type.$$typeof) {\n              case REACT_PROVIDER_TYPE:\n                fiberTag = ContextProvider;\n                break getTag;\n\n              case REACT_CONTEXT_TYPE:\n                // This is a consumer\n                fiberTag = ContextConsumer;\n                break getTag;\n\n              case REACT_FORWARD_REF_TYPE:\n                fiberTag = ForwardRef;\n\n                {\n                  resolvedType = resolveForwardRefForHotReloading(resolvedType);\n                }\n\n                break getTag;\n\n              case REACT_MEMO_TYPE:\n                fiberTag = MemoComponent;\n                break getTag;\n\n              case REACT_LAZY_TYPE:\n                fiberTag = LazyComponent;\n                resolvedType = null;\n                break getTag;\n\n              case REACT_BLOCK_TYPE:\n                fiberTag = Block;\n                break getTag;\n\n            }\n          }\n\n          var info = '';\n\n          {\n            if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n              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.';\n            }\n\n            var ownerName = owner ? getComponentName(owner.type) : null;\n\n            if (ownerName) {\n              info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n            }\n          }\n\n          {\n            {\n              throw Error( \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" + (type == null ? type : typeof type) + \".\" + info );\n            }\n          }\n        }\n    }\n  }\n\n  fiber = createFiber(fiberTag, pendingProps, key, mode);\n  fiber.elementType = type;\n  fiber.type = resolvedType;\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\nfunction createFiberFromElement(element, mode, expirationTime) {\n  var owner = null;\n\n  {\n    owner = element._owner;\n  }\n\n  var type = element.type;\n  var key = element.key;\n  var pendingProps = element.props;\n  var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, expirationTime);\n\n  {\n    fiber._debugSource = element._source;\n    fiber._debugOwner = element._owner;\n  }\n\n  return fiber;\n}\nfunction createFiberFromFragment(elements, mode, expirationTime, key) {\n  var fiber = createFiber(Fragment, elements, key, mode);\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\n\nfunction createFiberFromProfiler(pendingProps, mode, expirationTime, key) {\n  {\n    if (typeof pendingProps.id !== 'string' || typeof pendingProps.onRender !== 'function') {\n      error('Profiler must specify an \"id\" string and \"onRender\" function as props');\n    }\n  }\n\n  var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode); // TODO: The Profiler fiber shouldn't have a type. It has a tag.\n\n  fiber.elementType = REACT_PROFILER_TYPE;\n  fiber.type = REACT_PROFILER_TYPE;\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\n\nfunction createFiberFromSuspense(pendingProps, mode, expirationTime, key) {\n  var fiber = createFiber(SuspenseComponent, pendingProps, key, mode); // TODO: The SuspenseComponent fiber shouldn't have a type. It has a tag.\n  // This needs to be fixed in getComponentName so that it relies on the tag\n  // instead.\n\n  fiber.type = REACT_SUSPENSE_TYPE;\n  fiber.elementType = REACT_SUSPENSE_TYPE;\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\nfunction createFiberFromSuspenseList(pendingProps, mode, expirationTime, key) {\n  var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);\n\n  {\n    // TODO: The SuspenseListComponent fiber shouldn't have a type. It has a tag.\n    // This needs to be fixed in getComponentName so that it relies on the tag\n    // instead.\n    fiber.type = REACT_SUSPENSE_LIST_TYPE;\n  }\n\n  fiber.elementType = REACT_SUSPENSE_LIST_TYPE;\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\nfunction createFiberFromText(content, mode, expirationTime) {\n  var fiber = createFiber(HostText, content, null, mode);\n  fiber.expirationTime = expirationTime;\n  return fiber;\n}\nfunction createFiberFromHostInstanceForDeletion() {\n  var fiber = createFiber(HostComponent, null, null, NoMode); // TODO: These should not need a type.\n\n  fiber.elementType = 'DELETED';\n  fiber.type = 'DELETED';\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, expirationTime) {\n  var pendingProps = portal.children !== null ? portal.children : [];\n  var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);\n  fiber.expirationTime = expirationTime;\n  fiber.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    // Used by persistent updates\n    implementation: portal.implementation\n  };\n  return fiber;\n} // Used for stashing WIP properties to replay failed work in DEV.\n\nfunction assignFiberPropertiesInDEV(target, source) {\n  if (target === null) {\n    // This Fiber's initial properties will always be overwritten.\n    // We only use a Fiber to ensure the same hidden class so DEV isn't slow.\n    target = createFiber(IndeterminateComponent, null, null, NoMode);\n  } // This is intentionally written as a list of all properties.\n  // We tried to use Object.assign() instead but this is called in\n  // the hottest path, and Object.assign() was too slow:\n  // https://github.com/facebook/react/issues/12502\n  // This code is DEV-only so size is not a concern.\n\n\n  target.tag = source.tag;\n  target.key = source.key;\n  target.elementType = source.elementType;\n  target.type = source.type;\n  target.stateNode = source.stateNode;\n  target.return = source.return;\n  target.child = source.child;\n  target.sibling = source.sibling;\n  target.index = source.index;\n  target.ref = source.ref;\n  target.pendingProps = source.pendingProps;\n  target.memoizedProps = source.memoizedProps;\n  target.updateQueue = source.updateQueue;\n  target.memoizedState = source.memoizedState;\n  target.dependencies = source.dependencies;\n  target.mode = source.mode;\n  target.effectTag = source.effectTag;\n  target.nextEffect = source.nextEffect;\n  target.firstEffect = source.firstEffect;\n  target.lastEffect = source.lastEffect;\n  target.expirationTime = source.expirationTime;\n  target.childExpirationTime = source.childExpirationTime;\n  target.alternate = source.alternate;\n\n  {\n    target.actualDuration = source.actualDuration;\n    target.actualStartTime = source.actualStartTime;\n    target.selfBaseDuration = source.selfBaseDuration;\n    target.treeBaseDuration = source.treeBaseDuration;\n  }\n\n  {\n    target._debugID = source._debugID;\n  }\n\n  target._debugSource = source._debugSource;\n  target._debugOwner = source._debugOwner;\n  target._debugIsCurrentlyTiming = source._debugIsCurrentlyTiming;\n  target._debugNeedsRemount = source._debugNeedsRemount;\n  target._debugHookTypes = source._debugHookTypes;\n  return target;\n}\n\nfunction FiberRootNode(containerInfo, tag, hydrate) {\n  this.tag = tag;\n  this.current = null;\n  this.containerInfo = containerInfo;\n  this.pendingChildren = null;\n  this.pingCache = null;\n  this.finishedExpirationTime = NoWork;\n  this.finishedWork = null;\n  this.timeoutHandle = noTimeout;\n  this.context = null;\n  this.pendingContext = null;\n  this.hydrate = hydrate;\n  this.callbackNode = null;\n  this.callbackPriority = NoPriority;\n  this.firstPendingTime = NoWork;\n  this.firstSuspendedTime = NoWork;\n  this.lastSuspendedTime = NoWork;\n  this.nextKnownPendingLevel = NoWork;\n  this.lastPingedTime = NoWork;\n  this.lastExpiredTime = NoWork;\n\n  {\n    this.interactionThreadID = tracing.unstable_getThreadID();\n    this.memoizedInteractions = new Set();\n    this.pendingInteractionMap = new Map();\n  }\n}\n\nfunction createFiberRoot(containerInfo, tag, hydrate, hydrationCallbacks) {\n  var root = new FiberRootNode(containerInfo, tag, hydrate);\n  // stateNode is any.\n\n\n  var uninitializedFiber = createHostRootFiber(tag);\n  root.current = uninitializedFiber;\n  uninitializedFiber.stateNode = root;\n  initializeUpdateQueue(uninitializedFiber);\n  return root;\n}\nfunction isRootSuspendedAtTime(root, expirationTime) {\n  var firstSuspendedTime = root.firstSuspendedTime;\n  var lastSuspendedTime = root.lastSuspendedTime;\n  return firstSuspendedTime !== NoWork && firstSuspendedTime >= expirationTime && lastSuspendedTime <= expirationTime;\n}\nfunction markRootSuspendedAtTime(root, expirationTime) {\n  var firstSuspendedTime = root.firstSuspendedTime;\n  var lastSuspendedTime = root.lastSuspendedTime;\n\n  if (firstSuspendedTime < expirationTime) {\n    root.firstSuspendedTime = expirationTime;\n  }\n\n  if (lastSuspendedTime > expirationTime || firstSuspendedTime === NoWork) {\n    root.lastSuspendedTime = expirationTime;\n  }\n\n  if (expirationTime <= root.lastPingedTime) {\n    root.lastPingedTime = NoWork;\n  }\n\n  if (expirationTime <= root.lastExpiredTime) {\n    root.lastExpiredTime = NoWork;\n  }\n}\nfunction markRootUpdatedAtTime(root, expirationTime) {\n  // Update the range of pending times\n  var firstPendingTime = root.firstPendingTime;\n\n  if (expirationTime > firstPendingTime) {\n    root.firstPendingTime = expirationTime;\n  } // Update the range of suspended times. Treat everything lower priority or\n  // equal to this update as unsuspended.\n\n\n  var firstSuspendedTime = root.firstSuspendedTime;\n\n  if (firstSuspendedTime !== NoWork) {\n    if (expirationTime >= firstSuspendedTime) {\n      // The entire suspended range is now unsuspended.\n      root.firstSuspendedTime = root.lastSuspendedTime = root.nextKnownPendingLevel = NoWork;\n    } else if (expirationTime >= root.lastSuspendedTime) {\n      root.lastSuspendedTime = expirationTime + 1;\n    } // This is a pending level. Check if it's higher priority than the next\n    // known pending level.\n\n\n    if (expirationTime > root.nextKnownPendingLevel) {\n      root.nextKnownPendingLevel = expirationTime;\n    }\n  }\n}\nfunction markRootFinishedAtTime(root, finishedExpirationTime, remainingExpirationTime) {\n  // Update the range of pending times\n  root.firstPendingTime = remainingExpirationTime; // Update the range of suspended times. Treat everything higher priority or\n  // equal to this update as unsuspended.\n\n  if (finishedExpirationTime <= root.lastSuspendedTime) {\n    // The entire suspended range is now unsuspended.\n    root.firstSuspendedTime = root.lastSuspendedTime = root.nextKnownPendingLevel = NoWork;\n  } else if (finishedExpirationTime <= root.firstSuspendedTime) {\n    // Part of the suspended range is now unsuspended. Narrow the range to\n    // include everything between the unsuspended time (non-inclusive) and the\n    // last suspended time.\n    root.firstSuspendedTime = finishedExpirationTime - 1;\n  }\n\n  if (finishedExpirationTime <= root.lastPingedTime) {\n    // Clear the pinged time\n    root.lastPingedTime = NoWork;\n  }\n\n  if (finishedExpirationTime <= root.lastExpiredTime) {\n    // Clear the expired time\n    root.lastExpiredTime = NoWork;\n  }\n}\nfunction markRootExpiredAtTime(root, expirationTime) {\n  var lastExpiredTime = root.lastExpiredTime;\n\n  if (lastExpiredTime === NoWork || lastExpiredTime > expirationTime) {\n    root.lastExpiredTime = expirationTime;\n  }\n}\n\nvar didWarnAboutNestedUpdates;\nvar didWarnAboutFindNodeInStrictMode;\n\n{\n  didWarnAboutNestedUpdates = false;\n  didWarnAboutFindNodeInStrictMode = {};\n}\n\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) {\n    return emptyContextObject;\n  }\n\n  var fiber = get(parentComponent);\n  var parentContext = findCurrentUnmaskedContext(fiber);\n\n  if (fiber.tag === ClassComponent) {\n    var Component = fiber.type;\n\n    if (isContextProvider(Component)) {\n      return processChildContext(fiber, Component, parentContext);\n    }\n  }\n\n  return parentContext;\n}\n\nfunction findHostInstanceWithWarning(component, methodName) {\n  {\n    var fiber = get(component);\n\n    if (fiber === undefined) {\n      if (typeof component.render === 'function') {\n        {\n          {\n            throw Error( \"Unable to find node on an unmounted component.\" );\n          }\n        }\n      } else {\n        {\n          {\n            throw Error( \"Argument appears to not be a ReactComponent. Keys: \" + Object.keys(component) );\n          }\n        }\n      }\n    }\n\n    var hostFiber = findCurrentHostFiber(fiber);\n\n    if (hostFiber === null) {\n      return null;\n    }\n\n    if (hostFiber.mode & StrictMode) {\n      var componentName = getComponentName(fiber.type) || 'Component';\n\n      if (!didWarnAboutFindNodeInStrictMode[componentName]) {\n        didWarnAboutFindNodeInStrictMode[componentName] = true;\n\n        if (fiber.mode & StrictMode) {\n          error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-find-node%s', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n        } else {\n          error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-find-node%s', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n        }\n      }\n    }\n\n    return hostFiber.stateNode;\n  }\n}\n\nfunction createContainer(containerInfo, tag, hydrate, hydrationCallbacks) {\n  return createFiberRoot(containerInfo, tag, hydrate);\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n  {\n    onScheduleRoot(container, element);\n  }\n\n  var current$1 = container.current;\n  var currentTime = requestCurrentTimeForUpdate();\n\n  {\n    // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n    if ('undefined' !== typeof jest) {\n      warnIfUnmockedScheduler(current$1);\n      warnIfNotScopedWithMatchingAct(current$1);\n    }\n  }\n\n  var suspenseConfig = requestCurrentSuspenseConfig();\n  var expirationTime = computeExpirationForFiber(currentTime, current$1, suspenseConfig);\n  var context = getContextForSubtree(parentComponent);\n\n  if (container.context === null) {\n    container.context = context;\n  } else {\n    container.pendingContext = context;\n  }\n\n  {\n    if (isRendering && current !== null && !didWarnAboutNestedUpdates) {\n      didWarnAboutNestedUpdates = true;\n\n      error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\\n\\n' + 'Check the render method of %s.', getComponentName(current.type) || 'Unknown');\n    }\n  }\n\n  var update = createUpdate(expirationTime, suspenseConfig); // Caution: React DevTools currently depends on this property\n  // being called \"element\".\n\n  update.payload = {\n    element: element\n  };\n  callback = callback === undefined ? null : callback;\n\n  if (callback !== null) {\n    {\n      if (typeof callback !== 'function') {\n        error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);\n      }\n    }\n\n    update.callback = callback;\n  }\n\n  enqueueUpdate(current$1, update);\n  scheduleWork(current$1, expirationTime);\n  return expirationTime;\n}\nfunction getPublicRootInstance(container) {\n  var containerFiber = container.current;\n\n  if (!containerFiber.child) {\n    return null;\n  }\n\n  switch (containerFiber.child.tag) {\n    case HostComponent:\n      return getPublicInstance(containerFiber.child.stateNode);\n\n    default:\n      return containerFiber.child.stateNode;\n  }\n}\n\nfunction markRetryTimeImpl(fiber, retryTime) {\n  var suspenseState = fiber.memoizedState;\n\n  if (suspenseState !== null && suspenseState.dehydrated !== null) {\n    if (suspenseState.retryTime < retryTime) {\n      suspenseState.retryTime = retryTime;\n    }\n  }\n} // Increases the priority of thennables when they resolve within this boundary.\n\n\nfunction markRetryTimeIfNotHydrated(fiber, retryTime) {\n  markRetryTimeImpl(fiber, retryTime);\n  var alternate = fiber.alternate;\n\n  if (alternate) {\n    markRetryTimeImpl(alternate, retryTime);\n  }\n}\n\nfunction attemptUserBlockingHydration$1(fiber) {\n  if (fiber.tag !== SuspenseComponent) {\n    // We ignore HostRoots here because we can't increase\n    // their priority and they should not suspend on I/O,\n    // since you have to wrap anything that might suspend in\n    // Suspense.\n    return;\n  }\n\n  var expTime = computeInteractiveExpiration(requestCurrentTimeForUpdate());\n  scheduleWork(fiber, expTime);\n  markRetryTimeIfNotHydrated(fiber, expTime);\n}\nfunction attemptContinuousHydration$1(fiber) {\n  if (fiber.tag !== SuspenseComponent) {\n    // We ignore HostRoots here because we can't increase\n    // their priority and they should not suspend on I/O,\n    // since you have to wrap anything that might suspend in\n    // Suspense.\n    return;\n  }\n\n  scheduleWork(fiber, ContinuousHydration);\n  markRetryTimeIfNotHydrated(fiber, ContinuousHydration);\n}\nfunction attemptHydrationAtCurrentPriority$1(fiber) {\n  if (fiber.tag !== SuspenseComponent) {\n    // We ignore HostRoots here because we can't increase\n    // their priority other than synchronously flush it.\n    return;\n  }\n\n  var currentTime = requestCurrentTimeForUpdate();\n  var expTime = computeExpirationForFiber(currentTime, fiber, null);\n  scheduleWork(fiber, expTime);\n  markRetryTimeIfNotHydrated(fiber, expTime);\n}\nfunction findHostInstanceWithNoPortals(fiber) {\n  var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n\n  if (hostFiber === null) {\n    return null;\n  }\n\n  if (hostFiber.tag === FundamentalComponent) {\n    return hostFiber.stateNode.instance;\n  }\n\n  return hostFiber.stateNode;\n}\n\nvar shouldSuspendImpl = function (fiber) {\n  return false;\n};\n\nfunction shouldSuspend(fiber) {\n  return shouldSuspendImpl(fiber);\n}\nvar overrideHookState = null;\nvar overrideProps = null;\nvar scheduleUpdate = null;\nvar setSuspenseHandler = null;\n\n{\n  var copyWithSetImpl = function (obj, path, idx, value) {\n    if (idx >= path.length) {\n      return value;\n    }\n\n    var key = path[idx];\n    var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj); // $FlowFixMe number or string is fine here\n\n    updated[key] = copyWithSetImpl(obj[key], path, idx + 1, value);\n    return updated;\n  };\n\n  var copyWithSet = function (obj, path, value) {\n    return copyWithSetImpl(obj, path, 0, value);\n  }; // Support DevTools editable values for useState and useReducer.\n\n\n  overrideHookState = function (fiber, id, path, value) {\n    // For now, the \"id\" of stateful hooks is just the stateful hook index.\n    // This may change in the future with e.g. nested hooks.\n    var currentHook = fiber.memoizedState;\n\n    while (currentHook !== null && id > 0) {\n      currentHook = currentHook.next;\n      id--;\n    }\n\n    if (currentHook !== null) {\n      var newState = copyWithSet(currentHook.memoizedState, path, value);\n      currentHook.memoizedState = newState;\n      currentHook.baseState = newState; // We aren't actually adding an update to the queue,\n      // because there is no update we can add for useReducer hooks that won't trigger an error.\n      // (There's no appropriate action type for DevTools overrides.)\n      // As a result though, React will see the scheduled update as a noop and bailout.\n      // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n      fiber.memoizedProps = _assign({}, fiber.memoizedProps);\n      scheduleWork(fiber, Sync);\n    }\n  }; // Support DevTools props for function components, forwardRef, memo, host components, etc.\n\n\n  overrideProps = function (fiber, path, value) {\n    fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);\n\n    if (fiber.alternate) {\n      fiber.alternate.pendingProps = fiber.pendingProps;\n    }\n\n    scheduleWork(fiber, Sync);\n  };\n\n  scheduleUpdate = function (fiber) {\n    scheduleWork(fiber, Sync);\n  };\n\n  setSuspenseHandler = function (newShouldSuspendImpl) {\n    shouldSuspendImpl = newShouldSuspendImpl;\n  };\n}\n\nfunction injectIntoDevTools(devToolsConfig) {\n  var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n  var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n  return injectInternals(_assign({}, devToolsConfig, {\n    overrideHookState: overrideHookState,\n    overrideProps: overrideProps,\n    setSuspenseHandler: setSuspenseHandler,\n    scheduleUpdate: scheduleUpdate,\n    currentDispatcherRef: ReactCurrentDispatcher,\n    findHostInstanceByFiber: function (fiber) {\n      var hostFiber = findCurrentHostFiber(fiber);\n\n      if (hostFiber === null) {\n        return null;\n      }\n\n      return hostFiber.stateNode;\n    },\n    findFiberByHostInstance: function (instance) {\n      if (!findFiberByHostInstance) {\n        // Might not be implemented by the renderer.\n        return null;\n      }\n\n      return findFiberByHostInstance(instance);\n    },\n    // React Refresh\n    findHostInstancesForRefresh:  findHostInstancesForRefresh ,\n    scheduleRefresh:  scheduleRefresh ,\n    scheduleRoot:  scheduleRoot ,\n    setRefreshHandler:  setRefreshHandler ,\n    // Enables DevTools to append owner stacks to error messages in DEV mode.\n    getCurrentFiber:  function () {\n      return current;\n    } \n  }));\n}\nvar IsSomeRendererActing$1 = ReactSharedInternals.IsSomeRendererActing;\n\nfunction ReactDOMRoot(container, options) {\n  this._internalRoot = createRootImpl(container, ConcurrentRoot, options);\n}\n\nfunction ReactDOMBlockingRoot(container, tag, options) {\n  this._internalRoot = createRootImpl(container, tag, options);\n}\n\nReactDOMRoot.prototype.render = ReactDOMBlockingRoot.prototype.render = function (children) {\n  var root = this._internalRoot;\n\n  {\n    if (typeof arguments[1] === 'function') {\n      error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n    }\n\n    var container = root.containerInfo;\n\n    if (container.nodeType !== COMMENT_NODE) {\n      var hostInstance = findHostInstanceWithNoPortals(root.current);\n\n      if (hostInstance) {\n        if (hostInstance.parentNode !== container) {\n          error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + \"root.unmount() to empty a root's container.\");\n        }\n      }\n    }\n  }\n\n  updateContainer(children, root, null, null);\n};\n\nReactDOMRoot.prototype.unmount = ReactDOMBlockingRoot.prototype.unmount = function () {\n  {\n    if (typeof arguments[0] === 'function') {\n      error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n    }\n  }\n\n  var root = this._internalRoot;\n  var container = root.containerInfo;\n  updateContainer(null, root, null, function () {\n    unmarkContainerAsRoot(container);\n  });\n};\n\nfunction createRootImpl(container, tag, options) {\n  // Tag is either LegacyRoot or Concurrent Root\n  var hydrate = options != null && options.hydrate === true;\n  var hydrationCallbacks = options != null && options.hydrationOptions || null;\n  var root = createContainer(container, tag, hydrate);\n  markContainerAsRoot(root.current, container);\n\n  if (hydrate && tag !== LegacyRoot) {\n    var doc = container.nodeType === DOCUMENT_NODE ? container : container.ownerDocument;\n    eagerlyTrapReplayableEvents(container, doc);\n  }\n\n  return root;\n}\nfunction createLegacyRoot(container, options) {\n  return new ReactDOMBlockingRoot(container, LegacyRoot, options);\n}\nfunction isValidContainer(node) {\n  return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));\n}\n\nvar ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;\nvar topLevelUpdateWarnings;\nvar warnedAboutHydrateAPI = false;\n\n{\n  topLevelUpdateWarnings = function (container) {\n    if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {\n      var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer._internalRoot.current);\n\n      if (hostInstance) {\n        if (hostInstance.parentNode !== container) {\n          error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');\n        }\n      }\n    }\n\n    var isRootRenderedBySomeReact = !!container._reactRootContainer;\n    var rootEl = getReactRootElementInContainer(container);\n    var hasNonRootReactChild = !!(rootEl && getInstanceFromNode$1(rootEl));\n\n    if (hasNonRootReactChild && !isRootRenderedBySomeReact) {\n      error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');\n    }\n\n    if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {\n      error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');\n    }\n  };\n}\n\nfunction getReactRootElementInContainer(container) {\n  if (!container) {\n    return null;\n  }\n\n  if (container.nodeType === DOCUMENT_NODE) {\n    return container.documentElement;\n  } else {\n    return container.firstChild;\n  }\n}\n\nfunction shouldHydrateDueToLegacyHeuristic(container) {\n  var rootElement = getReactRootElementInContainer(container);\n  return !!(rootElement && rootElement.nodeType === ELEMENT_NODE && rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME));\n}\n\nfunction legacyCreateRootFromDOMContainer(container, forceHydrate) {\n  var shouldHydrate = forceHydrate || shouldHydrateDueToLegacyHeuristic(container); // First clear any existing content.\n\n  if (!shouldHydrate) {\n    var warned = false;\n    var rootSibling;\n\n    while (rootSibling = container.lastChild) {\n      {\n        if (!warned && rootSibling.nodeType === ELEMENT_NODE && rootSibling.hasAttribute(ROOT_ATTRIBUTE_NAME)) {\n          warned = true;\n\n          error('render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.');\n        }\n      }\n\n      container.removeChild(rootSibling);\n    }\n  }\n\n  {\n    if (shouldHydrate && !forceHydrate && !warnedAboutHydrateAPI) {\n      warnedAboutHydrateAPI = true;\n\n      warn('render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + 'will stop working in React v17. Replace the ReactDOM.render() call ' + 'with ReactDOM.hydrate() if you want React to attach to the server HTML.');\n    }\n  }\n\n  return createLegacyRoot(container, shouldHydrate ? {\n    hydrate: true\n  } : undefined);\n}\n\nfunction warnOnInvalidCallback$1(callback, callerName) {\n  {\n    if (callback !== null && typeof callback !== 'function') {\n      error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n    }\n  }\n}\n\nfunction legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {\n  {\n    topLevelUpdateWarnings(container);\n    warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');\n  } // TODO: Without `any` type, Flow says \"Property cannot be accessed on any\n  // member of intersection type.\" Whyyyyyy.\n\n\n  var root = container._reactRootContainer;\n  var fiberRoot;\n\n  if (!root) {\n    // Initial mount\n    root = container._reactRootContainer = legacyCreateRootFromDOMContainer(container, forceHydrate);\n    fiberRoot = root._internalRoot;\n\n    if (typeof callback === 'function') {\n      var originalCallback = callback;\n\n      callback = function () {\n        var instance = getPublicRootInstance(fiberRoot);\n        originalCallback.call(instance);\n      };\n    } // Initial mount should not be batched.\n\n\n    unbatchedUpdates(function () {\n      updateContainer(children, fiberRoot, parentComponent, callback);\n    });\n  } else {\n    fiberRoot = root._internalRoot;\n\n    if (typeof callback === 'function') {\n      var _originalCallback = callback;\n\n      callback = function () {\n        var instance = getPublicRootInstance(fiberRoot);\n\n        _originalCallback.call(instance);\n      };\n    } // Update\n\n\n    updateContainer(children, fiberRoot, parentComponent, callback);\n  }\n\n  return getPublicRootInstance(fiberRoot);\n}\n\nfunction findDOMNode(componentOrElement) {\n  {\n    var owner = ReactCurrentOwner$3.current;\n\n    if (owner !== null && owner.stateNode !== null) {\n      var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;\n\n      if (!warnedAboutRefsInRender) {\n        error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(owner.type) || 'A component');\n      }\n\n      owner.stateNode._warnedAboutRefsInRender = true;\n    }\n  }\n\n  if (componentOrElement == null) {\n    return null;\n  }\n\n  if (componentOrElement.nodeType === ELEMENT_NODE) {\n    return componentOrElement;\n  }\n\n  {\n    return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');\n  }\n}\nfunction hydrate(element, container, callback) {\n  if (!isValidContainer(container)) {\n    {\n      throw Error( \"Target container is not a DOM element.\" );\n    }\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call createRoot(container, {hydrate: true}).render(element)?');\n    }\n  } // TODO: throw or warn if we couldn't hydrate?\n\n\n  return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);\n}\nfunction render(element, container, callback) {\n  if (!isValidContainer(container)) {\n    {\n      throw Error( \"Target container is not a DOM element.\" );\n    }\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');\n    }\n  }\n\n  return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);\n}\nfunction unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n  if (!isValidContainer(containerNode)) {\n    {\n      throw Error( \"Target container is not a DOM element.\" );\n    }\n  }\n\n  if (!(parentComponent != null && has(parentComponent))) {\n    {\n      throw Error( \"parentComponent must be a valid React Component\" );\n    }\n  }\n\n  return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);\n}\nfunction unmountComponentAtNode(container) {\n  if (!isValidContainer(container)) {\n    {\n      throw Error( \"unmountComponentAtNode(...): Target container is not a DOM element.\" );\n    }\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. Did you mean to call root.unmount()?');\n    }\n  }\n\n  if (container._reactRootContainer) {\n    {\n      var rootEl = getReactRootElementInContainer(container);\n      var renderedByDifferentReact = rootEl && !getInstanceFromNode$1(rootEl);\n\n      if (renderedByDifferentReact) {\n        error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by another copy of React.');\n      }\n    } // Unmount should not be batched.\n\n\n    unbatchedUpdates(function () {\n      legacyRenderSubtreeIntoContainer(null, null, container, false, function () {\n        // $FlowFixMe This should probably use `delete container._reactRootContainer`\n        container._reactRootContainer = null;\n        unmarkContainerAsRoot(container);\n      });\n    }); // If you call unmountComponentAtNode twice in quick succession, you'll\n    // get `true` twice. That's probably fine?\n\n    return true;\n  } else {\n    {\n      var _rootEl = getReactRootElementInContainer(container);\n\n      var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode$1(_rootEl)); // Check if the container itself is a React root node.\n\n      var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainer(container.parentNode) && !!container.parentNode._reactRootContainer;\n\n      if (hasNonRootReactChild) {\n        error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');\n      }\n    }\n\n    return false;\n  }\n}\n\nfunction createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n  var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n  return {\n    // This tag allow us to uniquely identify this as a React Portal\n    $$typeof: REACT_PORTAL_TYPE,\n    key: key == null ? null : '' + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\n\nvar ReactVersion = '16.13.1';\n\nsetAttemptUserBlockingHydration(attemptUserBlockingHydration$1);\nsetAttemptContinuousHydration(attemptContinuousHydration$1);\nsetAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);\nvar didWarnAboutUnstableCreatePortal = false;\n\n{\n  if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype\n  Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype\n  Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {\n    error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n  }\n}\n\nsetRestoreImplementation(restoreControlledState$3);\nsetBatchingImplementation(batchedUpdates$1, discreteUpdates$1, flushDiscreteUpdates, batchedEventUpdates$1);\n\nfunction createPortal$1(children, container) {\n  var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  if (!isValidContainer(container)) {\n    {\n      throw Error( \"Target container is not a DOM element.\" );\n    }\n  } // TODO: pass ReactDOM portal implementation as third argument\n  // $FlowFixMe The Flow type is opaque but there's no way to actually create it.\n\n\n  return createPortal(children, container, null, key);\n}\n\nfunction renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n\n  return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);\n}\n\nfunction unstable_createPortal(children, container) {\n  var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  {\n    if (!didWarnAboutUnstableCreatePortal) {\n      didWarnAboutUnstableCreatePortal = true;\n\n      warn('The ReactDOM.unstable_createPortal() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactDOM.createPortal() instead. It has the exact same API, ' + 'but without the \"unstable_\" prefix.');\n    }\n  }\n\n  return createPortal$1(children, container, key);\n}\n\nvar Internals = {\n  // Keep in sync with ReactDOMUnstableNativeDependencies.js\n  // ReactTestUtils.js, and ReactTestUtilsAct.js. This is an array for better minification.\n  Events: [getInstanceFromNode$1, getNodeFromInstance$1, getFiberCurrentPropsFromNode$1, injectEventPluginsByName, eventNameDispatchConfigs, accumulateTwoPhaseDispatches, accumulateDirectDispatches, enqueueStateRestore, restoreStateIfNeeded, dispatchEvent, runEventsInBatch, flushPassiveEffects, IsThisRendererActing]\n};\nvar foundDevTools = injectIntoDevTools({\n  findFiberByHostInstance: getClosestInstanceFromNode,\n  bundleType:  1 ,\n  version: ReactVersion,\n  rendererPackageName: 'react-dom'\n});\n\n{\n  if (!foundDevTools && canUseDOM && window.top === window.self) {\n    // If we're in Chrome or Firefox, provide a download link if not installed.\n    if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n      var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.\n\n      if (/^(https?|file):$/.test(protocol)) {\n        // eslint-disable-next-line react-internal/no-production-logging\n        console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://fb.me/react-devtools' + (protocol === 'file:' ? '\\nYou might need to use a local HTTP server (instead of file://): ' + 'https://fb.me/react-devtools-faq' : ''), 'font-weight:bold');\n      }\n    }\n  }\n}\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\nexports.createPortal = createPortal$1;\nexports.findDOMNode = findDOMNode;\nexports.flushSync = flushSync;\nexports.hydrate = hydrate;\nexports.render = render;\nexports.unmountComponentAtNode = unmountComponentAtNode;\nexports.unstable_batchedUpdates = batchedUpdates$1;\nexports.unstable_createPortal = unstable_createPortal;\nexports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;\nexports.version = ReactVersion;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-dom/cjs/react-dom.development.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-dom/index.js":
+/*!*****************************************************!*\
+  !*** ./jaas-client/node_modules/react-dom/index.js ***!
+  \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (true) {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"./jaas-client/node_modules/react-dom/cjs/react-dom.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-dom/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-input-emoji/dist/index.es.js":
+/*!*********************************************************************!*\
+  !*** ./jaas-client/node_modules/react-input-emoji/dist/index.es.js ***!
+  \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nfunction styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css = \".emoji-mart,\\n.emoji-mart * {\\n  box-sizing: border-box;\\n  line-height: 1.15;\\n}\\n\\n.emoji-mart {\\n  font-family: -apple-system, BlinkMacSystemFont, \\\"Helvetica Neue\\\", sans-serif;\\n  font-size: 16px;\\n  display: inline-block;\\n  color: #222427;\\n  border: 1px solid #d9d9d9;\\n  border-radius: 5px;\\n  background: #fff;\\n}\\n\\n.emoji-mart .emoji-mart-emoji {\\n  padding: 6px;\\n}\\n\\n.emoji-mart-bar {\\n  border: 0 solid #d9d9d9;\\n}\\n.emoji-mart-bar:first-child {\\n  border-bottom-width: 1px;\\n  border-top-left-radius: 5px;\\n  border-top-right-radius: 5px;\\n}\\n.emoji-mart-bar:last-child {\\n  border-top-width: 1px;\\n  border-bottom-left-radius: 5px;\\n  border-bottom-right-radius: 5px;\\n}\\n\\n.emoji-mart-anchors {\\n  display: flex;\\n  flex-direction: row;\\n  justify-content: space-between;\\n  padding: 0 6px;\\n  color: #858585;\\n  line-height: 0;\\n}\\n\\n.emoji-mart-anchor {\\n  position: relative;\\n  display: block;\\n  flex: 1 1 auto;\\n  text-align: center;\\n  padding: 12px 4px;\\n  overflow: hidden;\\n  transition: color .1s ease-out;\\n  margin: 0;\\n  box-shadow: none;\\n  background: none;\\n  border: none;\\n}\\n.emoji-mart-anchor:hover,\\n.emoji-mart-anchor-selected {\\n  color: #464646;\\n}\\n\\n.emoji-mart-anchor-selected .emoji-mart-anchor-bar {\\n  bottom: 0;\\n}\\n\\n.emoji-mart-anchor-bar {\\n  position: absolute;\\n  bottom: -3px; left: 0;\\n  width: 100%; height: 3px;\\n  background-color: #464646;\\n}\\n\\n.emoji-mart-anchors i {\\n  display: inline-block;\\n  width: 100%;\\n  max-width: 22px;\\n}\\n\\n.emoji-mart-anchors svg,\\n.emoji-mart-anchors img {\\n  fill: #858585;\\n  height: 18px;\\n  width: 18px;\\n}\\n\\n.emoji-mart-scroll {\\n  overflow-y: scroll;\\n  height: 270px;\\n  padding: 0 6px 6px 6px;\\n  will-change: transform; /* avoids \\\"repaints on scroll\\\" in mobile Chrome */\\n}\\n\\n.emoji-mart-search {\\n  margin-top: 6px;\\n  padding: 0 6px;\\n  position: relative;\\n}\\n\\n.emoji-mart-search input {\\n  font-size: 16px;\\n  display: block;\\n  width: 100%;\\n  padding: 5px 25px 6px 10px;\\n  border-radius: 5px;\\n  border: 1px solid #d9d9d9;\\n  outline: 0;\\n}\\n\\n.emoji-mart-search input,\\n.emoji-mart-search input::-webkit-search-decoration,\\n.emoji-mart-search input::-webkit-search-cancel-button,\\n.emoji-mart-search input::-webkit-search-results-button,\\n.emoji-mart-search input::-webkit-search-results-decoration {\\n  /* remove webkit/blink styles for <input type=\\\"search\\\">\\n   * via https://stackoverflow.com/a/9422689 */\\n  -webkit-appearance: none;\\n}\\n\\n.emoji-mart-search-icon {\\n  position: absolute;\\n  top: 7px;\\n  right: 11px;\\n  z-index: 2;\\n  padding: 2px 5px 1px;\\n  border: none;\\n  background: none;\\n}\\n\\n.emoji-mart-category .emoji-mart-emoji span {\\n  z-index: 1;\\n  position: relative;\\n  text-align: center;\\n  cursor: default;\\n}\\n\\n.emoji-mart-category .emoji-mart-emoji:hover:before {\\n  z-index: 0;\\n  content: \\\"\\\";\\n  position: absolute;\\n  top: 0; left: 0;\\n  width: 100%; height: 100%;\\n  background-color: #f4f4f4;\\n  border-radius: 100%;\\n}\\n\\n.emoji-mart-category-label {\\n  z-index: 2;\\n  position: relative;\\n  position: -webkit-sticky;\\n  position: sticky;\\n  top: 0;\\n}\\n\\n.emoji-mart-category-label span {\\n  display: block;\\n  width: 100%;\\n  font-weight: 500;\\n  padding: 5px 6px;\\n  background-color: #fff;\\n  background-color: rgba(255, 255, 255, .95);\\n}\\n\\n.emoji-mart-category-list {\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n.emoji-mart-category-list li {\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n  display: inline-block;\\n}\\n\\n.emoji-mart-emoji {\\n  position: relative;\\n  display: inline-block;\\n  font-size: 0;\\n  margin: 0;\\n  padding: 0;\\n  border: none;\\n  background: none;\\n  box-shadow: none;\\n}\\n\\n.emoji-mart-emoji-native {\\n  font-family: \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Segoe UI\\\", \\\"Apple Color Emoji\\\", \\\"Twemoji Mozilla\\\", \\\"Noto Color Emoji\\\", \\\"EmojiOne Color\\\", \\\"Android Emoji\\\";\\n}\\n\\n.emoji-mart-no-results {\\n  font-size: 14px;\\n  text-align: center;\\n  padding-top: 70px;\\n  color: #858585;\\n}\\n.emoji-mart-no-results-img {\\n  display: block;\\n  margin-left: auto;\\n  margin-right: auto;\\n  width: 50%;\\n}\\n.emoji-mart-no-results .emoji-mart-category-label {\\n  display: none;\\n}\\n.emoji-mart-no-results .emoji-mart-no-results-label {\\n  margin-top: .2em;\\n}\\n.emoji-mart-no-results .emoji-mart-emoji:hover:before {\\n  content: none;\\n}\\n\\n.emoji-mart-preview {\\n  position: relative;\\n  height: 70px;\\n}\\n\\n.emoji-mart-preview-emoji,\\n.emoji-mart-preview-data,\\n.emoji-mart-preview-skins {\\n  position: absolute;\\n  top: 50%;\\n  transform: translateY(-50%);\\n}\\n\\n.emoji-mart-preview-emoji {\\n  left: 12px;\\n}\\n\\n.emoji-mart-preview-data {\\n  left: 68px; right: 12px;\\n  word-break: break-all;\\n}\\n\\n.emoji-mart-preview-skins {\\n  right: 30px;\\n  text-align: right;\\n}\\n\\n.emoji-mart-preview-skins.custom {\\n  right: 10px;\\n  text-align: right;\\n}\\n\\n.emoji-mart-preview-name {\\n  font-size: 14px;\\n}\\n\\n.emoji-mart-preview-shortname {\\n  font-size: 12px;\\n  color: #888;\\n}\\n.emoji-mart-preview-shortname + .emoji-mart-preview-shortname,\\n.emoji-mart-preview-shortname + .emoji-mart-preview-emoticon,\\n.emoji-mart-preview-emoticon + .emoji-mart-preview-emoticon {\\n  margin-left: .5em;\\n}\\n\\n.emoji-mart-preview-emoticon {\\n  font-size: 11px;\\n  color: #bbb;\\n}\\n\\n.emoji-mart-title span {\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n.emoji-mart-title .emoji-mart-emoji {\\n  padding: 0;\\n}\\n\\n.emoji-mart-title-label {\\n  color: #999A9C;\\n  font-size: 26px;\\n  font-weight: 300;\\n}\\n\\n.emoji-mart-skin-swatches {\\n  font-size: 0;\\n  padding: 2px 0;\\n  border: 1px solid #d9d9d9;\\n  border-radius: 12px;\\n  background-color: #fff;\\n}\\n\\n.emoji-mart-skin-swatches.custom {\\n  font-size: 0;\\n  border: none;\\n  background-color: #fff;\\n}\\n\\n.emoji-mart-skin-swatches.opened .emoji-mart-skin-swatch {\\n  width: 16px;\\n  padding: 0 2px;\\n}\\n\\n.emoji-mart-skin-swatches.opened .emoji-mart-skin-swatch.selected:after {\\n  opacity: .75;\\n}\\n\\n.emoji-mart-skin-swatch {\\n  display: inline-block;\\n  width: 0;\\n  vertical-align: middle;\\n  transition-property: width, padding;\\n  transition-duration: .125s;\\n  transition-timing-function: ease-out;\\n}\\n\\n.emoji-mart-skin-swatch:nth-child(1) { transition-delay: 0s }\\n.emoji-mart-skin-swatch:nth-child(2) { transition-delay: .03s }\\n.emoji-mart-skin-swatch:nth-child(3) { transition-delay: .06s }\\n.emoji-mart-skin-swatch:nth-child(4) { transition-delay: .09s }\\n.emoji-mart-skin-swatch:nth-child(5) { transition-delay: .12s }\\n.emoji-mart-skin-swatch:nth-child(6) { transition-delay: .15s }\\n\\n.emoji-mart-skin-swatch.selected {\\n  position: relative;\\n  width: 16px;\\n  padding: 0 2px;\\n}\\n\\n.emoji-mart-skin-swatch.selected:after {\\n  content: \\\"\\\";\\n  position: absolute;\\n  top: 50%; left: 50%;\\n  width: 4px; height: 4px;\\n  margin: -2px 0 0 -2px;\\n  background-color: #fff;\\n  border-radius: 100%;\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: opacity .2s ease-out;\\n}\\n\\n.emoji-mart-skin-swatch.custom {\\n  display: inline-block;\\n  width: 0;\\n  height: 38px;\\n  overflow: hidden;\\n  vertical-align: middle;\\n  transition-property: width, height;\\n  transition-duration: .125s;\\n  transition-timing-function: ease-out;\\n  cursor: default;\\n}\\n\\n.emoji-mart-skin-swatch.custom.selected {\\n  position: relative;\\n  width: 36px;\\n  height: 38px;\\n  padding: 0 2px 0 0;\\n}\\n\\n.emoji-mart-skin-swatch.custom.selected:after {\\n  content: \\\"\\\";\\n  width: 0;\\n  height: 0;\\n}\\n\\n.emoji-mart-skin-swatches.custom .emoji-mart-skin-swatch.custom:hover {\\n  background-color: #f4f4f4;\\n  border-radius: 10%;\\n}\\n\\n.emoji-mart-skin-swatches.custom.opened .emoji-mart-skin-swatch.custom {\\n  width: 36px;\\n  height: 38px;\\n  padding: 0 2px 0 0;\\n}\\n\\n.emoji-mart-skin-swatches.custom.opened .emoji-mart-skin-swatch.custom.selected:after {\\n  opacity: .75;\\n}\\n\\n.emoji-mart-skin-text.opened {\\n  display: inline-block;\\n  vertical-align: middle;\\n  text-align: left;\\n  color: #888;\\n  font-size: 11px;\\n  padding: 5px 2px;\\n  width: 95px;\\n  height: 40px;\\n  border-radius: 10%;\\n  background-color: #fff;\\n}\\n\\n.emoji-mart-skin {\\n  display: inline-block;\\n  width: 100%;\\n  padding-top: 100%;\\n  max-width: 12px;\\n  border-radius: 100%;\\n}\\n\\n.emoji-mart-skin-tone-1 { background-color: #ffc93a }\\n.emoji-mart-skin-tone-2 { background-color: #fadcbc }\\n.emoji-mart-skin-tone-3 { background-color: #e0bb95 }\\n.emoji-mart-skin-tone-4 { background-color: #bf8f68 }\\n.emoji-mart-skin-tone-5 { background-color: #9b643d }\\n.emoji-mart-skin-tone-6 { background-color: #594539 }\\n\\n/* For screenreaders only, via https://stackoverflow.com/a/19758620 */\\n.emoji-mart-sr-only {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  border: 0;\\n}\\n\\n\\n\";\nstyleInject(css);\n\nvar compressed = true;\nvar categories = [\n\t{\n\t\tid: \"people\",\n\t\tname: \"Smileys & People\",\n\t\temojis: [\n\t\t\t\"grinning\",\n\t\t\t\"grin\",\n\t\t\t\"joy\",\n\t\t\t\"rolling_on_the_floor_laughing\",\n\t\t\t\"smiley\",\n\t\t\t\"smile\",\n\t\t\t\"sweat_smile\",\n\t\t\t\"laughing\",\n\t\t\t\"wink\",\n\t\t\t\"blush\",\n\t\t\t\"yum\",\n\t\t\t\"sunglasses\",\n\t\t\t\"heart_eyes\",\n\t\t\t\"kissing_heart\",\n\t\t\t\"kissing\",\n\t\t\t\"kissing_smiling_eyes\",\n\t\t\t\"kissing_closed_eyes\",\n\t\t\t\"relaxed\",\n\t\t\t\"slightly_smiling_face\",\n\t\t\t\"hugging_face\",\n\t\t\t\"star-struck\",\n\t\t\t\"thinking_face\",\n\t\t\t\"face_with_raised_eyebrow\",\n\t\t\t\"neutral_face\",\n\t\t\t\"expressionless\",\n\t\t\t\"no_mouth\",\n\t\t\t\"face_with_rolling_eyes\",\n\t\t\t\"smirk\",\n\t\t\t\"persevere\",\n\t\t\t\"disappointed_relieved\",\n\t\t\t\"open_mouth\",\n\t\t\t\"zipper_mouth_face\",\n\t\t\t\"hushed\",\n\t\t\t\"sleepy\",\n\t\t\t\"tired_face\",\n\t\t\t\"sleeping\",\n\t\t\t\"relieved\",\n\t\t\t\"stuck_out_tongue\",\n\t\t\t\"stuck_out_tongue_winking_eye\",\n\t\t\t\"stuck_out_tongue_closed_eyes\",\n\t\t\t\"drooling_face\",\n\t\t\t\"unamused\",\n\t\t\t\"sweat\",\n\t\t\t\"pensive\",\n\t\t\t\"confused\",\n\t\t\t\"upside_down_face\",\n\t\t\t\"money_mouth_face\",\n\t\t\t\"astonished\",\n\t\t\t\"white_frowning_face\",\n\t\t\t\"slightly_frowning_face\",\n\t\t\t\"confounded\",\n\t\t\t\"disappointed\",\n\t\t\t\"worried\",\n\t\t\t\"triumph\",\n\t\t\t\"cry\",\n\t\t\t\"sob\",\n\t\t\t\"frowning\",\n\t\t\t\"anguished\",\n\t\t\t\"fearful\",\n\t\t\t\"weary\",\n\t\t\t\"exploding_head\",\n\t\t\t\"grimacing\",\n\t\t\t\"cold_sweat\",\n\t\t\t\"scream\",\n\t\t\t\"flushed\",\n\t\t\t\"zany_face\",\n\t\t\t\"dizzy_face\",\n\t\t\t\"rage\",\n\t\t\t\"angry\",\n\t\t\t\"face_with_symbols_on_mouth\",\n\t\t\t\"mask\",\n\t\t\t\"face_with_thermometer\",\n\t\t\t\"face_with_head_bandage\",\n\t\t\t\"nauseated_face\",\n\t\t\t\"face_vomiting\",\n\t\t\t\"sneezing_face\",\n\t\t\t\"innocent\",\n\t\t\t\"face_with_cowboy_hat\",\n\t\t\t\"clown_face\",\n\t\t\t\"lying_face\",\n\t\t\t\"shushing_face\",\n\t\t\t\"face_with_hand_over_mouth\",\n\t\t\t\"face_with_monocle\",\n\t\t\t\"nerd_face\",\n\t\t\t\"smiling_imp\",\n\t\t\t\"imp\",\n\t\t\t\"japanese_ogre\",\n\t\t\t\"japanese_goblin\",\n\t\t\t\"skull\",\n\t\t\t\"skull_and_crossbones\",\n\t\t\t\"ghost\",\n\t\t\t\"alien\",\n\t\t\t\"space_invader\",\n\t\t\t\"robot_face\",\n\t\t\t\"hankey\",\n\t\t\t\"smiley_cat\",\n\t\t\t\"smile_cat\",\n\t\t\t\"joy_cat\",\n\t\t\t\"heart_eyes_cat\",\n\t\t\t\"smirk_cat\",\n\t\t\t\"kissing_cat\",\n\t\t\t\"scream_cat\",\n\t\t\t\"crying_cat_face\",\n\t\t\t\"pouting_cat\",\n\t\t\t\"see_no_evil\",\n\t\t\t\"hear_no_evil\",\n\t\t\t\"speak_no_evil\",\n\t\t\t\"baby\",\n\t\t\t\"child\",\n\t\t\t\"boy\",\n\t\t\t\"girl\",\n\t\t\t\"adult\",\n\t\t\t\"man\",\n\t\t\t\"woman\",\n\t\t\t\"older_adult\",\n\t\t\t\"older_man\",\n\t\t\t\"older_woman\",\n\t\t\t\"male-doctor\",\n\t\t\t\"female-doctor\",\n\t\t\t\"male-student\",\n\t\t\t\"female-student\",\n\t\t\t\"male-teacher\",\n\t\t\t\"female-teacher\",\n\t\t\t\"male-judge\",\n\t\t\t\"female-judge\",\n\t\t\t\"male-farmer\",\n\t\t\t\"female-farmer\",\n\t\t\t\"male-cook\",\n\t\t\t\"female-cook\",\n\t\t\t\"male-mechanic\",\n\t\t\t\"female-mechanic\",\n\t\t\t\"male-factory-worker\",\n\t\t\t\"female-factory-worker\",\n\t\t\t\"male-office-worker\",\n\t\t\t\"female-office-worker\",\n\t\t\t\"male-scientist\",\n\t\t\t\"female-scientist\",\n\t\t\t\"male-technologist\",\n\t\t\t\"female-technologist\",\n\t\t\t\"male-singer\",\n\t\t\t\"female-singer\",\n\t\t\t\"male-artist\",\n\t\t\t\"female-artist\",\n\t\t\t\"male-pilot\",\n\t\t\t\"female-pilot\",\n\t\t\t\"male-astronaut\",\n\t\t\t\"female-astronaut\",\n\t\t\t\"male-firefighter\",\n\t\t\t\"female-firefighter\",\n\t\t\t\"cop\",\n\t\t\t\"male-police-officer\",\n\t\t\t\"female-police-officer\",\n\t\t\t\"sleuth_or_spy\",\n\t\t\t\"male-detective\",\n\t\t\t\"female-detective\",\n\t\t\t\"guardsman\",\n\t\t\t\"male-guard\",\n\t\t\t\"female-guard\",\n\t\t\t\"construction_worker\",\n\t\t\t\"male-construction-worker\",\n\t\t\t\"female-construction-worker\",\n\t\t\t\"prince\",\n\t\t\t\"princess\",\n\t\t\t\"man_with_turban\",\n\t\t\t\"man-wearing-turban\",\n\t\t\t\"woman-wearing-turban\",\n\t\t\t\"man_with_gua_pi_mao\",\n\t\t\t\"person_with_headscarf\",\n\t\t\t\"bearded_person\",\n\t\t\t\"person_with_blond_hair\",\n\t\t\t\"blond-haired-man\",\n\t\t\t\"blond-haired-woman\",\n\t\t\t\"man_in_tuxedo\",\n\t\t\t\"bride_with_veil\",\n\t\t\t\"pregnant_woman\",\n\t\t\t\"breast-feeding\",\n\t\t\t\"angel\",\n\t\t\t\"santa\",\n\t\t\t\"mrs_claus\",\n\t\t\t\"mage\",\n\t\t\t\"female_mage\",\n\t\t\t\"male_mage\",\n\t\t\t\"fairy\",\n\t\t\t\"female_fairy\",\n\t\t\t\"male_fairy\",\n\t\t\t\"vampire\",\n\t\t\t\"female_vampire\",\n\t\t\t\"male_vampire\",\n\t\t\t\"merperson\",\n\t\t\t\"mermaid\",\n\t\t\t\"merman\",\n\t\t\t\"elf\",\n\t\t\t\"female_elf\",\n\t\t\t\"male_elf\",\n\t\t\t\"genie\",\n\t\t\t\"female_genie\",\n\t\t\t\"male_genie\",\n\t\t\t\"zombie\",\n\t\t\t\"female_zombie\",\n\t\t\t\"male_zombie\",\n\t\t\t\"person_frowning\",\n\t\t\t\"man-frowning\",\n\t\t\t\"woman-frowning\",\n\t\t\t\"person_with_pouting_face\",\n\t\t\t\"man-pouting\",\n\t\t\t\"woman-pouting\",\n\t\t\t\"no_good\",\n\t\t\t\"man-gesturing-no\",\n\t\t\t\"woman-gesturing-no\",\n\t\t\t\"ok_woman\",\n\t\t\t\"man-gesturing-ok\",\n\t\t\t\"woman-gesturing-ok\",\n\t\t\t\"information_desk_person\",\n\t\t\t\"man-tipping-hand\",\n\t\t\t\"woman-tipping-hand\",\n\t\t\t\"raising_hand\",\n\t\t\t\"man-raising-hand\",\n\t\t\t\"woman-raising-hand\",\n\t\t\t\"bow\",\n\t\t\t\"man-bowing\",\n\t\t\t\"woman-bowing\",\n\t\t\t\"face_palm\",\n\t\t\t\"man-facepalming\",\n\t\t\t\"woman-facepalming\",\n\t\t\t\"shrug\",\n\t\t\t\"man-shrugging\",\n\t\t\t\"woman-shrugging\",\n\t\t\t\"massage\",\n\t\t\t\"man-getting-massage\",\n\t\t\t\"woman-getting-massage\",\n\t\t\t\"haircut\",\n\t\t\t\"man-getting-haircut\",\n\t\t\t\"woman-getting-haircut\",\n\t\t\t\"walking\",\n\t\t\t\"man-walking\",\n\t\t\t\"woman-walking\",\n\t\t\t\"runner\",\n\t\t\t\"man-running\",\n\t\t\t\"woman-running\",\n\t\t\t\"dancer\",\n\t\t\t\"man_dancing\",\n\t\t\t\"dancers\",\n\t\t\t\"man-with-bunny-ears-partying\",\n\t\t\t\"woman-with-bunny-ears-partying\",\n\t\t\t\"person_in_steamy_room\",\n\t\t\t\"woman_in_steamy_room\",\n\t\t\t\"man_in_steamy_room\",\n\t\t\t\"person_climbing\",\n\t\t\t\"woman_climbing\",\n\t\t\t\"man_climbing\",\n\t\t\t\"person_in_lotus_position\",\n\t\t\t\"woman_in_lotus_position\",\n\t\t\t\"man_in_lotus_position\",\n\t\t\t\"bath\",\n\t\t\t\"sleeping_accommodation\",\n\t\t\t\"man_in_business_suit_levitating\",\n\t\t\t\"speaking_head_in_silhouette\",\n\t\t\t\"bust_in_silhouette\",\n\t\t\t\"busts_in_silhouette\",\n\t\t\t\"fencer\",\n\t\t\t\"horse_racing\",\n\t\t\t\"skier\",\n\t\t\t\"snowboarder\",\n\t\t\t\"golfer\",\n\t\t\t\"man-golfing\",\n\t\t\t\"woman-golfing\",\n\t\t\t\"surfer\",\n\t\t\t\"man-surfing\",\n\t\t\t\"woman-surfing\",\n\t\t\t\"rowboat\",\n\t\t\t\"man-rowing-boat\",\n\t\t\t\"woman-rowing-boat\",\n\t\t\t\"swimmer\",\n\t\t\t\"man-swimming\",\n\t\t\t\"woman-swimming\",\n\t\t\t\"person_with_ball\",\n\t\t\t\"man-bouncing-ball\",\n\t\t\t\"woman-bouncing-ball\",\n\t\t\t\"weight_lifter\",\n\t\t\t\"man-lifting-weights\",\n\t\t\t\"woman-lifting-weights\",\n\t\t\t\"bicyclist\",\n\t\t\t\"man-biking\",\n\t\t\t\"woman-biking\",\n\t\t\t\"mountain_bicyclist\",\n\t\t\t\"man-mountain-biking\",\n\t\t\t\"woman-mountain-biking\",\n\t\t\t\"racing_car\",\n\t\t\t\"racing_motorcycle\",\n\t\t\t\"person_doing_cartwheel\",\n\t\t\t\"man-cartwheeling\",\n\t\t\t\"woman-cartwheeling\",\n\t\t\t\"wrestlers\",\n\t\t\t\"man-wrestling\",\n\t\t\t\"woman-wrestling\",\n\t\t\t\"water_polo\",\n\t\t\t\"man-playing-water-polo\",\n\t\t\t\"woman-playing-water-polo\",\n\t\t\t\"handball\",\n\t\t\t\"man-playing-handball\",\n\t\t\t\"woman-playing-handball\",\n\t\t\t\"juggling\",\n\t\t\t\"man-juggling\",\n\t\t\t\"woman-juggling\",\n\t\t\t\"couple\",\n\t\t\t\"two_men_holding_hands\",\n\t\t\t\"two_women_holding_hands\",\n\t\t\t\"couplekiss\",\n\t\t\t\"woman-kiss-man\",\n\t\t\t\"man-kiss-man\",\n\t\t\t\"woman-kiss-woman\",\n\t\t\t\"couple_with_heart\",\n\t\t\t\"woman-heart-man\",\n\t\t\t\"man-heart-man\",\n\t\t\t\"woman-heart-woman\",\n\t\t\t\"family\",\n\t\t\t\"man-woman-boy\",\n\t\t\t\"man-woman-girl\",\n\t\t\t\"man-woman-girl-boy\",\n\t\t\t\"man-woman-boy-boy\",\n\t\t\t\"man-woman-girl-girl\",\n\t\t\t\"man-man-boy\",\n\t\t\t\"man-man-girl\",\n\t\t\t\"man-man-girl-boy\",\n\t\t\t\"man-man-boy-boy\",\n\t\t\t\"man-man-girl-girl\",\n\t\t\t\"woman-woman-boy\",\n\t\t\t\"woman-woman-girl\",\n\t\t\t\"woman-woman-girl-boy\",\n\t\t\t\"woman-woman-boy-boy\",\n\t\t\t\"woman-woman-girl-girl\",\n\t\t\t\"man-boy\",\n\t\t\t\"man-boy-boy\",\n\t\t\t\"man-girl\",\n\t\t\t\"man-girl-boy\",\n\t\t\t\"man-girl-girl\",\n\t\t\t\"woman-boy\",\n\t\t\t\"woman-boy-boy\",\n\t\t\t\"woman-girl\",\n\t\t\t\"woman-girl-boy\",\n\t\t\t\"woman-girl-girl\",\n\t\t\t\"selfie\",\n\t\t\t\"muscle\",\n\t\t\t\"point_left\",\n\t\t\t\"point_right\",\n\t\t\t\"point_up\",\n\t\t\t\"point_up_2\",\n\t\t\t\"middle_finger\",\n\t\t\t\"point_down\",\n\t\t\t\"v\",\n\t\t\t\"crossed_fingers\",\n\t\t\t\"spock-hand\",\n\t\t\t\"the_horns\",\n\t\t\t\"call_me_hand\",\n\t\t\t\"raised_hand_with_fingers_splayed\",\n\t\t\t\"hand\",\n\t\t\t\"ok_hand\",\n\t\t\t\"+1\",\n\t\t\t\"-1\",\n\t\t\t\"fist\",\n\t\t\t\"facepunch\",\n\t\t\t\"left-facing_fist\",\n\t\t\t\"right-facing_fist\",\n\t\t\t\"raised_back_of_hand\",\n\t\t\t\"wave\",\n\t\t\t\"i_love_you_hand_sign\",\n\t\t\t\"writing_hand\",\n\t\t\t\"clap\",\n\t\t\t\"open_hands\",\n\t\t\t\"raised_hands\",\n\t\t\t\"palms_up_together\",\n\t\t\t\"pray\",\n\t\t\t\"handshake\",\n\t\t\t\"nail_care\",\n\t\t\t\"ear\",\n\t\t\t\"nose\",\n\t\t\t\"footprints\",\n\t\t\t\"eyes\",\n\t\t\t\"eye\",\n\t\t\t\"eye-in-speech-bubble\",\n\t\t\t\"brain\",\n\t\t\t\"tongue\",\n\t\t\t\"lips\",\n\t\t\t\"kiss\",\n\t\t\t\"cupid\",\n\t\t\t\"heart\",\n\t\t\t\"heartbeat\",\n\t\t\t\"broken_heart\",\n\t\t\t\"two_hearts\",\n\t\t\t\"sparkling_heart\",\n\t\t\t\"heartpulse\",\n\t\t\t\"blue_heart\",\n\t\t\t\"green_heart\",\n\t\t\t\"yellow_heart\",\n\t\t\t\"orange_heart\",\n\t\t\t\"purple_heart\",\n\t\t\t\"black_heart\",\n\t\t\t\"gift_heart\",\n\t\t\t\"revolving_hearts\",\n\t\t\t\"heart_decoration\",\n\t\t\t\"heavy_heart_exclamation_mark_ornament\",\n\t\t\t\"love_letter\",\n\t\t\t\"zzz\",\n\t\t\t\"anger\",\n\t\t\t\"bomb\",\n\t\t\t\"boom\",\n\t\t\t\"sweat_drops\",\n\t\t\t\"dash\",\n\t\t\t\"dizzy\",\n\t\t\t\"speech_balloon\",\n\t\t\t\"left_speech_bubble\",\n\t\t\t\"right_anger_bubble\",\n\t\t\t\"thought_balloon\",\n\t\t\t\"hole\",\n\t\t\t\"eyeglasses\",\n\t\t\t\"dark_sunglasses\",\n\t\t\t\"necktie\",\n\t\t\t\"shirt\",\n\t\t\t\"jeans\",\n\t\t\t\"scarf\",\n\t\t\t\"gloves\",\n\t\t\t\"coat\",\n\t\t\t\"socks\",\n\t\t\t\"dress\",\n\t\t\t\"kimono\",\n\t\t\t\"bikini\",\n\t\t\t\"womans_clothes\",\n\t\t\t\"purse\",\n\t\t\t\"handbag\",\n\t\t\t\"pouch\",\n\t\t\t\"shopping_bags\",\n\t\t\t\"school_satchel\",\n\t\t\t\"mans_shoe\",\n\t\t\t\"athletic_shoe\",\n\t\t\t\"high_heel\",\n\t\t\t\"sandal\",\n\t\t\t\"boot\",\n\t\t\t\"crown\",\n\t\t\t\"womans_hat\",\n\t\t\t\"tophat\",\n\t\t\t\"mortar_board\",\n\t\t\t\"billed_cap\",\n\t\t\t\"helmet_with_white_cross\",\n\t\t\t\"prayer_beads\",\n\t\t\t\"lipstick\",\n\t\t\t\"ring\",\n\t\t\t\"gem\"\n\t\t]\n\t},\n\t{\n\t\tid: \"nature\",\n\t\tname: \"Animals & Nature\",\n\t\temojis: [\n\t\t\t\"monkey_face\",\n\t\t\t\"monkey\",\n\t\t\t\"gorilla\",\n\t\t\t\"dog\",\n\t\t\t\"dog2\",\n\t\t\t\"poodle\",\n\t\t\t\"wolf\",\n\t\t\t\"fox_face\",\n\t\t\t\"cat\",\n\t\t\t\"cat2\",\n\t\t\t\"lion_face\",\n\t\t\t\"tiger\",\n\t\t\t\"tiger2\",\n\t\t\t\"leopard\",\n\t\t\t\"horse\",\n\t\t\t\"racehorse\",\n\t\t\t\"unicorn_face\",\n\t\t\t\"zebra_face\",\n\t\t\t\"deer\",\n\t\t\t\"cow\",\n\t\t\t\"ox\",\n\t\t\t\"water_buffalo\",\n\t\t\t\"cow2\",\n\t\t\t\"pig\",\n\t\t\t\"pig2\",\n\t\t\t\"boar\",\n\t\t\t\"pig_nose\",\n\t\t\t\"ram\",\n\t\t\t\"sheep\",\n\t\t\t\"goat\",\n\t\t\t\"dromedary_camel\",\n\t\t\t\"camel\",\n\t\t\t\"giraffe_face\",\n\t\t\t\"elephant\",\n\t\t\t\"rhinoceros\",\n\t\t\t\"mouse\",\n\t\t\t\"mouse2\",\n\t\t\t\"rat\",\n\t\t\t\"hamster\",\n\t\t\t\"rabbit\",\n\t\t\t\"rabbit2\",\n\t\t\t\"chipmunk\",\n\t\t\t\"hedgehog\",\n\t\t\t\"bat\",\n\t\t\t\"bear\",\n\t\t\t\"koala\",\n\t\t\t\"panda_face\",\n\t\t\t\"feet\",\n\t\t\t\"turkey\",\n\t\t\t\"chicken\",\n\t\t\t\"rooster\",\n\t\t\t\"hatching_chick\",\n\t\t\t\"baby_chick\",\n\t\t\t\"hatched_chick\",\n\t\t\t\"bird\",\n\t\t\t\"penguin\",\n\t\t\t\"dove_of_peace\",\n\t\t\t\"eagle\",\n\t\t\t\"duck\",\n\t\t\t\"owl\",\n\t\t\t\"frog\",\n\t\t\t\"crocodile\",\n\t\t\t\"turtle\",\n\t\t\t\"lizard\",\n\t\t\t\"snake\",\n\t\t\t\"dragon_face\",\n\t\t\t\"dragon\",\n\t\t\t\"sauropod\",\n\t\t\t\"t-rex\",\n\t\t\t\"whale\",\n\t\t\t\"whale2\",\n\t\t\t\"dolphin\",\n\t\t\t\"fish\",\n\t\t\t\"tropical_fish\",\n\t\t\t\"blowfish\",\n\t\t\t\"shark\",\n\t\t\t\"octopus\",\n\t\t\t\"shell\",\n\t\t\t\"crab\",\n\t\t\t\"shrimp\",\n\t\t\t\"squid\",\n\t\t\t\"snail\",\n\t\t\t\"butterfly\",\n\t\t\t\"bug\",\n\t\t\t\"ant\",\n\t\t\t\"bee\",\n\t\t\t\"beetle\",\n\t\t\t\"cricket\",\n\t\t\t\"spider\",\n\t\t\t\"spider_web\",\n\t\t\t\"scorpion\",\n\t\t\t\"bouquet\",\n\t\t\t\"cherry_blossom\",\n\t\t\t\"white_flower\",\n\t\t\t\"rosette\",\n\t\t\t\"rose\",\n\t\t\t\"wilted_flower\",\n\t\t\t\"hibiscus\",\n\t\t\t\"sunflower\",\n\t\t\t\"blossom\",\n\t\t\t\"tulip\",\n\t\t\t\"seedling\",\n\t\t\t\"evergreen_tree\",\n\t\t\t\"deciduous_tree\",\n\t\t\t\"palm_tree\",\n\t\t\t\"cactus\",\n\t\t\t\"ear_of_rice\",\n\t\t\t\"herb\",\n\t\t\t\"shamrock\",\n\t\t\t\"four_leaf_clover\",\n\t\t\t\"maple_leaf\",\n\t\t\t\"fallen_leaf\",\n\t\t\t\"leaves\"\n\t\t]\n\t},\n\t{\n\t\tid: \"foods\",\n\t\tname: \"Food & Drink\",\n\t\temojis: [\n\t\t\t\"grapes\",\n\t\t\t\"melon\",\n\t\t\t\"watermelon\",\n\t\t\t\"tangerine\",\n\t\t\t\"lemon\",\n\t\t\t\"banana\",\n\t\t\t\"pineapple\",\n\t\t\t\"apple\",\n\t\t\t\"green_apple\",\n\t\t\t\"pear\",\n\t\t\t\"peach\",\n\t\t\t\"cherries\",\n\t\t\t\"strawberry\",\n\t\t\t\"kiwifruit\",\n\t\t\t\"tomato\",\n\t\t\t\"coconut\",\n\t\t\t\"avocado\",\n\t\t\t\"eggplant\",\n\t\t\t\"potato\",\n\t\t\t\"carrot\",\n\t\t\t\"corn\",\n\t\t\t\"hot_pepper\",\n\t\t\t\"cucumber\",\n\t\t\t\"broccoli\",\n\t\t\t\"mushroom\",\n\t\t\t\"peanuts\",\n\t\t\t\"chestnut\",\n\t\t\t\"bread\",\n\t\t\t\"croissant\",\n\t\t\t\"baguette_bread\",\n\t\t\t\"pretzel\",\n\t\t\t\"pancakes\",\n\t\t\t\"cheese_wedge\",\n\t\t\t\"meat_on_bone\",\n\t\t\t\"poultry_leg\",\n\t\t\t\"cut_of_meat\",\n\t\t\t\"bacon\",\n\t\t\t\"hamburger\",\n\t\t\t\"fries\",\n\t\t\t\"pizza\",\n\t\t\t\"hotdog\",\n\t\t\t\"sandwich\",\n\t\t\t\"taco\",\n\t\t\t\"burrito\",\n\t\t\t\"stuffed_flatbread\",\n\t\t\t\"egg\",\n\t\t\t\"fried_egg\",\n\t\t\t\"shallow_pan_of_food\",\n\t\t\t\"stew\",\n\t\t\t\"bowl_with_spoon\",\n\t\t\t\"green_salad\",\n\t\t\t\"popcorn\",\n\t\t\t\"canned_food\",\n\t\t\t\"bento\",\n\t\t\t\"rice_cracker\",\n\t\t\t\"rice_ball\",\n\t\t\t\"rice\",\n\t\t\t\"curry\",\n\t\t\t\"ramen\",\n\t\t\t\"spaghetti\",\n\t\t\t\"sweet_potato\",\n\t\t\t\"oden\",\n\t\t\t\"sushi\",\n\t\t\t\"fried_shrimp\",\n\t\t\t\"fish_cake\",\n\t\t\t\"dango\",\n\t\t\t\"dumpling\",\n\t\t\t\"fortune_cookie\",\n\t\t\t\"takeout_box\",\n\t\t\t\"icecream\",\n\t\t\t\"shaved_ice\",\n\t\t\t\"ice_cream\",\n\t\t\t\"doughnut\",\n\t\t\t\"cookie\",\n\t\t\t\"birthday\",\n\t\t\t\"cake\",\n\t\t\t\"pie\",\n\t\t\t\"chocolate_bar\",\n\t\t\t\"candy\",\n\t\t\t\"lollipop\",\n\t\t\t\"custard\",\n\t\t\t\"honey_pot\",\n\t\t\t\"baby_bottle\",\n\t\t\t\"glass_of_milk\",\n\t\t\t\"coffee\",\n\t\t\t\"tea\",\n\t\t\t\"sake\",\n\t\t\t\"champagne\",\n\t\t\t\"wine_glass\",\n\t\t\t\"cocktail\",\n\t\t\t\"tropical_drink\",\n\t\t\t\"beer\",\n\t\t\t\"beers\",\n\t\t\t\"clinking_glasses\",\n\t\t\t\"tumbler_glass\",\n\t\t\t\"cup_with_straw\",\n\t\t\t\"chopsticks\",\n\t\t\t\"knife_fork_plate\",\n\t\t\t\"fork_and_knife\",\n\t\t\t\"spoon\",\n\t\t\t\"hocho\",\n\t\t\t\"amphora\"\n\t\t]\n\t},\n\t{\n\t\tid: \"activity\",\n\t\tname: \"Activities\",\n\t\temojis: [\n\t\t\t\"jack_o_lantern\",\n\t\t\t\"christmas_tree\",\n\t\t\t\"fireworks\",\n\t\t\t\"sparkler\",\n\t\t\t\"sparkles\",\n\t\t\t\"balloon\",\n\t\t\t\"tada\",\n\t\t\t\"confetti_ball\",\n\t\t\t\"tanabata_tree\",\n\t\t\t\"bamboo\",\n\t\t\t\"dolls\",\n\t\t\t\"flags\",\n\t\t\t\"wind_chime\",\n\t\t\t\"rice_scene\",\n\t\t\t\"ribbon\",\n\t\t\t\"gift\",\n\t\t\t\"reminder_ribbon\",\n\t\t\t\"admission_tickets\",\n\t\t\t\"ticket\",\n\t\t\t\"medal\",\n\t\t\t\"trophy\",\n\t\t\t\"sports_medal\",\n\t\t\t\"first_place_medal\",\n\t\t\t\"second_place_medal\",\n\t\t\t\"third_place_medal\",\n\t\t\t\"soccer\",\n\t\t\t\"baseball\",\n\t\t\t\"basketball\",\n\t\t\t\"volleyball\",\n\t\t\t\"football\",\n\t\t\t\"rugby_football\",\n\t\t\t\"tennis\",\n\t\t\t\"8ball\",\n\t\t\t\"bowling\",\n\t\t\t\"cricket_bat_and_ball\",\n\t\t\t\"field_hockey_stick_and_ball\",\n\t\t\t\"ice_hockey_stick_and_puck\",\n\t\t\t\"table_tennis_paddle_and_ball\",\n\t\t\t\"badminton_racquet_and_shuttlecock\",\n\t\t\t\"boxing_glove\",\n\t\t\t\"martial_arts_uniform\",\n\t\t\t\"goal_net\",\n\t\t\t\"dart\",\n\t\t\t\"golf\",\n\t\t\t\"ice_skate\",\n\t\t\t\"fishing_pole_and_fish\",\n\t\t\t\"running_shirt_with_sash\",\n\t\t\t\"ski\",\n\t\t\t\"sled\",\n\t\t\t\"curling_stone\",\n\t\t\t\"video_game\",\n\t\t\t\"joystick\",\n\t\t\t\"game_die\",\n\t\t\t\"spades\",\n\t\t\t\"hearts\",\n\t\t\t\"diamonds\",\n\t\t\t\"clubs\",\n\t\t\t\"black_joker\",\n\t\t\t\"mahjong\",\n\t\t\t\"flower_playing_cards\"\n\t\t]\n\t},\n\t{\n\t\tid: \"places\",\n\t\tname: \"Travel & Places\",\n\t\temojis: [\n\t\t\t\"earth_africa\",\n\t\t\t\"earth_americas\",\n\t\t\t\"earth_asia\",\n\t\t\t\"globe_with_meridians\",\n\t\t\t\"world_map\",\n\t\t\t\"japan\",\n\t\t\t\"snow_capped_mountain\",\n\t\t\t\"mountain\",\n\t\t\t\"volcano\",\n\t\t\t\"mount_fuji\",\n\t\t\t\"camping\",\n\t\t\t\"beach_with_umbrella\",\n\t\t\t\"desert\",\n\t\t\t\"desert_island\",\n\t\t\t\"national_park\",\n\t\t\t\"stadium\",\n\t\t\t\"classical_building\",\n\t\t\t\"building_construction\",\n\t\t\t\"house_buildings\",\n\t\t\t\"cityscape\",\n\t\t\t\"derelict_house_building\",\n\t\t\t\"house\",\n\t\t\t\"house_with_garden\",\n\t\t\t\"office\",\n\t\t\t\"post_office\",\n\t\t\t\"european_post_office\",\n\t\t\t\"hospital\",\n\t\t\t\"bank\",\n\t\t\t\"hotel\",\n\t\t\t\"love_hotel\",\n\t\t\t\"convenience_store\",\n\t\t\t\"school\",\n\t\t\t\"department_store\",\n\t\t\t\"factory\",\n\t\t\t\"japanese_castle\",\n\t\t\t\"european_castle\",\n\t\t\t\"wedding\",\n\t\t\t\"tokyo_tower\",\n\t\t\t\"statue_of_liberty\",\n\t\t\t\"church\",\n\t\t\t\"mosque\",\n\t\t\t\"synagogue\",\n\t\t\t\"shinto_shrine\",\n\t\t\t\"kaaba\",\n\t\t\t\"fountain\",\n\t\t\t\"tent\",\n\t\t\t\"foggy\",\n\t\t\t\"night_with_stars\",\n\t\t\t\"sunrise_over_mountains\",\n\t\t\t\"sunrise\",\n\t\t\t\"city_sunset\",\n\t\t\t\"city_sunrise\",\n\t\t\t\"bridge_at_night\",\n\t\t\t\"hotsprings\",\n\t\t\t\"milky_way\",\n\t\t\t\"carousel_horse\",\n\t\t\t\"ferris_wheel\",\n\t\t\t\"roller_coaster\",\n\t\t\t\"barber\",\n\t\t\t\"circus_tent\",\n\t\t\t\"performing_arts\",\n\t\t\t\"frame_with_picture\",\n\t\t\t\"art\",\n\t\t\t\"slot_machine\",\n\t\t\t\"steam_locomotive\",\n\t\t\t\"railway_car\",\n\t\t\t\"bullettrain_side\",\n\t\t\t\"bullettrain_front\",\n\t\t\t\"train2\",\n\t\t\t\"metro\",\n\t\t\t\"light_rail\",\n\t\t\t\"station\",\n\t\t\t\"tram\",\n\t\t\t\"monorail\",\n\t\t\t\"mountain_railway\",\n\t\t\t\"train\",\n\t\t\t\"bus\",\n\t\t\t\"oncoming_bus\",\n\t\t\t\"trolleybus\",\n\t\t\t\"minibus\",\n\t\t\t\"ambulance\",\n\t\t\t\"fire_engine\",\n\t\t\t\"police_car\",\n\t\t\t\"oncoming_police_car\",\n\t\t\t\"taxi\",\n\t\t\t\"oncoming_taxi\",\n\t\t\t\"car\",\n\t\t\t\"oncoming_automobile\",\n\t\t\t\"blue_car\",\n\t\t\t\"truck\",\n\t\t\t\"articulated_lorry\",\n\t\t\t\"tractor\",\n\t\t\t\"bike\",\n\t\t\t\"scooter\",\n\t\t\t\"motor_scooter\",\n\t\t\t\"busstop\",\n\t\t\t\"motorway\",\n\t\t\t\"railway_track\",\n\t\t\t\"fuelpump\",\n\t\t\t\"rotating_light\",\n\t\t\t\"traffic_light\",\n\t\t\t\"vertical_traffic_light\",\n\t\t\t\"construction\",\n\t\t\t\"octagonal_sign\",\n\t\t\t\"anchor\",\n\t\t\t\"boat\",\n\t\t\t\"canoe\",\n\t\t\t\"speedboat\",\n\t\t\t\"passenger_ship\",\n\t\t\t\"ferry\",\n\t\t\t\"motor_boat\",\n\t\t\t\"ship\",\n\t\t\t\"airplane\",\n\t\t\t\"small_airplane\",\n\t\t\t\"airplane_departure\",\n\t\t\t\"airplane_arriving\",\n\t\t\t\"seat\",\n\t\t\t\"helicopter\",\n\t\t\t\"suspension_railway\",\n\t\t\t\"mountain_cableway\",\n\t\t\t\"aerial_tramway\",\n\t\t\t\"satellite\",\n\t\t\t\"rocket\",\n\t\t\t\"flying_saucer\",\n\t\t\t\"bellhop_bell\",\n\t\t\t\"door\",\n\t\t\t\"bed\",\n\t\t\t\"couch_and_lamp\",\n\t\t\t\"toilet\",\n\t\t\t\"shower\",\n\t\t\t\"bathtub\",\n\t\t\t\"hourglass\",\n\t\t\t\"hourglass_flowing_sand\",\n\t\t\t\"watch\",\n\t\t\t\"alarm_clock\",\n\t\t\t\"stopwatch\",\n\t\t\t\"timer_clock\",\n\t\t\t\"mantelpiece_clock\",\n\t\t\t\"clock12\",\n\t\t\t\"clock1230\",\n\t\t\t\"clock1\",\n\t\t\t\"clock130\",\n\t\t\t\"clock2\",\n\t\t\t\"clock230\",\n\t\t\t\"clock3\",\n\t\t\t\"clock330\",\n\t\t\t\"clock4\",\n\t\t\t\"clock430\",\n\t\t\t\"clock5\",\n\t\t\t\"clock530\",\n\t\t\t\"clock6\",\n\t\t\t\"clock630\",\n\t\t\t\"clock7\",\n\t\t\t\"clock730\",\n\t\t\t\"clock8\",\n\t\t\t\"clock830\",\n\t\t\t\"clock9\",\n\t\t\t\"clock930\",\n\t\t\t\"clock10\",\n\t\t\t\"clock1030\",\n\t\t\t\"clock11\",\n\t\t\t\"clock1130\",\n\t\t\t\"new_moon\",\n\t\t\t\"waxing_crescent_moon\",\n\t\t\t\"first_quarter_moon\",\n\t\t\t\"moon\",\n\t\t\t\"full_moon\",\n\t\t\t\"waning_gibbous_moon\",\n\t\t\t\"last_quarter_moon\",\n\t\t\t\"waning_crescent_moon\",\n\t\t\t\"crescent_moon\",\n\t\t\t\"new_moon_with_face\",\n\t\t\t\"first_quarter_moon_with_face\",\n\t\t\t\"last_quarter_moon_with_face\",\n\t\t\t\"thermometer\",\n\t\t\t\"sunny\",\n\t\t\t\"full_moon_with_face\",\n\t\t\t\"sun_with_face\",\n\t\t\t\"star\",\n\t\t\t\"star2\",\n\t\t\t\"stars\",\n\t\t\t\"cloud\",\n\t\t\t\"partly_sunny\",\n\t\t\t\"thunder_cloud_and_rain\",\n\t\t\t\"mostly_sunny\",\n\t\t\t\"barely_sunny\",\n\t\t\t\"partly_sunny_rain\",\n\t\t\t\"rain_cloud\",\n\t\t\t\"snow_cloud\",\n\t\t\t\"lightning\",\n\t\t\t\"tornado\",\n\t\t\t\"fog\",\n\t\t\t\"wind_blowing_face\",\n\t\t\t\"cyclone\",\n\t\t\t\"rainbow\",\n\t\t\t\"closed_umbrella\",\n\t\t\t\"umbrella\",\n\t\t\t\"umbrella_with_rain_drops\",\n\t\t\t\"umbrella_on_ground\",\n\t\t\t\"zap\",\n\t\t\t\"snowflake\",\n\t\t\t\"snowman\",\n\t\t\t\"snowman_without_snow\",\n\t\t\t\"comet\",\n\t\t\t\"fire\",\n\t\t\t\"droplet\",\n\t\t\t\"ocean\"\n\t\t]\n\t},\n\t{\n\t\tid: \"objects\",\n\t\tname: \"Objects\",\n\t\temojis: [\n\t\t\t\"mute\",\n\t\t\t\"speaker\",\n\t\t\t\"sound\",\n\t\t\t\"loud_sound\",\n\t\t\t\"loudspeaker\",\n\t\t\t\"mega\",\n\t\t\t\"postal_horn\",\n\t\t\t\"bell\",\n\t\t\t\"no_bell\",\n\t\t\t\"musical_score\",\n\t\t\t\"musical_note\",\n\t\t\t\"notes\",\n\t\t\t\"studio_microphone\",\n\t\t\t\"level_slider\",\n\t\t\t\"control_knobs\",\n\t\t\t\"microphone\",\n\t\t\t\"headphones\",\n\t\t\t\"radio\",\n\t\t\t\"saxophone\",\n\t\t\t\"guitar\",\n\t\t\t\"musical_keyboard\",\n\t\t\t\"trumpet\",\n\t\t\t\"violin\",\n\t\t\t\"drum_with_drumsticks\",\n\t\t\t\"iphone\",\n\t\t\t\"calling\",\n\t\t\t\"phone\",\n\t\t\t\"telephone_receiver\",\n\t\t\t\"pager\",\n\t\t\t\"fax\",\n\t\t\t\"battery\",\n\t\t\t\"electric_plug\",\n\t\t\t\"computer\",\n\t\t\t\"desktop_computer\",\n\t\t\t\"printer\",\n\t\t\t\"keyboard\",\n\t\t\t\"three_button_mouse\",\n\t\t\t\"trackball\",\n\t\t\t\"minidisc\",\n\t\t\t\"floppy_disk\",\n\t\t\t\"cd\",\n\t\t\t\"dvd\",\n\t\t\t\"movie_camera\",\n\t\t\t\"film_frames\",\n\t\t\t\"film_projector\",\n\t\t\t\"clapper\",\n\t\t\t\"tv\",\n\t\t\t\"camera\",\n\t\t\t\"camera_with_flash\",\n\t\t\t\"video_camera\",\n\t\t\t\"vhs\",\n\t\t\t\"mag\",\n\t\t\t\"mag_right\",\n\t\t\t\"microscope\",\n\t\t\t\"telescope\",\n\t\t\t\"satellite_antenna\",\n\t\t\t\"candle\",\n\t\t\t\"bulb\",\n\t\t\t\"flashlight\",\n\t\t\t\"izakaya_lantern\",\n\t\t\t\"notebook_with_decorative_cover\",\n\t\t\t\"closed_book\",\n\t\t\t\"book\",\n\t\t\t\"green_book\",\n\t\t\t\"blue_book\",\n\t\t\t\"orange_book\",\n\t\t\t\"books\",\n\t\t\t\"notebook\",\n\t\t\t\"ledger\",\n\t\t\t\"page_with_curl\",\n\t\t\t\"scroll\",\n\t\t\t\"page_facing_up\",\n\t\t\t\"newspaper\",\n\t\t\t\"rolled_up_newspaper\",\n\t\t\t\"bookmark_tabs\",\n\t\t\t\"bookmark\",\n\t\t\t\"label\",\n\t\t\t\"moneybag\",\n\t\t\t\"yen\",\n\t\t\t\"dollar\",\n\t\t\t\"euro\",\n\t\t\t\"pound\",\n\t\t\t\"money_with_wings\",\n\t\t\t\"credit_card\",\n\t\t\t\"chart\",\n\t\t\t\"currency_exchange\",\n\t\t\t\"heavy_dollar_sign\",\n\t\t\t\"email\",\n\t\t\t\"e-mail\",\n\t\t\t\"incoming_envelope\",\n\t\t\t\"envelope_with_arrow\",\n\t\t\t\"outbox_tray\",\n\t\t\t\"inbox_tray\",\n\t\t\t\"package\",\n\t\t\t\"mailbox\",\n\t\t\t\"mailbox_closed\",\n\t\t\t\"mailbox_with_mail\",\n\t\t\t\"mailbox_with_no_mail\",\n\t\t\t\"postbox\",\n\t\t\t\"ballot_box_with_ballot\",\n\t\t\t\"pencil2\",\n\t\t\t\"black_nib\",\n\t\t\t\"lower_left_fountain_pen\",\n\t\t\t\"lower_left_ballpoint_pen\",\n\t\t\t\"lower_left_paintbrush\",\n\t\t\t\"lower_left_crayon\",\n\t\t\t\"memo\",\n\t\t\t\"briefcase\",\n\t\t\t\"file_folder\",\n\t\t\t\"open_file_folder\",\n\t\t\t\"card_index_dividers\",\n\t\t\t\"date\",\n\t\t\t\"calendar\",\n\t\t\t\"spiral_note_pad\",\n\t\t\t\"spiral_calendar_pad\",\n\t\t\t\"card_index\",\n\t\t\t\"chart_with_upwards_trend\",\n\t\t\t\"chart_with_downwards_trend\",\n\t\t\t\"bar_chart\",\n\t\t\t\"clipboard\",\n\t\t\t\"pushpin\",\n\t\t\t\"round_pushpin\",\n\t\t\t\"paperclip\",\n\t\t\t\"linked_paperclips\",\n\t\t\t\"straight_ruler\",\n\t\t\t\"triangular_ruler\",\n\t\t\t\"scissors\",\n\t\t\t\"card_file_box\",\n\t\t\t\"file_cabinet\",\n\t\t\t\"wastebasket\",\n\t\t\t\"lock\",\n\t\t\t\"unlock\",\n\t\t\t\"lock_with_ink_pen\",\n\t\t\t\"closed_lock_with_key\",\n\t\t\t\"key\",\n\t\t\t\"old_key\",\n\t\t\t\"hammer\",\n\t\t\t\"pick\",\n\t\t\t\"hammer_and_pick\",\n\t\t\t\"hammer_and_wrench\",\n\t\t\t\"dagger_knife\",\n\t\t\t\"crossed_swords\",\n\t\t\t\"gun\",\n\t\t\t\"bow_and_arrow\",\n\t\t\t\"shield\",\n\t\t\t\"wrench\",\n\t\t\t\"nut_and_bolt\",\n\t\t\t\"gear\",\n\t\t\t\"compression\",\n\t\t\t\"alembic\",\n\t\t\t\"scales\",\n\t\t\t\"link\",\n\t\t\t\"chains\",\n\t\t\t\"syringe\",\n\t\t\t\"pill\",\n\t\t\t\"smoking\",\n\t\t\t\"coffin\",\n\t\t\t\"funeral_urn\",\n\t\t\t\"moyai\",\n\t\t\t\"oil_drum\",\n\t\t\t\"crystal_ball\",\n\t\t\t\"shopping_trolley\"\n\t\t]\n\t},\n\t{\n\t\tid: \"symbols\",\n\t\tname: \"Symbols\",\n\t\temojis: [\n\t\t\t\"atm\",\n\t\t\t\"put_litter_in_its_place\",\n\t\t\t\"potable_water\",\n\t\t\t\"wheelchair\",\n\t\t\t\"mens\",\n\t\t\t\"womens\",\n\t\t\t\"restroom\",\n\t\t\t\"baby_symbol\",\n\t\t\t\"wc\",\n\t\t\t\"passport_control\",\n\t\t\t\"customs\",\n\t\t\t\"baggage_claim\",\n\t\t\t\"left_luggage\",\n\t\t\t\"warning\",\n\t\t\t\"children_crossing\",\n\t\t\t\"no_entry\",\n\t\t\t\"no_entry_sign\",\n\t\t\t\"no_bicycles\",\n\t\t\t\"no_smoking\",\n\t\t\t\"do_not_litter\",\n\t\t\t\"non-potable_water\",\n\t\t\t\"no_pedestrians\",\n\t\t\t\"no_mobile_phones\",\n\t\t\t\"underage\",\n\t\t\t\"radioactive_sign\",\n\t\t\t\"biohazard_sign\",\n\t\t\t\"arrow_up\",\n\t\t\t\"arrow_upper_right\",\n\t\t\t\"arrow_right\",\n\t\t\t\"arrow_lower_right\",\n\t\t\t\"arrow_down\",\n\t\t\t\"arrow_lower_left\",\n\t\t\t\"arrow_left\",\n\t\t\t\"arrow_upper_left\",\n\t\t\t\"arrow_up_down\",\n\t\t\t\"left_right_arrow\",\n\t\t\t\"leftwards_arrow_with_hook\",\n\t\t\t\"arrow_right_hook\",\n\t\t\t\"arrow_heading_up\",\n\t\t\t\"arrow_heading_down\",\n\t\t\t\"arrows_clockwise\",\n\t\t\t\"arrows_counterclockwise\",\n\t\t\t\"back\",\n\t\t\t\"end\",\n\t\t\t\"on\",\n\t\t\t\"soon\",\n\t\t\t\"top\",\n\t\t\t\"place_of_worship\",\n\t\t\t\"atom_symbol\",\n\t\t\t\"om_symbol\",\n\t\t\t\"star_of_david\",\n\t\t\t\"wheel_of_dharma\",\n\t\t\t\"yin_yang\",\n\t\t\t\"latin_cross\",\n\t\t\t\"orthodox_cross\",\n\t\t\t\"star_and_crescent\",\n\t\t\t\"peace_symbol\",\n\t\t\t\"menorah_with_nine_branches\",\n\t\t\t\"six_pointed_star\",\n\t\t\t\"aries\",\n\t\t\t\"taurus\",\n\t\t\t\"gemini\",\n\t\t\t\"cancer\",\n\t\t\t\"leo\",\n\t\t\t\"virgo\",\n\t\t\t\"libra\",\n\t\t\t\"scorpius\",\n\t\t\t\"sagittarius\",\n\t\t\t\"capricorn\",\n\t\t\t\"aquarius\",\n\t\t\t\"pisces\",\n\t\t\t\"ophiuchus\",\n\t\t\t\"twisted_rightwards_arrows\",\n\t\t\t\"repeat\",\n\t\t\t\"repeat_one\",\n\t\t\t\"arrow_forward\",\n\t\t\t\"fast_forward\",\n\t\t\t\"black_right_pointing_double_triangle_with_vertical_bar\",\n\t\t\t\"black_right_pointing_triangle_with_double_vertical_bar\",\n\t\t\t\"arrow_backward\",\n\t\t\t\"rewind\",\n\t\t\t\"black_left_pointing_double_triangle_with_vertical_bar\",\n\t\t\t\"arrow_up_small\",\n\t\t\t\"arrow_double_up\",\n\t\t\t\"arrow_down_small\",\n\t\t\t\"arrow_double_down\",\n\t\t\t\"double_vertical_bar\",\n\t\t\t\"black_square_for_stop\",\n\t\t\t\"black_circle_for_record\",\n\t\t\t\"eject\",\n\t\t\t\"cinema\",\n\t\t\t\"low_brightness\",\n\t\t\t\"high_brightness\",\n\t\t\t\"signal_strength\",\n\t\t\t\"vibration_mode\",\n\t\t\t\"mobile_phone_off\",\n\t\t\t\"female_sign\",\n\t\t\t\"male_sign\",\n\t\t\t\"medical_symbol\",\n\t\t\t\"recycle\",\n\t\t\t\"fleur_de_lis\",\n\t\t\t\"trident\",\n\t\t\t\"name_badge\",\n\t\t\t\"beginner\",\n\t\t\t\"o\",\n\t\t\t\"white_check_mark\",\n\t\t\t\"ballot_box_with_check\",\n\t\t\t\"heavy_check_mark\",\n\t\t\t\"heavy_multiplication_x\",\n\t\t\t\"x\",\n\t\t\t\"negative_squared_cross_mark\",\n\t\t\t\"heavy_plus_sign\",\n\t\t\t\"heavy_minus_sign\",\n\t\t\t\"heavy_division_sign\",\n\t\t\t\"curly_loop\",\n\t\t\t\"loop\",\n\t\t\t\"part_alternation_mark\",\n\t\t\t\"eight_spoked_asterisk\",\n\t\t\t\"eight_pointed_black_star\",\n\t\t\t\"sparkle\",\n\t\t\t\"bangbang\",\n\t\t\t\"interrobang\",\n\t\t\t\"question\",\n\t\t\t\"grey_question\",\n\t\t\t\"grey_exclamation\",\n\t\t\t\"exclamation\",\n\t\t\t\"wavy_dash\",\n\t\t\t\"copyright\",\n\t\t\t\"registered\",\n\t\t\t\"tm\",\n\t\t\t\"hash\",\n\t\t\t\"keycap_star\",\n\t\t\t\"zero\",\n\t\t\t\"one\",\n\t\t\t\"two\",\n\t\t\t\"three\",\n\t\t\t\"four\",\n\t\t\t\"five\",\n\t\t\t\"six\",\n\t\t\t\"seven\",\n\t\t\t\"eight\",\n\t\t\t\"nine\",\n\t\t\t\"keycap_ten\",\n\t\t\t\"100\",\n\t\t\t\"capital_abcd\",\n\t\t\t\"abcd\",\n\t\t\t\"1234\",\n\t\t\t\"symbols\",\n\t\t\t\"abc\",\n\t\t\t\"a\",\n\t\t\t\"ab\",\n\t\t\t\"b\",\n\t\t\t\"cl\",\n\t\t\t\"cool\",\n\t\t\t\"free\",\n\t\t\t\"information_source\",\n\t\t\t\"id\",\n\t\t\t\"m\",\n\t\t\t\"new\",\n\t\t\t\"ng\",\n\t\t\t\"o2\",\n\t\t\t\"ok\",\n\t\t\t\"parking\",\n\t\t\t\"sos\",\n\t\t\t\"up\",\n\t\t\t\"vs\",\n\t\t\t\"koko\",\n\t\t\t\"sa\",\n\t\t\t\"u6708\",\n\t\t\t\"u6709\",\n\t\t\t\"u6307\",\n\t\t\t\"ideograph_advantage\",\n\t\t\t\"u5272\",\n\t\t\t\"u7121\",\n\t\t\t\"u7981\",\n\t\t\t\"accept\",\n\t\t\t\"u7533\",\n\t\t\t\"u5408\",\n\t\t\t\"u7a7a\",\n\t\t\t\"congratulations\",\n\t\t\t\"secret\",\n\t\t\t\"u55b6\",\n\t\t\t\"u6e80\",\n\t\t\t\"black_small_square\",\n\t\t\t\"white_small_square\",\n\t\t\t\"white_medium_square\",\n\t\t\t\"black_medium_square\",\n\t\t\t\"white_medium_small_square\",\n\t\t\t\"black_medium_small_square\",\n\t\t\t\"black_large_square\",\n\t\t\t\"white_large_square\",\n\t\t\t\"large_orange_diamond\",\n\t\t\t\"large_blue_diamond\",\n\t\t\t\"small_orange_diamond\",\n\t\t\t\"small_blue_diamond\",\n\t\t\t\"small_red_triangle\",\n\t\t\t\"small_red_triangle_down\",\n\t\t\t\"diamond_shape_with_a_dot_inside\",\n\t\t\t\"radio_button\",\n\t\t\t\"black_square_button\",\n\t\t\t\"white_square_button\",\n\t\t\t\"white_circle\",\n\t\t\t\"black_circle\",\n\t\t\t\"red_circle\",\n\t\t\t\"large_blue_circle\"\n\t\t]\n\t},\n\t{\n\t\tid: \"flags\",\n\t\tname: \"Flags\",\n\t\temojis: [\n\t\t\t\"checkered_flag\",\n\t\t\t\"cn\",\n\t\t\t\"crossed_flags\",\n\t\t\t\"de\",\n\t\t\t\"es\",\n\t\t\t\"flag-ac\",\n\t\t\t\"flag-ad\",\n\t\t\t\"flag-ae\",\n\t\t\t\"flag-af\",\n\t\t\t\"flag-ag\",\n\t\t\t\"flag-ai\",\n\t\t\t\"flag-al\",\n\t\t\t\"flag-am\",\n\t\t\t\"flag-ao\",\n\t\t\t\"flag-aq\",\n\t\t\t\"flag-ar\",\n\t\t\t\"flag-as\",\n\t\t\t\"flag-at\",\n\t\t\t\"flag-au\",\n\t\t\t\"flag-aw\",\n\t\t\t\"flag-ax\",\n\t\t\t\"flag-az\",\n\t\t\t\"flag-ba\",\n\t\t\t\"flag-bb\",\n\t\t\t\"flag-bd\",\n\t\t\t\"flag-be\",\n\t\t\t\"flag-bf\",\n\t\t\t\"flag-bg\",\n\t\t\t\"flag-bh\",\n\t\t\t\"flag-bi\",\n\t\t\t\"flag-bj\",\n\t\t\t\"flag-bl\",\n\t\t\t\"flag-bm\",\n\t\t\t\"flag-bn\",\n\t\t\t\"flag-bo\",\n\t\t\t\"flag-bq\",\n\t\t\t\"flag-br\",\n\t\t\t\"flag-bs\",\n\t\t\t\"flag-bt\",\n\t\t\t\"flag-bv\",\n\t\t\t\"flag-bw\",\n\t\t\t\"flag-by\",\n\t\t\t\"flag-bz\",\n\t\t\t\"flag-ca\",\n\t\t\t\"flag-cc\",\n\t\t\t\"flag-cd\",\n\t\t\t\"flag-cf\",\n\t\t\t\"flag-cg\",\n\t\t\t\"flag-ch\",\n\t\t\t\"flag-ci\",\n\t\t\t\"flag-ck\",\n\t\t\t\"flag-cl\",\n\t\t\t\"flag-cm\",\n\t\t\t\"flag-co\",\n\t\t\t\"flag-cp\",\n\t\t\t\"flag-cr\",\n\t\t\t\"flag-cu\",\n\t\t\t\"flag-cv\",\n\t\t\t\"flag-cw\",\n\t\t\t\"flag-cx\",\n\t\t\t\"flag-cy\",\n\t\t\t\"flag-cz\",\n\t\t\t\"flag-dg\",\n\t\t\t\"flag-dj\",\n\t\t\t\"flag-dk\",\n\t\t\t\"flag-dm\",\n\t\t\t\"flag-do\",\n\t\t\t\"flag-dz\",\n\t\t\t\"flag-ea\",\n\t\t\t\"flag-ec\",\n\t\t\t\"flag-ee\",\n\t\t\t\"flag-eg\",\n\t\t\t\"flag-eh\",\n\t\t\t\"flag-england\",\n\t\t\t\"flag-er\",\n\t\t\t\"flag-et\",\n\t\t\t\"flag-eu\",\n\t\t\t\"flag-fi\",\n\t\t\t\"flag-fj\",\n\t\t\t\"flag-fk\",\n\t\t\t\"flag-fm\",\n\t\t\t\"flag-fo\",\n\t\t\t\"flag-ga\",\n\t\t\t\"flag-gd\",\n\t\t\t\"flag-ge\",\n\t\t\t\"flag-gf\",\n\t\t\t\"flag-gg\",\n\t\t\t\"flag-gh\",\n\t\t\t\"flag-gi\",\n\t\t\t\"flag-gl\",\n\t\t\t\"flag-gm\",\n\t\t\t\"flag-gn\",\n\t\t\t\"flag-gp\",\n\t\t\t\"flag-gq\",\n\t\t\t\"flag-gr\",\n\t\t\t\"flag-gs\",\n\t\t\t\"flag-gt\",\n\t\t\t\"flag-gu\",\n\t\t\t\"flag-gw\",\n\t\t\t\"flag-gy\",\n\t\t\t\"flag-hk\",\n\t\t\t\"flag-hm\",\n\t\t\t\"flag-hn\",\n\t\t\t\"flag-hr\",\n\t\t\t\"flag-ht\",\n\t\t\t\"flag-hu\",\n\t\t\t\"flag-ic\",\n\t\t\t\"flag-id\",\n\t\t\t\"flag-ie\",\n\t\t\t\"flag-il\",\n\t\t\t\"flag-im\",\n\t\t\t\"flag-in\",\n\t\t\t\"flag-io\",\n\t\t\t\"flag-iq\",\n\t\t\t\"flag-ir\",\n\t\t\t\"flag-is\",\n\t\t\t\"flag-je\",\n\t\t\t\"flag-jm\",\n\t\t\t\"flag-jo\",\n\t\t\t\"flag-ke\",\n\t\t\t\"flag-kg\",\n\t\t\t\"flag-kh\",\n\t\t\t\"flag-ki\",\n\t\t\t\"flag-km\",\n\t\t\t\"flag-kn\",\n\t\t\t\"flag-kp\",\n\t\t\t\"flag-kw\",\n\t\t\t\"flag-ky\",\n\t\t\t\"flag-kz\",\n\t\t\t\"flag-la\",\n\t\t\t\"flag-lb\",\n\t\t\t\"flag-lc\",\n\t\t\t\"flag-li\",\n\t\t\t\"flag-lk\",\n\t\t\t\"flag-lr\",\n\t\t\t\"flag-ls\",\n\t\t\t\"flag-lt\",\n\t\t\t\"flag-lu\",\n\t\t\t\"flag-lv\",\n\t\t\t\"flag-ly\",\n\t\t\t\"flag-ma\",\n\t\t\t\"flag-mc\",\n\t\t\t\"flag-md\",\n\t\t\t\"flag-me\",\n\t\t\t\"flag-mf\",\n\t\t\t\"flag-mg\",\n\t\t\t\"flag-mh\",\n\t\t\t\"flag-mk\",\n\t\t\t\"flag-ml\",\n\t\t\t\"flag-mm\",\n\t\t\t\"flag-mn\",\n\t\t\t\"flag-mo\",\n\t\t\t\"flag-mp\",\n\t\t\t\"flag-mq\",\n\t\t\t\"flag-mr\",\n\t\t\t\"flag-ms\",\n\t\t\t\"flag-mt\",\n\t\t\t\"flag-mu\",\n\t\t\t\"flag-mv\",\n\t\t\t\"flag-mw\",\n\t\t\t\"flag-mx\",\n\t\t\t\"flag-my\",\n\t\t\t\"flag-mz\",\n\t\t\t\"flag-na\",\n\t\t\t\"flag-nc\",\n\t\t\t\"flag-ne\",\n\t\t\t\"flag-nf\",\n\t\t\t\"flag-ng\",\n\t\t\t\"flag-ni\",\n\t\t\t\"flag-nl\",\n\t\t\t\"flag-no\",\n\t\t\t\"flag-np\",\n\t\t\t\"flag-nr\",\n\t\t\t\"flag-nu\",\n\t\t\t\"flag-nz\",\n\t\t\t\"flag-om\",\n\t\t\t\"flag-pa\",\n\t\t\t\"flag-pe\",\n\t\t\t\"flag-pf\",\n\t\t\t\"flag-pg\",\n\t\t\t\"flag-ph\",\n\t\t\t\"flag-pk\",\n\t\t\t\"flag-pl\",\n\t\t\t\"flag-pm\",\n\t\t\t\"flag-pn\",\n\t\t\t\"flag-pr\",\n\t\t\t\"flag-ps\",\n\t\t\t\"flag-pt\",\n\t\t\t\"flag-pw\",\n\t\t\t\"flag-py\",\n\t\t\t\"flag-qa\",\n\t\t\t\"flag-re\",\n\t\t\t\"flag-ro\",\n\t\t\t\"flag-rs\",\n\t\t\t\"flag-rw\",\n\t\t\t\"flag-sa\",\n\t\t\t\"flag-sb\",\n\t\t\t\"flag-sc\",\n\t\t\t\"flag-scotland\",\n\t\t\t\"flag-sd\",\n\t\t\t\"flag-se\",\n\t\t\t\"flag-sg\",\n\t\t\t\"flag-sh\",\n\t\t\t\"flag-si\",\n\t\t\t\"flag-sj\",\n\t\t\t\"flag-sk\",\n\t\t\t\"flag-sl\",\n\t\t\t\"flag-sm\",\n\t\t\t\"flag-sn\",\n\t\t\t\"flag-so\",\n\t\t\t\"flag-sr\",\n\t\t\t\"flag-ss\",\n\t\t\t\"flag-st\",\n\t\t\t\"flag-sv\",\n\t\t\t\"flag-sx\",\n\t\t\t\"flag-sy\",\n\t\t\t\"flag-sz\",\n\t\t\t\"flag-ta\",\n\t\t\t\"flag-tc\",\n\t\t\t\"flag-td\",\n\t\t\t\"flag-tf\",\n\t\t\t\"flag-tg\",\n\t\t\t\"flag-th\",\n\t\t\t\"flag-tj\",\n\t\t\t\"flag-tk\",\n\t\t\t\"flag-tl\",\n\t\t\t\"flag-tm\",\n\t\t\t\"flag-tn\",\n\t\t\t\"flag-to\",\n\t\t\t\"flag-tr\",\n\t\t\t\"flag-tt\",\n\t\t\t\"flag-tv\",\n\t\t\t\"flag-tw\",\n\t\t\t\"flag-tz\",\n\t\t\t\"flag-ua\",\n\t\t\t\"flag-ug\",\n\t\t\t\"flag-um\",\n\t\t\t\"flag-uy\",\n\t\t\t\"flag-uz\",\n\t\t\t\"flag-va\",\n\t\t\t\"flag-vc\",\n\t\t\t\"flag-ve\",\n\t\t\t\"flag-vg\",\n\t\t\t\"flag-vi\",\n\t\t\t\"flag-vn\",\n\t\t\t\"flag-vu\",\n\t\t\t\"flag-wales\",\n\t\t\t\"flag-wf\",\n\t\t\t\"flag-ws\",\n\t\t\t\"flag-xk\",\n\t\t\t\"flag-ye\",\n\t\t\t\"flag-yt\",\n\t\t\t\"flag-za\",\n\t\t\t\"flag-zm\",\n\t\t\t\"flag-zw\",\n\t\t\t\"fr\",\n\t\t\t\"gb\",\n\t\t\t\"it\",\n\t\t\t\"jp\",\n\t\t\t\"kr\",\n\t\t\t\"rainbow-flag\",\n\t\t\t\"ru\",\n\t\t\t\"triangular_flag_on_post\",\n\t\t\t\"us\",\n\t\t\t\"waving_black_flag\",\n\t\t\t\"waving_white_flag\"\n\t\t]\n\t}\n];\nvar emojis = {\n\t\"100\": {\n\t\ta: \"Hundred Points Symbol\",\n\t\tb: \"1F4AF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"score\",\n\t\t\t\"perfect\",\n\t\t\t\"numbers\",\n\t\t\t\"century\",\n\t\t\t\"exam\",\n\t\t\t\"quiz\",\n\t\t\t\"test\",\n\t\t\t\"pass\",\n\t\t\t\"hundred\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t26\n\t\t]\n\t},\n\t\"1234\": {\n\t\ta: \"Input Symbol for Numbers\",\n\t\tb: \"1F522\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t36\n\t\t]\n\t},\n\tmonkey_face: {\n\t\ta: \"Monkey Face\",\n\t\tb: \"1F435\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t31\n\t\t],\n\t\tl: [\n\t\t\t\":o)\"\n\t\t]\n\t},\n\tgrinning: {\n\t\ta: \"Grinning Face\",\n\t\tb: \"1F600\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"smile\",\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\":D\",\n\t\t\t\"grin\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t24\n\t\t],\n\t\tm: \":D\"\n\t},\n\tearth_africa: {\n\t\ta: \"Earth Globe Europe-Africa\",\n\t\tb: \"1F30D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"globe\",\n\t\t\t\"world\",\n\t\t\t\"international\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t5\n\t\t]\n\t},\n\tcheckered_flag: {\n\t\ta: \"Chequered Flag\",\n\t\tb: \"1F3C1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"contest\",\n\t\t\t\"finishline\",\n\t\t\t\"race\",\n\t\t\t\"gokart\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t27\n\t\t]\n\t},\n\tmute: {\n\t\ta: \"Speaker with Cancellation Stroke\",\n\t\tb: \"1F507\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"volume\",\n\t\t\t\"silence\",\n\t\t\t\"quiet\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t9\n\t\t]\n\t},\n\tjack_o_lantern: {\n\t\ta: \"Jack-O-Lantern\",\n\t\tb: \"1F383\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"halloween\",\n\t\t\t\"light\",\n\t\t\t\"pumpkin\",\n\t\t\t\"creepy\",\n\t\t\t\"fall\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t17\n\t\t]\n\t},\n\tatm: {\n\t\ta: \"Automated Teller Machine\",\n\t\tb: \"1F3E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"cash\",\n\t\t\t\"blue-square\",\n\t\t\t\"payment\",\n\t\t\t\"bank\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t4\n\t\t]\n\t},\n\tgrapes: {\n\t\ta: \"Grapes\",\n\t\tb: \"1F347\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"wine\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t9\n\t\t]\n\t},\n\tearth_americas: {\n\t\ta: \"Earth Globe Americas\",\n\t\tb: \"1F30E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"globe\",\n\t\t\t\"world\",\n\t\t\t\"USA\",\n\t\t\t\"international\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t6\n\t\t]\n\t},\n\tgrin: {\n\t\ta: \"Grinning Face with Smiling Eyes\",\n\t\tb: \"1F601\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"happy\",\n\t\t\t\"smile\",\n\t\t\t\"joy\",\n\t\t\t\"kawaii\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t25\n\t\t]\n\t},\n\tmelon: {\n\t\ta: \"Melon\",\n\t\tb: \"1F348\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t10\n\t\t]\n\t},\n\ttriangular_flag_on_post: {\n\t\ta: \"Triangular Flag on Post\",\n\t\tb: \"1F6A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mark\",\n\t\t\t\"milestone\",\n\t\t\t\"place\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t14\n\t\t]\n\t},\n\tmonkey: {\n\t\ta: \"Monkey\",\n\t\tb: \"1F412\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"banana\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t48\n\t\t]\n\t},\n\tchristmas_tree: {\n\t\ta: \"Christmas Tree\",\n\t\tb: \"1F384\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"festival\",\n\t\t\t\"vacation\",\n\t\t\t\"december\",\n\t\t\t\"xmas\",\n\t\t\t\"celebration\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t18\n\t\t]\n\t},\n\tput_litter_in_its_place: {\n\t\ta: \"Put Litter in Its Place Symbol\",\n\t\tb: \"1F6AE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"sign\",\n\t\t\t\"human\",\n\t\t\t\"info\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t19\n\t\t]\n\t},\n\tspeaker: {\n\t\ta: \"Speaker\",\n\t\tb: \"1F508\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"volume\",\n\t\t\t\"silence\",\n\t\t\t\"broadcast\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t10\n\t\t]\n\t},\n\tearth_asia: {\n\t\ta: \"Earth Globe Asia-Australia\",\n\t\tb: \"1F30F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"globe\",\n\t\t\t\"world\",\n\t\t\t\"east\",\n\t\t\t\"international\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t7\n\t\t]\n\t},\n\tcrossed_flags: {\n\t\ta: \"Crossed Flags\",\n\t\tb: \"1F38C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"border\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t31\n\t\t]\n\t},\n\tjoy: {\n\t\ta: \"Face with Tears of Joy\",\n\t\tb: \"1F602\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"cry\",\n\t\t\t\"tears\",\n\t\t\t\"weep\",\n\t\t\t\"happy\",\n\t\t\t\"happytears\",\n\t\t\t\"haha\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t26\n\t\t]\n\t},\n\tsound: {\n\t\ta: \"Speaker with One Sound Wave\",\n\t\tb: \"1F509\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"volume\",\n\t\t\t\"speaker\",\n\t\t\t\"broadcast\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t11\n\t\t]\n\t},\n\twatermelon: {\n\t\ta: \"Watermelon\",\n\t\tb: \"1F349\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"picnic\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t11\n\t\t]\n\t},\n\tgorilla: {\n\t\ta: \"Gorilla\",\n\t\tb: \"1F98D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t37\n\t\t],\n\t\to: 9\n\t},\n\tfireworks: {\n\t\ta: \"Fireworks\",\n\t\tb: \"1F386\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"festival\",\n\t\t\t\"carnival\",\n\t\t\t\"congratulations\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t25\n\t\t]\n\t},\n\tpotable_water: {\n\t\ta: \"Potable Water Symbol\",\n\t\tb: \"1F6B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"liquid\",\n\t\t\t\"restroom\",\n\t\t\t\"cleaning\",\n\t\t\t\"faucet\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t21\n\t\t]\n\t},\n\twheelchair: {\n\t\ta: \"Wheelchair Symbol\",\n\t\tb: \"267F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"disabled\",\n\t\t\t\"a11y\",\n\t\t\t\"accessibility\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t10\n\t\t],\n\t\to: 4\n\t},\n\trolling_on_the_floor_laughing: {\n\t\ta: \"Rolling on the Floor Laughing\",\n\t\tb: \"1F923\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t26\n\t\t],\n\t\to: 9\n\t},\n\tloud_sound: {\n\t\ta: \"Speaker with Three Sound Waves\",\n\t\tb: \"1F50A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"volume\",\n\t\t\t\"noise\",\n\t\t\t\"noisy\",\n\t\t\t\"speaker\",\n\t\t\t\"broadcast\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t12\n\t\t]\n\t},\n\twaving_black_flag: {\n\t\ta: \"Waving Black Flag\",\n\t\tb: \"1F3F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t19\n\t\t],\n\t\to: 7\n\t},\n\ttangerine: {\n\t\ta: \"Tangerine\",\n\t\tb: \"1F34A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"orange\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t12\n\t\t]\n\t},\n\tdog: {\n\t\ta: \"Dog Face\",\n\t\tb: \"1F436\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"friend\",\n\t\t\t\"nature\",\n\t\t\t\"woof\",\n\t\t\t\"puppy\",\n\t\t\t\"pet\",\n\t\t\t\"faithful\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t32\n\t\t]\n\t},\n\tsparkler: {\n\t\ta: \"Firework Sparkler\",\n\t\tb: \"1F387\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stars\",\n\t\t\t\"night\",\n\t\t\t\"shine\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t26\n\t\t]\n\t},\n\tglobe_with_meridians: {\n\t\ta: \"Globe with Meridians\",\n\t\tb: \"1F310\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"earth\",\n\t\t\t\"international\",\n\t\t\t\"world\",\n\t\t\t\"internet\",\n\t\t\t\"interweb\",\n\t\t\t\"i18n\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t8\n\t\t]\n\t},\n\tsmiley: {\n\t\ta: \"Smiling Face with Open Mouth\",\n\t\tb: \"1F603\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\"haha\",\n\t\t\t\":D\",\n\t\t\t\":)\",\n\t\t\t\"smile\",\n\t\t\t\"funny\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t27\n\t\t],\n\t\tl: [\n\t\t\t\"=)\",\n\t\t\t\"=-)\"\n\t\t],\n\t\tm: \":)\"\n\t},\n\tloudspeaker: {\n\t\ta: \"Public Address Loudspeaker\",\n\t\tb: \"1F4E2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"volume\",\n\t\t\t\"sound\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t25\n\t\t]\n\t},\n\tsparkles: {\n\t\ta: \"Sparkles\",\n\t\tb: \"2728\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stars\",\n\t\t\t\"shine\",\n\t\t\t\"shiny\",\n\t\t\t\"cool\",\n\t\t\t\"awesome\",\n\t\t\t\"good\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t48\n\t\t]\n\t},\n\tdog2: {\n\t\ta: \"Dog\",\n\t\tb: \"1F415\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"friend\",\n\t\t\t\"doge\",\n\t\t\t\"pet\",\n\t\t\t\"faithful\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t51\n\t\t]\n\t},\n\twaving_white_flag: {\n\t\ta: \"Waving White Flag\",\n\t\tb: \"1F3F3-FE0F\",\n\t\tc: \"1F3F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t15\n\t\t],\n\t\to: 7\n\t},\n\tworld_map: {\n\t\ta: \"World Map\",\n\t\tb: \"1F5FA-FE0F\",\n\t\tc: \"1F5FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"location\",\n\t\t\t\"direction\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\tlemon: {\n\t\ta: \"Lemon\",\n\t\tb: \"1F34B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t13\n\t\t]\n\t},\n\tmens: {\n\t\ta: \"Mens Symbol\",\n\t\tb: \"1F6B9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"toilet\",\n\t\t\t\"restroom\",\n\t\t\t\"wc\",\n\t\t\t\"blue-square\",\n\t\t\t\"gender\",\n\t\t\t\"male\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t29\n\t\t]\n\t},\n\twomens: {\n\t\ta: \"Womens Symbol\",\n\t\tb: \"1F6BA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"woman\",\n\t\t\t\"female\",\n\t\t\t\"toilet\",\n\t\t\t\"loo\",\n\t\t\t\"restroom\",\n\t\t\t\"gender\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t30\n\t\t]\n\t},\n\t\"rainbow-flag\": {\n\t\ta: \"Rainbow Flag\",\n\t\tb: \"1F3F3-FE0F-200D-1F308\",\n\t\tc: \"1F3F3-200D-1F308\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t12,\n\t\t\t14\n\t\t],\n\t\to: 7\n\t},\n\tsmile: {\n\t\ta: \"Smiling Face with Open Mouth and Smiling Eyes\",\n\t\tb: \"1F604\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\"funny\",\n\t\t\t\"haha\",\n\t\t\t\"laugh\",\n\t\t\t\"like\",\n\t\t\t\":D\",\n\t\t\t\":)\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t28\n\t\t],\n\t\tl: [\n\t\t\t\"C:\",\n\t\t\t\"c:\",\n\t\t\t\":D\",\n\t\t\t\":-D\"\n\t\t],\n\t\tm: \":)\"\n\t},\n\tbanana: {\n\t\ta: \"Banana\",\n\t\tb: \"1F34C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"monkey\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t14\n\t\t]\n\t},\n\tmega: {\n\t\ta: \"Cheering Megaphone\",\n\t\tb: \"1F4E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"speaker\",\n\t\t\t\"volume\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t26\n\t\t]\n\t},\n\tjapan: {\n\t\ta: \"Silhouette of Japan\",\n\t\tb: \"1F5FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"japanese\",\n\t\t\t\"asia\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t22\n\t\t]\n\t},\n\tpoodle: {\n\t\ta: \"Poodle\",\n\t\tb: \"1F429\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dog\",\n\t\t\t\"animal\",\n\t\t\t\"101\",\n\t\t\t\"nature\",\n\t\t\t\"pet\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t19\n\t\t]\n\t},\n\tballoon: {\n\t\ta: \"Balloon\",\n\t\tb: \"1F388\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"party\",\n\t\t\t\"celebration\",\n\t\t\t\"birthday\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t27\n\t\t]\n\t},\n\t\"flag-ac\": {\n\t\ta: \"Ascension Island Flag\",\n\t\tb: \"1F1E6-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t31\n\t\t]\n\t},\n\tsweat_smile: {\n\t\ta: \"Smiling Face with Open Mouth and Cold Sweat\",\n\t\tb: \"1F605\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"hot\",\n\t\t\t\"happy\",\n\t\t\t\"laugh\",\n\t\t\t\"sweat\",\n\t\t\t\"smile\",\n\t\t\t\"relief\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t29\n\t\t]\n\t},\n\tpineapple: {\n\t\ta: \"Pineapple\",\n\t\tb: \"1F34D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t15\n\t\t]\n\t},\n\trestroom: {\n\t\ta: \"Restroom\",\n\t\tb: \"1F6BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"toilet\",\n\t\t\t\"refresh\",\n\t\t\t\"wc\",\n\t\t\t\"gender\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t31\n\t\t]\n\t},\n\tpostal_horn: {\n\t\ta: \"Postal Horn\",\n\t\tb: \"1F4EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"instrument\",\n\t\t\t\"music\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t38\n\t\t]\n\t},\n\twolf: {\n\t\ta: \"Wolf Face\",\n\t\tb: \"1F43A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"wild\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t36\n\t\t]\n\t},\n\ttada: {\n\t\ta: \"Party Popper\",\n\t\tb: \"1F389\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"party\",\n\t\t\t\"congratulations\",\n\t\t\t\"birthday\",\n\t\t\t\"magic\",\n\t\t\t\"circus\",\n\t\t\t\"celebration\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t28\n\t\t]\n\t},\n\tsnow_capped_mountain: {\n\t\ta: \"Snow Capped Mountain\",\n\t\tb: \"1F3D4-FE0F\",\n\t\tc: \"1F3D4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t37\n\t\t],\n\t\to: 7\n\t},\n\tlaughing: {\n\t\ta: \"Smiling Face with Open Mouth and Tightly-Closed Eyes\",\n\t\tb: \"1F606\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\"lol\",\n\t\t\t\"satisfied\",\n\t\t\t\"haha\",\n\t\t\t\"face\",\n\t\t\t\"glad\",\n\t\t\t\"XD\",\n\t\t\t\"laugh\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\tl: [\n\t\t\t\":>\",\n\t\t\t\":->\"\n\t\t],\n\t\tn: [\n\t\t\t\"satisfied\"\n\t\t]\n\t},\n\tapple: {\n\t\ta: \"Red Apple\",\n\t\tb: \"1F34E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"mac\",\n\t\t\t\"school\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t16\n\t\t]\n\t},\n\t\"flag-ad\": {\n\t\ta: \"Andorra Flag\",\n\t\tb: \"1F1E6-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t32\n\t\t]\n\t},\n\tfox_face: {\n\t\ta: \"Fox Face\",\n\t\tb: \"1F98A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"face\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t34\n\t\t],\n\t\to: 9\n\t},\n\tconfetti_ball: {\n\t\ta: \"Confetti Ball\",\n\t\tb: \"1F38A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"festival\",\n\t\t\t\"party\",\n\t\t\t\"birthday\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t29\n\t\t]\n\t},\n\tbell: {\n\t\ta: \"Bell\",\n\t\tb: \"1F514\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"notification\",\n\t\t\t\"christmas\",\n\t\t\t\"xmas\",\n\t\t\t\"chime\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t22\n\t\t]\n\t},\n\tmountain: {\n\t\ta: \"Mountain\",\n\t\tb: \"26F0-FE0F\",\n\t\tc: \"26F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"nature\",\n\t\t\t\"environment\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t38\n\t\t],\n\t\to: 5\n\t},\n\tbaby_symbol: {\n\t\ta: \"Baby Symbol\",\n\t\tb: \"1F6BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"orange-square\",\n\t\t\t\"child\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t32\n\t\t]\n\t},\n\twc: {\n\t\ta: \"Water Closet\",\n\t\tb: \"1F6BE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"toilet\",\n\t\t\t\"restroom\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t34\n\t\t]\n\t},\n\twink: {\n\t\ta: \"Winking Face\",\n\t\tb: \"1F609\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"happy\",\n\t\t\t\"mischievous\",\n\t\t\t\"secret\",\n\t\t\t\";)\",\n\t\t\t\"smile\",\n\t\t\t\"eye\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t33\n\t\t],\n\t\tl: [\n\t\t\t\";)\",\n\t\t\t\";-)\"\n\t\t],\n\t\tm: \";)\"\n\t},\n\tno_bell: {\n\t\ta: \"Bell with Cancellation Stroke\",\n\t\tb: \"1F515\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"volume\",\n\t\t\t\"mute\",\n\t\t\t\"quiet\",\n\t\t\t\"silent\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t23\n\t\t]\n\t},\n\tgreen_apple: {\n\t\ta: \"Green Apple\",\n\t\tb: \"1F34F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t17\n\t\t]\n\t},\n\ttanabata_tree: {\n\t\ta: \"Tanabata Tree\",\n\t\tb: \"1F38B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"branch\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-ae\": {\n\t\ta: \"United Arab Emirates Flag\",\n\t\tb: \"1F1E6-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t33\n\t\t]\n\t},\n\tvolcano: {\n\t\ta: \"Volcano\",\n\t\tb: \"1F30B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"nature\",\n\t\t\t\"disaster\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t3\n\t\t]\n\t},\n\tcat: {\n\t\ta: \"Cat Face\",\n\t\tb: \"1F431\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"meow\",\n\t\t\t\"nature\",\n\t\t\t\"pet\",\n\t\t\t\"kitten\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t27\n\t\t]\n\t},\n\t\"flag-af\": {\n\t\ta: \"Afghanistan Flag\",\n\t\tb: \"1F1E6-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t34\n\t\t]\n\t},\n\tmusical_score: {\n\t\ta: \"Musical Score\",\n\t\tb: \"1F3BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"treble\",\n\t\t\t\"clef\",\n\t\t\t\"compose\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t22\n\t\t]\n\t},\n\tblush: {\n\t\ta: \"Smiling Face with Smiling Eyes\",\n\t\tb: \"1F60A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"smile\",\n\t\t\t\"happy\",\n\t\t\t\"flushed\",\n\t\t\t\"crush\",\n\t\t\t\"embarrassed\",\n\t\t\t\"shy\",\n\t\t\t\"joy\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t34\n\t\t],\n\t\tm: \":)\"\n\t},\n\tpear: {\n\t\ta: \"Pear\",\n\t\tb: \"1F350\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t18\n\t\t]\n\t},\n\tbamboo: {\n\t\ta: \"Pine Decoration\",\n\t\tb: \"1F38D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"vegetable\",\n\t\t\t\"panda\",\n\t\t\t\"pine_decoration\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t32\n\t\t]\n\t},\n\tpassport_control: {\n\t\ta: \"Passport Control\",\n\t\tb: \"1F6C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"custom\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t43\n\t\t]\n\t},\n\tmount_fuji: {\n\t\ta: \"Mount Fuji\",\n\t\tb: \"1F5FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"mountain\",\n\t\t\t\"nature\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t19\n\t\t]\n\t},\n\tcat2: {\n\t\ta: \"Cat\",\n\t\tb: \"1F408\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"meow\",\n\t\t\t\"pet\",\n\t\t\t\"cats\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t38\n\t\t]\n\t},\n\tmusical_note: {\n\t\ta: \"Musical Note\",\n\t\tb: \"1F3B5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"score\",\n\t\t\t\"tone\",\n\t\t\t\"sound\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t15\n\t\t]\n\t},\n\tdolls: {\n\t\ta: \"Japanese Dolls\",\n\t\tb: \"1F38E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"toy\",\n\t\t\t\"kimono\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t33\n\t\t]\n\t},\n\tlion_face: {\n\t\ta: \"Lion Face\",\n\t\tb: \"1F981\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t25\n\t\t],\n\t\to: 8\n\t},\n\tcamping: {\n\t\ta: \"Camping\",\n\t\tb: \"1F3D5-FE0F\",\n\t\tc: \"1F3D5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"outdoors\",\n\t\t\t\"tent\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t38\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-ag\": {\n\t\ta: \"Antigua & Barbuda Flag\",\n\t\tb: \"1F1E6-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t35\n\t\t]\n\t},\n\tcustoms: {\n\t\ta: \"Customs\",\n\t\tb: \"1F6C3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"passport\",\n\t\t\t\"border\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t44\n\t\t]\n\t},\n\tyum: {\n\t\ta: \"Face Savouring Delicious Food\",\n\t\tb: \"1F60B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"happy\",\n\t\t\t\"joy\",\n\t\t\t\"tongue\",\n\t\t\t\"smile\",\n\t\t\t\"face\",\n\t\t\t\"silly\",\n\t\t\t\"yummy\",\n\t\t\t\"nom\",\n\t\t\t\"delicious\",\n\t\t\t\"savouring\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t35\n\t\t]\n\t},\n\tpeach: {\n\t\ta: \"Peach\",\n\t\tb: \"1F351\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t19\n\t\t]\n\t},\n\ttiger: {\n\t\ta: \"Tiger Face\",\n\t\tb: \"1F42F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cat\",\n\t\t\t\"danger\",\n\t\t\t\"wild\",\n\t\t\t\"nature\",\n\t\t\t\"roar\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t25\n\t\t]\n\t},\n\tnotes: {\n\t\ta: \"Multiple Musical Notes\",\n\t\tb: \"1F3B6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"score\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t16\n\t\t]\n\t},\n\tflags: {\n\t\ta: \"Carp Streamer\",\n\t\tb: \"1F38F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fish\",\n\t\t\t\"japanese\",\n\t\t\t\"koinobori\",\n\t\t\t\"carp\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t34\n\t\t]\n\t},\n\tbeach_with_umbrella: {\n\t\ta: \"Beach with Umbrella\",\n\t\tb: \"1F3D6-FE0F\",\n\t\tc: \"1F3D6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t39\n\t\t],\n\t\to: 7\n\t},\n\tcherries: {\n\t\ta: \"Cherries\",\n\t\tb: \"1F352\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"fruit\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t20\n\t\t]\n\t},\n\t\"flag-ai\": {\n\t\ta: \"Anguilla Flag\",\n\t\tb: \"1F1E6-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t36\n\t\t]\n\t},\n\tbaggage_claim: {\n\t\ta: \"Baggage Claim\",\n\t\tb: \"1F6C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"airport\",\n\t\t\t\"transport\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t45\n\t\t]\n\t},\n\tsunglasses: {\n\t\ta: \"Smiling Face with Sunglasses\",\n\t\tb: \"1F60E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"cool\",\n\t\t\t\"smile\",\n\t\t\t\"summer\",\n\t\t\t\"beach\",\n\t\t\t\"sunglass\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t38\n\t\t],\n\t\tl: [\n\t\t\t\"8)\"\n\t\t]\n\t},\n\tleft_luggage: {\n\t\ta: \"Left Luggage\",\n\t\tb: \"1F6C5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"travel\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t46\n\t\t]\n\t},\n\twind_chime: {\n\t\ta: \"Wind Chime\",\n\t\tb: \"1F390\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"ding\",\n\t\t\t\"spring\",\n\t\t\t\"bell\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t35\n\t\t]\n\t},\n\tstrawberry: {\n\t\ta: \"Strawberry\",\n\t\tb: \"1F353\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t21\n\t\t]\n\t},\n\tdesert: {\n\t\ta: \"Desert\",\n\t\tb: \"1F3DC-FE0F\",\n\t\tc: \"1F3DC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"warm\",\n\t\t\t\"saharah\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t45\n\t\t],\n\t\to: 7\n\t},\n\tstudio_microphone: {\n\t\ta: \"Studio Microphone\",\n\t\tb: \"1F399-FE0F\",\n\t\tc: \"1F399\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sing\",\n\t\t\t\"recording\",\n\t\t\t\"artist\",\n\t\t\t\"talkshow\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t41\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-al\": {\n\t\ta: \"Albania Flag\",\n\t\tb: \"1F1E6-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t37\n\t\t]\n\t},\n\ttiger2: {\n\t\ta: \"Tiger\",\n\t\tb: \"1F405\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"roar\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t35\n\t\t]\n\t},\n\theart_eyes: {\n\t\ta: \"Smiling Face with Heart-Shaped Eyes\",\n\t\tb: \"1F60D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"crush\",\n\t\t\t\"heart\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t37\n\t\t]\n\t},\n\tdesert_island: {\n\t\ta: \"Desert Island\",\n\t\tb: \"1F3DD-FE0F\",\n\t\tc: \"1F3DD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"tropical\",\n\t\t\t\"mojito\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t46\n\t\t],\n\t\to: 7\n\t},\n\tkiwifruit: {\n\t\ta: \"Kiwifruit\",\n\t\tb: \"1F95D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t9\n\t\t],\n\t\to: 9\n\t},\n\trice_scene: {\n\t\ta: \"Moon Viewing Ceremony\",\n\t\tb: \"1F391\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"japan\",\n\t\t\t\"asia\",\n\t\t\t\"tsukimi\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t36\n\t\t]\n\t},\n\tkissing_heart: {\n\t\ta: \"Face Throwing a Kiss\",\n\t\tb: \"1F618\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t48\n\t\t],\n\t\tl: [\n\t\t\t\":*\",\n\t\t\t\":-*\"\n\t\t]\n\t},\n\twarning: {\n\t\ta: \"Warning Sign\",\n\t\tb: \"26A0-FE0F\",\n\t\tc: \"26A0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"exclamation\",\n\t\t\t\"wip\",\n\t\t\t\"alert\",\n\t\t\t\"error\",\n\t\t\t\"problem\",\n\t\t\t\"issue\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t20\n\t\t],\n\t\to: 4\n\t},\n\t\"flag-am\": {\n\t\ta: \"Armenia Flag\",\n\t\tb: \"1F1E6-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t38\n\t\t]\n\t},\n\tleopard: {\n\t\ta: \"Leopard\",\n\t\tb: \"1F406\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t36\n\t\t]\n\t},\n\tlevel_slider: {\n\t\ta: \"Level Slider\",\n\t\tb: \"1F39A-FE0F\",\n\t\tc: \"1F39A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"scale\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t42\n\t\t],\n\t\to: 7\n\t},\n\thorse: {\n\t\ta: \"Horse Face\",\n\t\tb: \"1F434\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"brown\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t30\n\t\t]\n\t},\n\tchildren_crossing: {\n\t\ta: \"Children Crossing\",\n\t\tb: \"1F6B8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"school\",\n\t\t\t\"warning\",\n\t\t\t\"danger\",\n\t\t\t\"sign\",\n\t\t\t\"driving\",\n\t\t\t\"yellow-diamond\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t28\n\t\t]\n\t},\n\tribbon: {\n\t\ta: \"Ribbon\",\n\t\tb: \"1F380\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"decoration\",\n\t\t\t\"pink\",\n\t\t\t\"girl\",\n\t\t\t\"bowtie\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t14\n\t\t]\n\t},\n\tnational_park: {\n\t\ta: \"National Park\",\n\t\tb: \"1F3DE-FE0F\",\n\t\tc: \"1F3DE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"environment\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t47\n\t\t],\n\t\to: 7\n\t},\n\tcontrol_knobs: {\n\t\ta: \"Control Knobs\",\n\t\tb: \"1F39B-FE0F\",\n\t\tc: \"1F39B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"dial\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t43\n\t\t],\n\t\to: 7\n\t},\n\tkissing: {\n\t\ta: \"Kissing Face\",\n\t\tb: \"1F617\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"face\",\n\t\t\t\"3\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t47\n\t\t]\n\t},\n\ttomato: {\n\t\ta: \"Tomato\",\n\t\tb: \"1F345\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"vegetable\",\n\t\t\t\"nature\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t7\n\t\t]\n\t},\n\t\"flag-ao\": {\n\t\ta: \"Angola Flag\",\n\t\tb: \"1F1E6-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t39\n\t\t]\n\t},\n\tstadium: {\n\t\ta: \"Stadium\",\n\t\tb: \"1F3DF-FE0F\",\n\t\tc: \"1F3DF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"place\",\n\t\t\t\"sports\",\n\t\t\t\"concert\",\n\t\t\t\"venue\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t48\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-aq\": {\n\t\ta: \"Antarctica Flag\",\n\t\tb: \"1F1E6-1F1F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t40\n\t\t]\n\t},\n\tgift: {\n\t\ta: \"Wrapped Present\",\n\t\tb: \"1F381\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"present\",\n\t\t\t\"birthday\",\n\t\t\t\"christmas\",\n\t\t\t\"xmas\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t15\n\t\t]\n\t},\n\tno_entry: {\n\t\ta: \"No Entry\",\n\t\tb: \"26D4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"limit\",\n\t\t\t\"security\",\n\t\t\t\"privacy\",\n\t\t\t\"bad\",\n\t\t\t\"denied\",\n\t\t\t\"stop\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t35\n\t\t],\n\t\to: 5\n\t},\n\tkissing_smiling_eyes: {\n\t\ta: \"Kissing Face with Smiling Eyes\",\n\t\tb: \"1F619\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t49\n\t\t]\n\t},\n\tcoconut: {\n\t\ta: \"Coconut\",\n\t\tb: \"1F965\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t17\n\t\t],\n\t\to: 10\n\t},\n\tracehorse: {\n\t\ta: \"Horse\",\n\t\tb: \"1F40E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"gamble\",\n\t\t\t\"luck\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t44\n\t\t]\n\t},\n\tmicrophone: {\n\t\ta: \"Microphone\",\n\t\tb: \"1F3A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sound\",\n\t\t\t\"music\",\n\t\t\t\"PA\",\n\t\t\t\"sing\",\n\t\t\t\"talkshow\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t50\n\t\t]\n\t},\n\tclassical_building: {\n\t\ta: \"Classical Building\",\n\t\tb: \"1F3DB-FE0F\",\n\t\tc: \"1F3DB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"art\",\n\t\t\t\"culture\",\n\t\t\t\"history\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\tno_entry_sign: {\n\t\ta: \"No Entry Sign\",\n\t\tb: \"1F6AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"forbid\",\n\t\t\t\"stop\",\n\t\t\t\"limit\",\n\t\t\t\"denied\",\n\t\t\t\"disallow\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t16\n\t\t]\n\t},\n\treminder_ribbon: {\n\t\ta: \"Reminder Ribbon\",\n\t\tb: \"1F397-FE0F\",\n\t\tc: \"1F397\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"cause\",\n\t\t\t\"support\",\n\t\t\t\"awareness\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t40\n\t\t],\n\t\to: 7\n\t},\n\tkissing_closed_eyes: {\n\t\ta: \"Kissing Face with Closed Eyes\",\n\t\tb: \"1F61A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"infatuation\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t50\n\t\t]\n\t},\n\tunicorn_face: {\n\t\ta: \"Unicorn Face\",\n\t\tb: \"1F984\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t28\n\t\t],\n\t\to: 8\n\t},\n\t\"flag-ar\": {\n\t\ta: \"Argentina Flag\",\n\t\tb: \"1F1E6-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t41\n\t\t]\n\t},\n\theadphones: {\n\t\ta: \"Headphone\",\n\t\tb: \"1F3A7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"score\",\n\t\t\t\"gadgets\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t1\n\t\t]\n\t},\n\tavocado: {\n\t\ta: \"Avocado\",\n\t\tb: \"1F951\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t49\n\t\t],\n\t\to: 9\n\t},\n\trelaxed: {\n\t\ta: \"White Smiling Face\",\n\t\tb: \"263A-FE0F\",\n\t\tc: \"263A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"blush\",\n\t\t\t\"massage\",\n\t\t\t\"happiness\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t41\n\t\t],\n\t\to: 1\n\t},\n\tzebra_face: {\n\t\ta: \"Zebra Face\",\n\t\tb: \"1F993\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t43\n\t\t],\n\t\to: 10\n\t},\n\teggplant: {\n\t\ta: \"Aubergine\",\n\t\tb: \"1F346\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"nature\",\n\t\t\t\"food\",\n\t\t\t\"aubergine\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t8\n\t\t]\n\t},\n\tradio: {\n\t\ta: \"Radio\",\n\t\tb: \"1F4FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"communication\",\n\t\t\t\"music\",\n\t\t\t\"podcast\",\n\t\t\t\"program\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t50\n\t\t]\n\t},\n\tbuilding_construction: {\n\t\ta: \"Building Construction\",\n\t\tb: \"1F3D7-FE0F\",\n\t\tc: \"1F3D7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"wip\",\n\t\t\t\"working\",\n\t\t\t\"progress\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t40\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-as\": {\n\t\ta: \"American Samoa Flag\",\n\t\tb: \"1F1E6-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t42\n\t\t]\n\t},\n\tadmission_tickets: {\n\t\ta: \"Admission Tickets\",\n\t\tb: \"1F39F-FE0F\",\n\t\tc: \"1F39F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t8,\n\t\t\t45\n\t\t],\n\t\to: 7\n\t},\n\tno_bicycles: {\n\t\ta: \"No Bicycles\",\n\t\tb: \"1F6B3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cyclist\",\n\t\t\t\"prohibited\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t24\n\t\t]\n\t},\n\tno_smoking: {\n\t\ta: \"No Smoking Symbol\",\n\t\tb: \"1F6AD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cigarette\",\n\t\t\t\"blue-square\",\n\t\t\t\"smell\",\n\t\t\t\"smoke\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t18\n\t\t]\n\t},\n\tslightly_smiling_face: {\n\t\ta: \"Slightly Smiling Face\",\n\t\tb: \"1F642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"smile\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t38\n\t\t],\n\t\tl: [\n\t\t\t\":)\",\n\t\t\t\"(:\",\n\t\t\t\":-)\"\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-at\": {\n\t\ta: \"Austria Flag\",\n\t\tb: \"1F1E6-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t43\n\t\t]\n\t},\n\tticket: {\n\t\ta: \"Ticket\",\n\t\tb: \"1F3AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"event\",\n\t\t\t\"concert\",\n\t\t\t\"pass\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t5\n\t\t]\n\t},\n\tsaxophone: {\n\t\ta: \"Saxophone\",\n\t\tb: \"1F3B7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"instrument\",\n\t\t\t\"jazz\",\n\t\t\t\"blues\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t17\n\t\t]\n\t},\n\tdeer: {\n\t\ta: \"Deer\",\n\t\tb: \"1F98C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"horns\",\n\t\t\t\"venison\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t36\n\t\t],\n\t\to: 9\n\t},\n\thouse_buildings: {\n\t\ta: \"House Buildings\",\n\t\tb: \"1F3D8-FE0F\",\n\t\tc: \"1F3D8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t41\n\t\t],\n\t\to: 7\n\t},\n\tpotato: {\n\t\ta: \"Potato\",\n\t\tb: \"1F954\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"tuber\",\n\t\t\t\"vegatable\",\n\t\t\t\"starch\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t0\n\t\t],\n\t\to: 9\n\t},\n\tguitar: {\n\t\ta: \"Guitar\",\n\t\tb: \"1F3B8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"instrument\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t18\n\t\t]\n\t},\n\tcarrot: {\n\t\ta: \"Carrot\",\n\t\tb: \"1F955\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"food\",\n\t\t\t\"orange\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t1\n\t\t],\n\t\to: 9\n\t},\n\tcityscape: {\n\t\ta: \"Cityscape\",\n\t\tb: \"1F3D9-FE0F\",\n\t\tc: \"1F3D9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"night life\",\n\t\t\t\"urban\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t42\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-au\": {\n\t\ta: \"Australia Flag\",\n\t\tb: \"1F1E6-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t44\n\t\t]\n\t},\n\tdo_not_litter: {\n\t\ta: \"Do Not Litter Symbol\",\n\t\tb: \"1F6AF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"trash\",\n\t\t\t\"bin\",\n\t\t\t\"garbage\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t20\n\t\t]\n\t},\n\thugging_face: {\n\t\ta: \"Hugging Face\",\n\t\tb: \"1F917\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t31\n\t\t],\n\t\to: 8\n\t},\n\tcow: {\n\t\ta: \"Cow Face\",\n\t\tb: \"1F42E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beef\",\n\t\t\t\"ox\",\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"moo\",\n\t\t\t\"milk\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t24\n\t\t]\n\t},\n\tmedal: {\n\t\ta: \"Medal\",\n\t\tb: \"1F396-FE0F\",\n\t\tc: \"1F396\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t8,\n\t\t\t39\n\t\t],\n\t\to: 7\n\t},\n\tmusical_keyboard: {\n\t\ta: \"Musical Keyboard\",\n\t\tb: \"1F3B9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"piano\",\n\t\t\t\"instrument\",\n\t\t\t\"compose\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t19\n\t\t]\n\t},\n\tcorn: {\n\t\ta: \"Ear of Maize\",\n\t\tb: \"1F33D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"vegetable\",\n\t\t\t\"plant\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t51\n\t\t]\n\t},\n\tderelict_house_building: {\n\t\ta: \"Derelict House Building\",\n\t\tb: \"1F3DA-FE0F\",\n\t\tc: \"1F3DA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t43\n\t\t],\n\t\to: 7\n\t},\n\t\"non-potable_water\": {\n\t\ta: \"Non-Potable Water Symbol\",\n\t\tb: \"1F6B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"faucet\",\n\t\t\t\"tap\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t22\n\t\t]\n\t},\n\ttrophy: {\n\t\ta: \"Trophy\",\n\t\tb: \"1F3C6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"win\",\n\t\t\t\"award\",\n\t\t\t\"contest\",\n\t\t\t\"place\",\n\t\t\t\"ftw\",\n\t\t\t\"ceremony\"\n\t\t],\n\t\tk: [\n\t\t\t10,\n\t\t\t19\n\t\t]\n\t},\n\t\"flag-aw\": {\n\t\ta: \"Aruba Flag\",\n\t\tb: \"1F1E6-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t45\n\t\t]\n\t},\n\t\"star-struck\": {\n\t\ta: \"Grinning Face with Star Eyes\",\n\t\tb: \"1F929\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t49\n\t\t],\n\t\tn: [\n\t\t\t\"grinning_face_with_star_eyes\"\n\t\t],\n\t\to: 10\n\t},\n\tox: {\n\t\ta: \"Ox\",\n\t\tb: \"1F402\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cow\",\n\t\t\t\"beef\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t32\n\t\t]\n\t},\n\ttrumpet: {\n\t\ta: \"Trumpet\",\n\t\tb: \"1F3BA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"brass\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t20\n\t\t]\n\t},\n\thot_pepper: {\n\t\ta: \"Hot Pepper\",\n\t\tb: \"1F336-FE0F\",\n\t\tc: \"1F336\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"spicy\",\n\t\t\t\"chilli\",\n\t\t\t\"chili\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\tsports_medal: {\n\t\ta: \"Sports Medal\",\n\t\tb: \"1F3C5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-ax\": {\n\t\ta: \"Åland Islands Flag\",\n\t\tb: \"1F1E6-1F1FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t46\n\t\t]\n\t},\n\twater_buffalo: {\n\t\ta: \"Water Buffalo\",\n\t\tb: \"1F403\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"ox\",\n\t\t\t\"cow\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t33\n\t\t]\n\t},\n\tno_pedestrians: {\n\t\ta: \"No Pedestrians\",\n\t\tb: \"1F6B7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"rules\",\n\t\t\t\"crossing\",\n\t\t\t\"walking\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t27\n\t\t]\n\t},\n\tthinking_face: {\n\t\ta: \"Thinking Face\",\n\t\tb: \"1F914\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t28\n\t\t],\n\t\to: 8\n\t},\n\thouse: {\n\t\ta: \"House Building\",\n\t\tb: \"1F3E0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"home\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t49\n\t\t]\n\t},\n\tno_mobile_phones: {\n\t\ta: \"No Mobile Phones\",\n\t\tb: \"1F4F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"iphone\",\n\t\t\t\"mute\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t44\n\t\t]\n\t},\n\t\"flag-az\": {\n\t\ta: \"Azerbaijan Flag\",\n\t\tb: \"1F1E6-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t47\n\t\t]\n\t},\n\tfirst_place_medal: {\n\t\ta: \"First Place Medal\",\n\t\tb: \"1F947\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t42\n\t\t],\n\t\to: 9\n\t},\n\thouse_with_garden: {\n\t\ta: \"House with Garden\",\n\t\tb: \"1F3E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"home\",\n\t\t\t\"plant\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t50\n\t\t]\n\t},\n\tviolin: {\n\t\ta: \"Violin\",\n\t\tb: \"1F3BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"music\",\n\t\t\t\"instrument\",\n\t\t\t\"orchestra\",\n\t\t\t\"symphony\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t21\n\t\t]\n\t},\n\tface_with_raised_eyebrow: {\n\t\ta: \"Face with One Eyebrow Raised\",\n\t\tb: \"1F928\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t48\n\t\t],\n\t\tn: [\n\t\t\t\"face_with_one_eyebrow_raised\"\n\t\t],\n\t\to: 10\n\t},\n\tcucumber: {\n\t\ta: \"Cucumber\",\n\t\tb: \"1F952\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"fruit\",\n\t\t\t\"food\",\n\t\t\t\"pickle\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t50\n\t\t],\n\t\to: 9\n\t},\n\tcow2: {\n\t\ta: \"Cow\",\n\t\tb: \"1F404\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beef\",\n\t\t\t\"ox\",\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"moo\",\n\t\t\t\"milk\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t34\n\t\t]\n\t},\n\t\"flag-ba\": {\n\t\ta: \"Bosnia & Herzegovina Flag\",\n\t\tb: \"1F1E7-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t0,\n\t\t\t48\n\t\t]\n\t},\n\tpig: {\n\t\ta: \"Pig Face\",\n\t\tb: \"1F437\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"oink\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t33\n\t\t]\n\t},\n\tdrum_with_drumsticks: {\n\t\ta: \"Drum with Drumsticks\",\n\t\tb: \"1F941\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t37\n\t\t],\n\t\to: 9\n\t},\n\tunderage: {\n\t\ta: \"No One Under Eighteen Symbol\",\n\t\tb: \"1F51E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"18\",\n\t\t\t\"drink\",\n\t\t\t\"pub\",\n\t\t\t\"night\",\n\t\t\t\"minor\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t32\n\t\t]\n\t},\n\tbroccoli: {\n\t\ta: \"Broccoli\",\n\t\tb: \"1F966\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t18\n\t\t],\n\t\to: 10\n\t},\n\toffice: {\n\t\ta: \"Office Building\",\n\t\tb: \"1F3E2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"bureau\",\n\t\t\t\"work\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t51\n\t\t]\n\t},\n\tsecond_place_medal: {\n\t\ta: \"Second Place Medal\",\n\t\tb: \"1F948\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t43\n\t\t],\n\t\to: 9\n\t},\n\tneutral_face: {\n\t\ta: \"Neutral Face\",\n\t\tb: \"1F610\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"indifference\",\n\t\t\t\"meh\",\n\t\t\t\":|\",\n\t\t\t\"neutral\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t40\n\t\t],\n\t\tl: [\n\t\t\t\":|\",\n\t\t\t\":-|\"\n\t\t]\n\t},\n\tthird_place_medal: {\n\t\ta: \"Third Place Medal\",\n\t\tb: \"1F949\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t44\n\t\t],\n\t\to: 9\n\t},\n\tmushroom: {\n\t\ta: \"Mushroom\",\n\t\tb: \"1F344\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"vegetable\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-bb\": {\n\t\ta: \"Barbados Flag\",\n\t\tb: \"1F1E7-1F1E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t49\n\t\t]\n\t},\n\tradioactive_sign: {\n\t\ta: \"Radioactive Sign\",\n\t\tb: \"2622-FE0F\",\n\t\tc: \"2622\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t33\n\t\t],\n\t\to: 1\n\t},\n\tpig2: {\n\t\ta: \"Pig\",\n\t\tb: \"1F416\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t0\n\t\t]\n\t},\n\texpressionless: {\n\t\ta: \"Expressionless Face\",\n\t\tb: \"1F611\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"indifferent\",\n\t\t\t\"-_-\",\n\t\t\t\"meh\",\n\t\t\t\"deadpan\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t41\n\t\t]\n\t},\n\tiphone: {\n\t\ta: \"Mobile Phone\",\n\t\tb: \"1F4F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"apple\",\n\t\t\t\"gadgets\",\n\t\t\t\"dial\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t40\n\t\t]\n\t},\n\tpost_office: {\n\t\ta: \"Japanese Post Office\",\n\t\tb: \"1F3E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"envelope\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t0\n\t\t]\n\t},\n\teuropean_post_office: {\n\t\ta: \"European Post Office\",\n\t\tb: \"1F3E4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"email\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t1\n\t\t]\n\t},\n\tsoccer: {\n\t\ta: \"Soccer Ball\",\n\t\tb: \"26BD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"football\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t26\n\t\t],\n\t\to: 5\n\t},\n\tboar: {\n\t\ta: \"Boar\",\n\t\tb: \"1F417\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t1\n\t\t]\n\t},\n\tpeanuts: {\n\t\ta: \"Peanuts\",\n\t\tb: \"1F95C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"nut\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t8\n\t\t],\n\t\to: 9\n\t},\n\tcalling: {\n\t\ta: \"Mobile Phone with Rightwards Arrow at Left\",\n\t\tb: \"1F4F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"iphone\",\n\t\t\t\"incoming\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t41\n\t\t]\n\t},\n\tbiohazard_sign: {\n\t\ta: \"Biohazard Sign\",\n\t\tb: \"2623-FE0F\",\n\t\tc: \"2623\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t34\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-bd\": {\n\t\ta: \"Bangladesh Flag\",\n\t\tb: \"1F1E7-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t50\n\t\t]\n\t},\n\tno_mouth: {\n\t\ta: \"Face Without Mouth\",\n\t\tb: \"1F636\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"hellokitty\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t26\n\t\t]\n\t},\n\tface_with_rolling_eyes: {\n\t\ta: \"Face with Rolling Eyes\",\n\t\tb: \"1F644\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t31,\n\t\t\t40\n\t\t],\n\t\to: 8\n\t},\n\tphone: {\n\t\ta: \"Black Telephone\",\n\t\tb: \"260E-FE0F\",\n\t\tc: \"260E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"communication\",\n\t\t\t\"dial\",\n\t\t\t\"telephone\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t21\n\t\t],\n\t\tn: [\n\t\t\t\"telephone\"\n\t\t],\n\t\to: 1\n\t},\n\tpig_nose: {\n\t\ta: \"Pig Nose\",\n\t\tb: \"1F43D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"oink\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t39\n\t\t]\n\t},\n\tchestnut: {\n\t\ta: \"Chestnut\",\n\t\tb: \"1F330\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"squirrel\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t38\n\t\t]\n\t},\n\tarrow_up: {\n\t\ta: \"Upwards Black Arrow\",\n\t\tb: \"2B06-FE0F\",\n\t\tc: \"2B06\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"continue\",\n\t\t\t\"top\",\n\t\t\t\"direction\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t18\n\t\t],\n\t\to: 4\n\t},\n\thospital: {\n\t\ta: \"Hospital\",\n\t\tb: \"1F3E5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"health\",\n\t\t\t\"surgery\",\n\t\t\t\"doctor\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-be\": {\n\t\ta: \"Belgium Flag\",\n\t\tb: \"1F1E7-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t0,\n\t\t\t51\n\t\t]\n\t},\n\tbaseball: {\n\t\ta: \"Baseball\",\n\t\tb: \"26BE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t27\n\t\t],\n\t\to: 5\n\t},\n\tsmirk: {\n\t\ta: \"Smirking Face\",\n\t\tb: \"1F60F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"smile\",\n\t\t\t\"mean\",\n\t\t\t\"prank\",\n\t\t\t\"smug\",\n\t\t\t\"sarcasm\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t39\n\t\t]\n\t},\n\tarrow_upper_right: {\n\t\ta: \"North East Arrow\",\n\t\tb: \"2197-FE0F\",\n\t\tc: \"2197\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"point\",\n\t\t\t\"direction\",\n\t\t\t\"diagonal\",\n\t\t\t\"northeast\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t36\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-bf\": {\n\t\ta: \"Burkina Faso Flag\",\n\t\tb: \"1F1E7-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t0\n\t\t]\n\t},\n\tbasketball: {\n\t\ta: \"Basketball and Hoop\",\n\t\tb: \"1F3C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\",\n\t\t\t\"NBA\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t26\n\t\t]\n\t},\n\tram: {\n\t\ta: \"Ram\",\n\t\tb: \"1F40F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"sheep\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t45\n\t\t]\n\t},\n\tbank: {\n\t\ta: \"Bank\",\n\t\tb: \"1F3E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"cash\",\n\t\t\t\"business\",\n\t\t\t\"enterprise\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t3\n\t\t]\n\t},\n\tbread: {\n\t\ta: \"Bread\",\n\t\tb: \"1F35E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"wheat\",\n\t\t\t\"breakfast\",\n\t\t\t\"toast\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t32\n\t\t]\n\t},\n\ttelephone_receiver: {\n\t\ta: \"Telephone Receiver\",\n\t\tb: \"1F4DE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"communication\",\n\t\t\t\"dial\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t21\n\t\t]\n\t},\n\tcroissant: {\n\t\ta: \"Croissant\",\n\t\tb: \"1F950\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"bread\",\n\t\t\t\"french\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t48\n\t\t],\n\t\to: 9\n\t},\n\tpager: {\n\t\ta: \"Pager\",\n\t\tb: \"1F4DF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bbcall\",\n\t\t\t\"oldschool\",\n\t\t\t\"90s\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t22\n\t\t]\n\t},\n\tsheep: {\n\t\ta: \"Sheep\",\n\t\tb: \"1F411\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"wool\",\n\t\t\t\"shipit\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t47\n\t\t]\n\t},\n\tarrow_right: {\n\t\ta: \"Black Rightwards Arrow\",\n\t\tb: \"27A1-FE0F\",\n\t\tc: \"27A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"next\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t12\n\t\t],\n\t\to: 1\n\t},\n\tpersevere: {\n\t\ta: \"Persevering Face\",\n\t\tb: \"1F623\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sick\",\n\t\t\t\"no\",\n\t\t\t\"upset\",\n\t\t\t\"oops\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t7\n\t\t]\n\t},\n\t\"flag-bg\": {\n\t\ta: \"Bulgaria Flag\",\n\t\tb: \"1F1E7-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\tvolleyball: {\n\t\ta: \"Volleyball\",\n\t\tb: \"1F3D0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t33\n\t\t],\n\t\to: 8\n\t},\n\thotel: {\n\t\ta: \"Hotel\",\n\t\tb: \"1F3E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"accomodation\",\n\t\t\t\"checkin\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t5\n\t\t]\n\t},\n\tarrow_lower_right: {\n\t\ta: \"South East Arrow\",\n\t\tb: \"2198-FE0F\",\n\t\tc: \"2198\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"diagonal\",\n\t\t\t\"southeast\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t37\n\t\t],\n\t\to: 1\n\t},\n\tgoat: {\n\t\ta: \"Goat\",\n\t\tb: \"1F410\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t46\n\t\t]\n\t},\n\t\"flag-bh\": {\n\t\ta: \"Bahrain Flag\",\n\t\tb: \"1F1E7-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t2\n\t\t]\n\t},\n\tlove_hotel: {\n\t\ta: \"Love Hotel\",\n\t\tb: \"1F3E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"dating\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t6\n\t\t]\n\t},\n\tdisappointed_relieved: {\n\t\ta: \"Disappointed but Relieved Face\",\n\t\tb: \"1F625\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"phew\",\n\t\t\t\"sweat\",\n\t\t\t\"nervous\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t9\n\t\t]\n\t},\n\tbaguette_bread: {\n\t\ta: \"Baguette Bread\",\n\t\tb: \"1F956\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"bread\",\n\t\t\t\"french\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t2\n\t\t],\n\t\to: 9\n\t},\n\tfootball: {\n\t\ta: \"American Football\",\n\t\tb: \"1F3C8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\",\n\t\t\t\"NFL\"\n\t\t],\n\t\tk: [\n\t\t\t10,\n\t\t\t26\n\t\t]\n\t},\n\tfax: {\n\t\ta: \"Fax Machine\",\n\t\tb: \"1F4E0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"communication\",\n\t\t\t\"technology\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t23\n\t\t]\n\t},\n\tconvenience_store: {\n\t\ta: \"Convenience Store\",\n\t\tb: \"1F3EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"shopping\",\n\t\t\t\"groceries\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t7\n\t\t]\n\t},\n\tdromedary_camel: {\n\t\ta: \"Dromedary Camel\",\n\t\tb: \"1F42A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"hot\",\n\t\t\t\"desert\",\n\t\t\t\"hump\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t20\n\t\t]\n\t},\n\tarrow_down: {\n\t\ta: \"Downwards Black Arrow\",\n\t\tb: \"2B07-FE0F\",\n\t\tc: \"2B07\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t19\n\t\t],\n\t\to: 4\n\t},\n\tbattery: {\n\t\ta: \"Battery\",\n\t\tb: \"1F50B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"power\",\n\t\t\t\"energy\",\n\t\t\t\"sustain\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t13\n\t\t]\n\t},\n\trugby_football: {\n\t\ta: \"Rugby Football\",\n\t\tb: \"1F3C9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"team\"\n\t\t],\n\t\tk: [\n\t\t\t10,\n\t\t\t27\n\t\t]\n\t},\n\tpretzel: {\n\t\ta: \"Pretzel\",\n\t\tb: \"1F968\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t20\n\t\t],\n\t\to: 10\n\t},\n\topen_mouth: {\n\t\ta: \"Face with Open Mouth\",\n\t\tb: \"1F62E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"surprise\",\n\t\t\t\"impressed\",\n\t\t\t\"wow\",\n\t\t\t\"whoa\",\n\t\t\t\":O\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t18\n\t\t],\n\t\tl: [\n\t\t\t\":o\",\n\t\t\t\":-o\",\n\t\t\t\":O\",\n\t\t\t\":-O\"\n\t\t]\n\t},\n\t\"flag-bi\": {\n\t\ta: \"Burundi Flag\",\n\t\tb: \"1F1E7-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t3\n\t\t]\n\t},\n\t\"flag-bj\": {\n\t\ta: \"Benin Flag\",\n\t\tb: \"1F1E7-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t4\n\t\t]\n\t},\n\tpancakes: {\n\t\ta: \"Pancakes\",\n\t\tb: \"1F95E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"breakfast\",\n\t\t\t\"flapjacks\",\n\t\t\t\"hotcakes\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t10\n\t\t],\n\t\to: 9\n\t},\n\tschool: {\n\t\ta: \"School\",\n\t\tb: \"1F3EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"student\",\n\t\t\t\"education\",\n\t\t\t\"learn\",\n\t\t\t\"teach\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t8\n\t\t]\n\t},\n\ttennis: {\n\t\ta: \"Tennis Racquet and Ball\",\n\t\tb: \"1F3BE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"balls\",\n\t\t\t\"green\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t24\n\t\t]\n\t},\n\tzipper_mouth_face: {\n\t\ta: \"Zipper-Mouth Face\",\n\t\tb: \"1F910\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sealed\",\n\t\t\t\"zipper\",\n\t\t\t\"secret\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t24\n\t\t],\n\t\to: 8\n\t},\n\tcamel: {\n\t\ta: \"Bactrian Camel\",\n\t\tb: \"1F42B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"hot\",\n\t\t\t\"desert\",\n\t\t\t\"hump\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t21\n\t\t]\n\t},\n\tarrow_lower_left: {\n\t\ta: \"South West Arrow\",\n\t\tb: \"2199-FE0F\",\n\t\tc: \"2199\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"diagonal\",\n\t\t\t\"southwest\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t38\n\t\t],\n\t\to: 1\n\t},\n\telectric_plug: {\n\t\ta: \"Electric Plug\",\n\t\tb: \"1F50C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"charger\",\n\t\t\t\"power\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t14\n\t\t]\n\t},\n\tcheese_wedge: {\n\t\ta: \"Cheese Wedge\",\n\t\tb: \"1F9C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t48\n\t\t],\n\t\to: 8\n\t},\n\thushed: {\n\t\ta: \"Hushed Face\",\n\t\tb: \"1F62F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"woo\",\n\t\t\t\"shh\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t19\n\t\t]\n\t},\n\tcomputer: {\n\t\ta: \"Personal Computer\",\n\t\tb: \"1F4BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"laptop\",\n\t\t\t\"screen\",\n\t\t\t\"display\",\n\t\t\t\"monitor\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t38\n\t\t]\n\t},\n\tgiraffe_face: {\n\t\ta: \"Giraffe Face\",\n\t\tb: \"1F992\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t42\n\t\t],\n\t\to: 10\n\t},\n\t\"8ball\": {\n\t\ta: \"Billiards\",\n\t\tb: \"1F3B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pool\",\n\t\t\t\"hobby\",\n\t\t\t\"game\",\n\t\t\t\"luck\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t11\n\t\t]\n\t},\n\t\"flag-bl\": {\n\t\ta: \"St. Barthélemy Flag\",\n\t\tb: \"1F1E7-1F1F1\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t5\n\t\t]\n\t},\n\tarrow_left: {\n\t\ta: \"Leftwards Black Arrow\",\n\t\tb: \"2B05-FE0F\",\n\t\tc: \"2B05\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"previous\",\n\t\t\t\"back\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t17\n\t\t],\n\t\to: 4\n\t},\n\tdepartment_store: {\n\t\ta: \"Department Store\",\n\t\tb: \"1F3EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"shopping\",\n\t\t\t\"mall\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t9\n\t\t]\n\t},\n\tmeat_on_bone: {\n\t\ta: \"Meat on Bone\",\n\t\tb: \"1F356\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"good\",\n\t\t\t\"food\",\n\t\t\t\"drumstick\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t24\n\t\t]\n\t},\n\tarrow_upper_left: {\n\t\ta: \"North West Arrow\",\n\t\tb: \"2196-FE0F\",\n\t\tc: \"2196\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"point\",\n\t\t\t\"direction\",\n\t\t\t\"diagonal\",\n\t\t\t\"northwest\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t35\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-bm\": {\n\t\ta: \"Bermuda Flag\",\n\t\tb: \"1F1E7-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t6\n\t\t]\n\t},\n\tsleepy: {\n\t\ta: \"Sleepy Face\",\n\t\tb: \"1F62A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"tired\",\n\t\t\t\"rest\",\n\t\t\t\"nap\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t14\n\t\t]\n\t},\n\tbowling: {\n\t\ta: \"Bowling\",\n\t\tb: \"1F3B3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"fun\",\n\t\t\t\"play\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t13\n\t\t]\n\t},\n\tfactory: {\n\t\ta: \"Factory\",\n\t\tb: \"1F3ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"industry\",\n\t\t\t\"pollution\",\n\t\t\t\"smoke\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t10\n\t\t]\n\t},\n\tdesktop_computer: {\n\t\ta: \"Desktop Computer\",\n\t\tb: \"1F5A5-FE0F\",\n\t\tc: \"1F5A5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"computing\",\n\t\t\t\"screen\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t51\n\t\t],\n\t\to: 7\n\t},\n\telephant: {\n\t\ta: \"Elephant\",\n\t\tb: \"1F418\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"nose\",\n\t\t\t\"th\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t2\n\t\t]\n\t},\n\trhinoceros: {\n\t\ta: \"Rhinoceros\",\n\t\tb: \"1F98F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"horn\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t39\n\t\t],\n\t\to: 9\n\t},\n\tarrow_up_down: {\n\t\ta: \"Up Down Arrow\",\n\t\tb: \"2195-FE0F\",\n\t\tc: \"2195\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"way\",\n\t\t\t\"vertical\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t34\n\t\t],\n\t\to: 1\n\t},\n\tcricket_bat_and_ball: {\n\t\ta: \"Cricket Bat and Ball\",\n\t\tb: \"1F3CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t32\n\t\t],\n\t\to: 8\n\t},\n\tprinter: {\n\t\ta: \"Printer\",\n\t\tb: \"1F5A8-FE0F\",\n\t\tc: \"1F5A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"paper\",\n\t\t\t\"ink\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t0\n\t\t],\n\t\to: 7\n\t},\n\tpoultry_leg: {\n\t\ta: \"Poultry Leg\",\n\t\tb: \"1F357\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"meat\",\n\t\t\t\"drumstick\",\n\t\t\t\"bird\",\n\t\t\t\"chicken\",\n\t\t\t\"turkey\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t25\n\t\t]\n\t},\n\ttired_face: {\n\t\ta: \"Tired Face\",\n\t\tb: \"1F62B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sick\",\n\t\t\t\"whine\",\n\t\t\t\"upset\",\n\t\t\t\"frustrated\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t15\n\t\t]\n\t},\n\tjapanese_castle: {\n\t\ta: \"Japanese Castle\",\n\t\tb: \"1F3EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"building\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t12\n\t\t]\n\t},\n\t\"flag-bn\": {\n\t\ta: \"Brunei Flag\",\n\t\tb: \"1F1E7-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t1,\n\t\t\t7\n\t\t]\n\t},\n\tfield_hockey_stick_and_ball: {\n\t\ta: \"Field Hockey Stick and Ball\",\n\t\tb: \"1F3D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t34\n\t\t],\n\t\to: 8\n\t},\n\tsleeping: {\n\t\ta: \"Sleeping Face\",\n\t\tb: \"1F634\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"tired\",\n\t\t\t\"sleepy\",\n\t\t\t\"night\",\n\t\t\t\"zzz\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t24\n\t\t]\n\t},\n\tleft_right_arrow: {\n\t\ta: \"Left Right Arrow\",\n\t\tb: \"2194-FE0F\",\n\t\tc: \"2194\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"direction\",\n\t\t\t\"horizontal\",\n\t\t\t\"sideways\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t33\n\t\t],\n\t\to: 1\n\t},\n\tkeyboard: {\n\t\ta: \"Keyboard\",\n\t\tb: \"2328-FE0F\",\n\t\tc: \"2328\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"computer\",\n\t\t\t\"type\",\n\t\t\t\"input\",\n\t\t\t\"text\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t43\n\t\t],\n\t\to: 1\n\t},\n\teuropean_castle: {\n\t\ta: \"European Castle\",\n\t\tb: \"1F3F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"royalty\",\n\t\t\t\"history\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t13\n\t\t]\n\t},\n\tmouse: {\n\t\ta: \"Mouse Face\",\n\t\tb: \"1F42D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"cheese_wedge\",\n\t\t\t\"rodent\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-bo\": {\n\t\ta: \"Bolivia Flag\",\n\t\tb: \"1F1E7-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t8\n\t\t]\n\t},\n\tcut_of_meat: {\n\t\ta: \"Cut of Meat\",\n\t\tb: \"1F969\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t21\n\t\t],\n\t\to: 10\n\t},\n\tice_hockey_stick_and_puck: {\n\t\ta: \"Ice Hockey Stick and Puck\",\n\t\tb: \"1F3D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t35\n\t\t],\n\t\to: 8\n\t},\n\tmouse2: {\n\t\ta: \"Mouse\",\n\t\tb: \"1F401\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"rodent\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t31\n\t\t]\n\t},\n\tthree_button_mouse: {\n\t\ta: \"Three Button Mouse\",\n\t\tb: \"1F5B1-FE0F\",\n\t\tc: \"1F5B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t1\n\t\t],\n\t\to: 7\n\t},\n\tleftwards_arrow_with_hook: {\n\t\ta: \"Leftwards Arrow with Hook\",\n\t\tb: \"21A9-FE0F\",\n\t\tc: \"21A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"back\",\n\t\t\t\"return\",\n\t\t\t\"blue-square\",\n\t\t\t\"undo\",\n\t\t\t\"enter\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t39\n\t\t],\n\t\to: 1\n\t},\n\tbacon: {\n\t\ta: \"Bacon\",\n\t\tb: \"1F953\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"breakfast\",\n\t\t\t\"pork\",\n\t\t\t\"pig\",\n\t\t\t\"meat\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t51\n\t\t],\n\t\to: 9\n\t},\n\trelieved: {\n\t\ta: \"Relieved Face\",\n\t\tb: \"1F60C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"relaxed\",\n\t\t\t\"phew\",\n\t\t\t\"massage\",\n\t\t\t\"happiness\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-bq\": {\n\t\ta: \"Caribbean Netherlands Flag\",\n\t\tb: \"1F1E7-1F1F6\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t9\n\t\t]\n\t},\n\twedding: {\n\t\ta: \"Wedding\",\n\t\tb: \"1F492\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"couple\",\n\t\t\t\"marriage\",\n\t\t\t\"bride\",\n\t\t\t\"groom\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t44\n\t\t]\n\t},\n\ttokyo_tower: {\n\t\ta: \"Tokyo Tower\",\n\t\tb: \"1F5FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t20\n\t\t]\n\t},\n\tarrow_right_hook: {\n\t\ta: \"Rightwards Arrow with Hook\",\n\t\tb: \"21AA-FE0F\",\n\t\tc: \"21AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"return\",\n\t\t\t\"rotate\",\n\t\t\t\"direction\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t40\n\t\t],\n\t\to: 1\n\t},\n\thamburger: {\n\t\ta: \"Hamburger\",\n\t\tb: \"1F354\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"meat\",\n\t\t\t\"fast food\",\n\t\t\t\"beef\",\n\t\t\t\"cheeseburger\",\n\t\t\t\"mcdonalds\",\n\t\t\t\"burger king\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t22\n\t\t]\n\t},\n\tstuck_out_tongue: {\n\t\ta: \"Face with Stuck-out Tongue\",\n\t\tb: \"1F61B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"prank\",\n\t\t\t\"childish\",\n\t\t\t\"playful\",\n\t\t\t\"mischievous\",\n\t\t\t\"smile\",\n\t\t\t\"tongue\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t51\n\t\t],\n\t\tl: [\n\t\t\t\":p\",\n\t\t\t\":-p\",\n\t\t\t\":P\",\n\t\t\t\":-P\",\n\t\t\t\":b\",\n\t\t\t\":-b\"\n\t\t],\n\t\tm: \":p\"\n\t},\n\ttrackball: {\n\t\ta: \"Trackball\",\n\t\tb: \"1F5B2-FE0F\",\n\t\tc: \"1F5B2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"trackpad\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t2\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-br\": {\n\t\ta: \"Brazil Flag\",\n\t\tb: \"1F1E7-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t10\n\t\t]\n\t},\n\trat: {\n\t\ta: \"Rat\",\n\t\tb: \"1F400\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"mouse\",\n\t\t\t\"rodent\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t30\n\t\t]\n\t},\n\ttable_tennis_paddle_and_ball: {\n\t\ta: \"Table Tennis Paddle and Ball\",\n\t\tb: \"1F3D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t36\n\t\t],\n\t\to: 8\n\t},\n\tminidisc: {\n\t\ta: \"Minidisc\",\n\t\tb: \"1F4BD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"record\",\n\t\t\t\"data\",\n\t\t\t\"disk\",\n\t\t\t\"90s\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t40\n\t\t]\n\t},\n\tstuck_out_tongue_winking_eye: {\n\t\ta: \"Face with Stuck-out Tongue and Winking Eye\",\n\t\tb: \"1F61C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"prank\",\n\t\t\t\"childish\",\n\t\t\t\"playful\",\n\t\t\t\"mischievous\",\n\t\t\t\"smile\",\n\t\t\t\"wink\",\n\t\t\t\"tongue\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t0\n\t\t],\n\t\tl: [\n\t\t\t\";p\",\n\t\t\t\";-p\",\n\t\t\t\";b\",\n\t\t\t\";-b\",\n\t\t\t\";P\",\n\t\t\t\";-P\"\n\t\t],\n\t\tm: \";p\"\n\t},\n\tfries: {\n\t\ta: \"French Fries\",\n\t\tb: \"1F35F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chips\",\n\t\t\t\"snack\",\n\t\t\t\"fast food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t33\n\t\t]\n\t},\n\tbadminton_racquet_and_shuttlecock: {\n\t\ta: \"Badminton Racquet and Shuttlecock\",\n\t\tb: \"1F3F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t22\n\t\t],\n\t\to: 8\n\t},\n\tstatue_of_liberty: {\n\t\ta: \"Statue of Liberty\",\n\t\tb: \"1F5FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"american\",\n\t\t\t\"newyork\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t21\n\t\t]\n\t},\n\t\"flag-bs\": {\n\t\ta: \"Bahamas Flag\",\n\t\tb: \"1F1E7-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t11\n\t\t]\n\t},\n\tarrow_heading_up: {\n\t\ta: \"Arrow Pointing Rightwards Then Curving Upwards\",\n\t\tb: \"2934-FE0F\",\n\t\tc: \"2934\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"top\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t15\n\t\t],\n\t\to: 3\n\t},\n\thamster: {\n\t\ta: \"Hamster Face\",\n\t\tb: \"1F439\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t35\n\t\t]\n\t},\n\tstuck_out_tongue_closed_eyes: {\n\t\ta: \"Face with Stuck-out Tongue and Tightly-Closed Eyes\",\n\t\tb: \"1F61D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"prank\",\n\t\t\t\"playful\",\n\t\t\t\"mischievous\",\n\t\t\t\"smile\",\n\t\t\t\"tongue\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t1\n\t\t]\n\t},\n\tpizza: {\n\t\ta: \"Slice of Pizza\",\n\t\tb: \"1F355\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"party\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t23\n\t\t]\n\t},\n\tboxing_glove: {\n\t\ta: \"Boxing Glove\",\n\t\tb: \"1F94A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"fighting\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t45\n\t\t],\n\t\to: 9\n\t},\n\tfloppy_disk: {\n\t\ta: \"Floppy Disk\",\n\t\tb: \"1F4BE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"oldschool\",\n\t\t\t\"technology\",\n\t\t\t\"save\",\n\t\t\t\"90s\",\n\t\t\t\"80s\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t41\n\t\t]\n\t},\n\tarrow_heading_down: {\n\t\ta: \"Arrow Pointing Rightwards Then Curving Downwards\",\n\t\tb: \"2935-FE0F\",\n\t\tc: \"2935\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t16\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-bt\": {\n\t\ta: \"Bhutan Flag\",\n\t\tb: \"1F1E7-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t12\n\t\t]\n\t},\n\trabbit: {\n\t\ta: \"Rabbit Face\",\n\t\tb: \"1F430\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"pet\",\n\t\t\t\"spring\",\n\t\t\t\"magic\",\n\t\t\t\"bunny\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t26\n\t\t]\n\t},\n\tchurch: {\n\t\ta: \"Church\",\n\t\tb: \"26EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"building\",\n\t\t\t\"religion\",\n\t\t\t\"christ\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t37\n\t\t],\n\t\to: 5\n\t},\n\tdrooling_face: {\n\t\ta: \"Drooling Face\",\n\t\tb: \"1F924\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t27\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-bv\": {\n\t\ta: \"Bouvet Island Flag\",\n\t\tb: \"1F1E7-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t13\n\t\t]\n\t},\n\tmosque: {\n\t\ta: \"Mosque\",\n\t\tb: \"1F54C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"islam\",\n\t\t\t\"worship\",\n\t\t\t\"minaret\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t15\n\t\t],\n\t\to: 8\n\t},\n\trabbit2: {\n\t\ta: \"Rabbit\",\n\t\tb: \"1F407\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"pet\",\n\t\t\t\"magic\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t37\n\t\t]\n\t},\n\thotdog: {\n\t\ta: \"Hot Dog\",\n\t\tb: \"1F32D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"frankfurter\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t35\n\t\t],\n\t\to: 8\n\t},\n\tmartial_arts_uniform: {\n\t\ta: \"Martial Arts Uniform\",\n\t\tb: \"1F94B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"judo\",\n\t\t\t\"karate\",\n\t\t\t\"taekwondo\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t46\n\t\t],\n\t\to: 9\n\t},\n\tarrows_clockwise: {\n\t\ta: \"Clockwise Downwards and Upwards Open Circle Arrows\",\n\t\tb: \"1F503\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sync\",\n\t\t\t\"cycle\",\n\t\t\t\"round\",\n\t\t\t\"repeat\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t5\n\t\t]\n\t},\n\tcd: {\n\t\ta: \"Optical Disc\",\n\t\tb: \"1F4BF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"dvd\",\n\t\t\t\"disk\",\n\t\t\t\"disc\",\n\t\t\t\"90s\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t42\n\t\t]\n\t},\n\tarrows_counterclockwise: {\n\t\ta: \"Anticlockwise Downwards and Upwards Open Circle Arrows\",\n\t\tb: \"1F504\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"sync\",\n\t\t\t\"cycle\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t6\n\t\t]\n\t},\n\tsandwich: {\n\t\ta: \"Sandwich\",\n\t\tb: \"1F96A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t22\n\t\t],\n\t\to: 10\n\t},\n\tchipmunk: {\n\t\ta: \"Chipmunk\",\n\t\tb: \"1F43F-FE0F\",\n\t\tc: \"1F43F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"rodent\",\n\t\t\t\"squirrel\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t41\n\t\t],\n\t\to: 7\n\t},\n\tsynagogue: {\n\t\ta: \"Synagogue\",\n\t\tb: \"1F54D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"judaism\",\n\t\t\t\"worship\",\n\t\t\t\"temple\",\n\t\t\t\"jewish\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t16\n\t\t],\n\t\to: 8\n\t},\n\tunamused: {\n\t\ta: \"Unamused Face\",\n\t\tb: \"1F612\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"indifference\",\n\t\t\t\"bored\",\n\t\t\t\"straight face\",\n\t\t\t\"serious\",\n\t\t\t\"sarcasm\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t42\n\t\t],\n\t\tm: \":(\"\n\t},\n\tgoal_net: {\n\t\ta: \"Goal Net\",\n\t\tb: \"1F945\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t41\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-bw\": {\n\t\ta: \"Botswana Flag\",\n\t\tb: \"1F1E7-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t14\n\t\t]\n\t},\n\tdvd: {\n\t\ta: \"Dvd\",\n\t\tb: \"1F4C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cd\",\n\t\t\t\"disk\",\n\t\t\t\"disc\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t43\n\t\t]\n\t},\n\thedgehog: {\n\t\ta: \"Hedgehog\",\n\t\tb: \"1F994\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t44\n\t\t],\n\t\to: 10\n\t},\n\tdart: {\n\t\ta: \"Direct Hit\",\n\t\tb: \"1F3AF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"play\",\n\t\t\t\"bar\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t9\n\t\t]\n\t},\n\ttaco: {\n\t\ta: \"Taco\",\n\t\tb: \"1F32E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"mexican\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t36\n\t\t],\n\t\to: 8\n\t},\n\tback: {\n\t\ta: \"Back with Leftwards Arrow Above\",\n\t\tb: \"1F519\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arrow\",\n\t\t\t\"words\",\n\t\t\t\"return\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t27\n\t\t]\n\t},\n\t\"flag-by\": {\n\t\ta: \"Belarus Flag\",\n\t\tb: \"1F1E7-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t15\n\t\t]\n\t},\n\tshinto_shrine: {\n\t\ta: \"Shinto Shrine\",\n\t\tb: \"26E9-FE0F\",\n\t\tc: \"26E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"temple\",\n\t\t\t\"japan\",\n\t\t\t\"kyoto\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t36\n\t\t],\n\t\to: 5\n\t},\n\tmovie_camera: {\n\t\ta: \"Movie Camera\",\n\t\tb: \"1F3A5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"film\",\n\t\t\t\"record\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t51\n\t\t]\n\t},\n\tsweat: {\n\t\ta: \"Face with Cold Sweat\",\n\t\tb: \"1F613\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"hot\",\n\t\t\t\"sad\",\n\t\t\t\"tired\",\n\t\t\t\"exercise\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t43\n\t\t]\n\t},\n\tburrito: {\n\t\ta: \"Burrito\",\n\t\tb: \"1F32F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"mexican\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t37\n\t\t],\n\t\to: 8\n\t},\n\t\"flag-bz\": {\n\t\ta: \"Belize Flag\",\n\t\tb: \"1F1E7-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t16\n\t\t]\n\t},\n\tpensive: {\n\t\ta: \"Pensive Face\",\n\t\tb: \"1F614\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sad\",\n\t\t\t\"depressed\",\n\t\t\t\"upset\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t44\n\t\t]\n\t},\n\tkaaba: {\n\t\ta: \"Kaaba\",\n\t\tb: \"1F54B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"mecca\",\n\t\t\t\"mosque\",\n\t\t\t\"islam\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t14\n\t\t],\n\t\to: 8\n\t},\n\tfilm_frames: {\n\t\ta: \"Film Frames\",\n\t\tb: \"1F39E-FE0F\",\n\t\tc: \"1F39E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t8,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\tbat: {\n\t\ta: \"Bat\",\n\t\tb: \"1F987\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"blind\",\n\t\t\t\"vampire\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t31\n\t\t],\n\t\to: 9\n\t},\n\tgolf: {\n\t\ta: \"Flag in Hole\",\n\t\tb: \"26F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"business\",\n\t\t\t\"flag\",\n\t\t\t\"hole\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t41\n\t\t],\n\t\to: 5\n\t},\n\tend: {\n\t\ta: \"End with Leftwards Arrow Above\",\n\t\tb: \"1F51A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"arrow\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t28\n\t\t]\n\t},\n\tfilm_projector: {\n\t\ta: \"Film Projector\",\n\t\tb: \"1F4FD-FE0F\",\n\t\tc: \"1F4FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"video\",\n\t\t\t\"tape\",\n\t\t\t\"record\",\n\t\t\t\"movie\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t0\n\t\t],\n\t\to: 7\n\t},\n\tbear: {\n\t\ta: \"Bear Face\",\n\t\tb: \"1F43B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"wild\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t37\n\t\t]\n\t},\n\tice_skate: {\n\t\ta: \"Ice Skate\",\n\t\tb: \"26F8-FE0F\",\n\t\tc: \"26F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t45\n\t\t],\n\t\to: 5\n\t},\n\tfountain: {\n\t\ta: \"Fountain\",\n\t\tb: \"26F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"summer\",\n\t\t\t\"water\",\n\t\t\t\"fresh\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t40\n\t\t],\n\t\to: 5\n\t},\n\tconfused: {\n\t\ta: \"Confused Face\",\n\t\tb: \"1F615\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"indifference\",\n\t\t\t\"huh\",\n\t\t\t\"weird\",\n\t\t\t\"hmmm\",\n\t\t\t\":/\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t45\n\t\t],\n\t\tl: [\n\t\t\t\":\\\\\",\n\t\t\t\":-\\\\\",\n\t\t\t\":/\",\n\t\t\t\":-/\"\n\t\t]\n\t},\n\t\"flag-ca\": {\n\t\ta: \"Canada Flag\",\n\t\tb: \"1F1E8-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t17\n\t\t]\n\t},\n\ton: {\n\t\ta: \"On with Exclamation Mark with Left Right Arrow Above\",\n\t\tb: \"1F51B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arrow\",\n\t\t\t\"words\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t29\n\t\t]\n\t},\n\tstuffed_flatbread: {\n\t\ta: \"Stuffed Flatbread\",\n\t\tb: \"1F959\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"flatbread\",\n\t\t\t\"stuffed\",\n\t\t\t\"gyro\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t5\n\t\t],\n\t\to: 9\n\t},\n\tsoon: {\n\t\ta: \"Soon with Rightwards Arrow Above\",\n\t\tb: \"1F51C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arrow\",\n\t\t\t\"words\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t30\n\t\t]\n\t},\n\tupside_down_face: {\n\t\ta: \"Upside-Down Face\",\n\t\tb: \"1F643\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"flipped\",\n\t\t\t\"silly\",\n\t\t\t\"smile\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t39\n\t\t],\n\t\to: 8\n\t},\n\tfishing_pole_and_fish: {\n\t\ta: \"Fishing Pole and Fish\",\n\t\tb: \"1F3A3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"hobby\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t49\n\t\t]\n\t},\n\ttent: {\n\t\ta: \"Tent\",\n\t\tb: \"26FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"camping\",\n\t\t\t\"outdoors\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t12\n\t\t],\n\t\to: 5\n\t},\n\tclapper: {\n\t\ta: \"Clapper Board\",\n\t\tb: \"1F3AC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"movie\",\n\t\t\t\"film\",\n\t\t\t\"record\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t6\n\t\t]\n\t},\n\tegg: {\n\t\ta: \"Egg\",\n\t\tb: \"1F95A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"chicken\",\n\t\t\t\"breakfast\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t6\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-cc\": {\n\t\ta: \"Cocos (keeling) Islands Flag\",\n\t\tb: \"1F1E8-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t18\n\t\t]\n\t},\n\tkoala: {\n\t\ta: \"Koala\",\n\t\tb: \"1F428\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t18\n\t\t]\n\t},\n\tfoggy: {\n\t\ta: \"Foggy\",\n\t\tb: \"1F301\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"mountain\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t45\n\t\t]\n\t},\n\ttv: {\n\t\ta: \"Television\",\n\t\tb: \"1F4FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"technology\",\n\t\t\t\"program\",\n\t\t\t\"oldschool\",\n\t\t\t\"show\",\n\t\t\t\"television\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t49\n\t\t]\n\t},\n\tpanda_face: {\n\t\ta: \"Panda Face\",\n\t\tb: \"1F43C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"panda\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t38\n\t\t]\n\t},\n\tfried_egg: {\n\t\ta: \"Cooking\",\n\t\tb: \"1F373\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"breakfast\",\n\t\t\t\"kitchen\",\n\t\t\t\"egg\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t1\n\t\t],\n\t\tn: [\n\t\t\t\"cooking\"\n\t\t]\n\t},\n\ttop: {\n\t\ta: \"Top with Upwards Arrow Above\",\n\t\tb: \"1F51D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t31\n\t\t]\n\t},\n\t\"flag-cd\": {\n\t\ta: \"Congo - Kinshasa Flag\",\n\t\tb: \"1F1E8-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t19\n\t\t]\n\t},\n\tmoney_mouth_face: {\n\t\ta: \"Money-Mouth Face\",\n\t\tb: \"1F911\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"rich\",\n\t\t\t\"dollar\",\n\t\t\t\"money\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t25\n\t\t],\n\t\to: 8\n\t},\n\trunning_shirt_with_sash: {\n\t\ta: \"Running Shirt with Sash\",\n\t\tb: \"1F3BD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"play\",\n\t\t\t\"pageant\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t23\n\t\t]\n\t},\n\tastonished: {\n\t\ta: \"Astonished Face\",\n\t\tb: \"1F632\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"xox\",\n\t\t\t\"surprised\",\n\t\t\t\"poisoned\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t22\n\t\t]\n\t},\n\tfeet: {\n\t\ta: \"Paw Prints\",\n\t\tb: \"1F43E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t13,\n\t\t\t40\n\t\t],\n\t\tn: [\n\t\t\t\"paw_prints\"\n\t\t]\n\t},\n\tcamera: {\n\t\ta: \"Camera\",\n\t\tb: \"1F4F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"gadgets\",\n\t\t\t\"photography\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t46\n\t\t]\n\t},\n\t\"flag-cf\": {\n\t\ta: \"Central African Republic Flag\",\n\t\tb: \"1F1E8-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t20\n\t\t]\n\t},\n\tplace_of_worship: {\n\t\ta: \"Place of Worship\",\n\t\tb: \"1F6D0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"religion\",\n\t\t\t\"church\",\n\t\t\t\"temple\",\n\t\t\t\"prayer\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t5\n\t\t],\n\t\to: 8\n\t},\n\tnight_with_stars: {\n\t\ta: \"Night with Stars\",\n\t\tb: \"1F303\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"evening\",\n\t\t\t\"city\",\n\t\t\t\"downtown\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t47\n\t\t]\n\t},\n\tski: {\n\t\ta: \"Ski and Ski Boot\",\n\t\tb: \"1F3BF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"winter\",\n\t\t\t\"cold\",\n\t\t\t\"snow\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t25\n\t\t]\n\t},\n\tshallow_pan_of_food: {\n\t\ta: \"Shallow Pan of Food\",\n\t\tb: \"1F958\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"cooking\",\n\t\t\t\"casserole\",\n\t\t\t\"paella\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t4\n\t\t],\n\t\to: 9\n\t},\n\tcamera_with_flash: {\n\t\ta: \"Camera with Flash\",\n\t\tb: \"1F4F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t26,\n\t\t\t47\n\t\t],\n\t\to: 7\n\t},\n\tsunrise_over_mountains: {\n\t\ta: \"Sunrise over Mountains\",\n\t\tb: \"1F304\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"view\",\n\t\t\t\"vacation\",\n\t\t\t\"photo\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t48\n\t\t]\n\t},\n\tturkey: {\n\t\ta: \"Turkey\",\n\t\tb: \"1F983\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t27\n\t\t],\n\t\to: 8\n\t},\n\twhite_frowning_face: {\n\t\ta: \"White Frowning Face\",\n\t\tb: \"2639-FE0F\",\n\t\tc: \"2639\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t40\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-cg\": {\n\t\ta: \"Congo - Brazzaville Flag\",\n\t\tb: \"1F1E8-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t21\n\t\t]\n\t},\n\tstew: {\n\t\ta: \"Pot of Food\",\n\t\tb: \"1F372\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"meat\",\n\t\t\t\"soup\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t0\n\t\t]\n\t},\n\tsled: {\n\t\ta: \"Sled\",\n\t\tb: \"1F6F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t22\n\t\t],\n\t\to: 10\n\t},\n\tatom_symbol: {\n\t\ta: \"Atom Symbol\",\n\t\tb: \"269B-FE0F\",\n\t\tc: \"269B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"science\",\n\t\t\t\"physics\",\n\t\t\t\"chemistry\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t18\n\t\t],\n\t\to: 4\n\t},\n\tcurling_stone: {\n\t\ta: \"Curling Stone\",\n\t\tb: \"1F94C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t47\n\t\t],\n\t\to: 10\n\t},\n\tslightly_frowning_face: {\n\t\ta: \"Slightly Frowning Face\",\n\t\tb: \"1F641\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"frowning\",\n\t\t\t\"disappointed\",\n\t\t\t\"sad\",\n\t\t\t\"upset\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t37\n\t\t],\n\t\to: 7\n\t},\n\tsunrise: {\n\t\ta: \"Sunrise\",\n\t\tb: \"1F305\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"morning\",\n\t\t\t\"view\",\n\t\t\t\"vacation\",\n\t\t\t\"photo\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t49\n\t\t]\n\t},\n\tom_symbol: {\n\t\ta: \"Om Symbol\",\n\t\tb: \"1F549-FE0F\",\n\t\tc: \"1F549\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t12\n\t\t],\n\t\to: 7\n\t},\n\tchicken: {\n\t\ta: \"Chicken\",\n\t\tb: \"1F414\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cluck\",\n\t\t\t\"nature\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t50\n\t\t]\n\t},\n\tbowl_with_spoon: {\n\t\ta: \"Bowl with Spoon\",\n\t\tb: \"1F963\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t15\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-ch\": {\n\t\ta: \"Switzerland Flag\",\n\t\tb: \"1F1E8-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t22\n\t\t]\n\t},\n\tvideo_camera: {\n\t\ta: \"Video Camera\",\n\t\tb: \"1F4F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"film\",\n\t\t\t\"record\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t48\n\t\t]\n\t},\n\tvideo_game: {\n\t\ta: \"Video Game\",\n\t\tb: \"1F3AE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"play\",\n\t\t\t\"console\",\n\t\t\t\"PS4\",\n\t\t\t\"controller\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t8\n\t\t]\n\t},\n\trooster: {\n\t\ta: \"Rooster\",\n\t\tb: \"1F413\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"chicken\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t49\n\t\t]\n\t},\n\tvhs: {\n\t\ta: \"Videocassette\",\n\t\tb: \"1F4FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"record\",\n\t\t\t\"video\",\n\t\t\t\"oldschool\",\n\t\t\t\"90s\",\n\t\t\t\"80s\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t51\n\t\t]\n\t},\n\tcity_sunset: {\n\t\ta: \"Cityscape at Dusk\",\n\t\tb: \"1F306\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"evening\",\n\t\t\t\"sky\",\n\t\t\t\"buildings\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t50\n\t\t]\n\t},\n\tconfounded: {\n\t\ta: \"Confounded Face\",\n\t\tb: \"1F616\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"confused\",\n\t\t\t\"sick\",\n\t\t\t\"unwell\",\n\t\t\t\"oops\",\n\t\t\t\":S\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t46\n\t\t]\n\t},\n\tgreen_salad: {\n\t\ta: \"Green Salad\",\n\t\tb: \"1F957\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"healthy\",\n\t\t\t\"lettuce\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t3\n\t\t],\n\t\to: 9\n\t},\n\tstar_of_david: {\n\t\ta: \"Star of David\",\n\t\tb: \"2721-FE0F\",\n\t\tc: \"2721\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"judaism\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t47\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-ci\": {\n\t\ta: \"Côte D’ivoire Flag\",\n\t\tb: \"1F1E8-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t23\n\t\t]\n\t},\n\tpopcorn: {\n\t\ta: \"Popcorn\",\n\t\tb: \"1F37F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"movie theater\",\n\t\t\t\"films\",\n\t\t\t\"snack\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t13\n\t\t],\n\t\to: 8\n\t},\n\tcity_sunrise: {\n\t\ta: \"Sunset over Buildings\",\n\t\tb: \"1F307\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"good morning\",\n\t\t\t\"dawn\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t51\n\t\t]\n\t},\n\tdisappointed: {\n\t\ta: \"Disappointed Face\",\n\t\tb: \"1F61E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sad\",\n\t\t\t\"upset\",\n\t\t\t\"depressed\",\n\t\t\t\":(\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t2\n\t\t],\n\t\tl: [\n\t\t\t\"):\",\n\t\t\t\":(\",\n\t\t\t\":-(\"\n\t\t],\n\t\tm: \":(\"\n\t},\n\tmag: {\n\t\ta: \"Left-Pointing Magnifying Glass\",\n\t\tb: \"1F50D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"search\",\n\t\t\t\"zoom\",\n\t\t\t\"find\",\n\t\t\t\"detective\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t15\n\t\t]\n\t},\n\thatching_chick: {\n\t\ta: \"Hatching Chick\",\n\t\tb: \"1F423\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"chicken\",\n\t\t\t\"egg\",\n\t\t\t\"born\",\n\t\t\t\"baby\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t13\n\t\t]\n\t},\n\tjoystick: {\n\t\ta: \"Joystick\",\n\t\tb: \"1F579-FE0F\",\n\t\tc: \"1F579\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"play\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t20\n\t\t],\n\t\to: 7\n\t},\n\twheel_of_dharma: {\n\t\ta: \"Wheel of Dharma\",\n\t\tb: \"2638-FE0F\",\n\t\tc: \"2638\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"hinduism\",\n\t\t\t\"buddhism\",\n\t\t\t\"sikhism\",\n\t\t\t\"jainism\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t39\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-ck\": {\n\t\ta: \"Cook Islands Flag\",\n\t\tb: \"1F1E8-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t24\n\t\t]\n\t},\n\tcanned_food: {\n\t\ta: \"Canned Food\",\n\t\tb: \"1F96B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t23\n\t\t],\n\t\to: 10\n\t},\n\tworried: {\n\t\ta: \"Worried Face\",\n\t\tb: \"1F61F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"concern\",\n\t\t\t\"nervous\",\n\t\t\t\":(\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t3\n\t\t]\n\t},\n\tbaby_chick: {\n\t\ta: \"Baby Chick\",\n\t\tb: \"1F424\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"chicken\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t14\n\t\t]\n\t},\n\t\"flag-cl\": {\n\t\ta: \"Chile Flag\",\n\t\tb: \"1F1E8-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t25\n\t\t]\n\t},\n\tgame_die: {\n\t\ta: \"Game Die\",\n\t\tb: \"1F3B2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dice\",\n\t\t\t\"random\",\n\t\t\t\"tabletop\",\n\t\t\t\"play\",\n\t\t\t\"luck\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t12\n\t\t]\n\t},\n\tmag_right: {\n\t\ta: \"Right-Pointing Magnifying Glass\",\n\t\tb: \"1F50E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"search\",\n\t\t\t\"zoom\",\n\t\t\t\"find\",\n\t\t\t\"detective\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t16\n\t\t]\n\t},\n\tyin_yang: {\n\t\ta: \"Yin Yang\",\n\t\tb: \"262F-FE0F\",\n\t\tc: \"262F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"balance\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t38\n\t\t],\n\t\to: 1\n\t},\n\tbridge_at_night: {\n\t\ta: \"Bridge at Night\",\n\t\tb: \"1F309\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"sanfrancisco\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t1\n\t\t]\n\t},\n\tspades: {\n\t\ta: \"Black Spade Suit\",\n\t\tb: \"2660-FE0F\",\n\t\tc: \"2660\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"suits\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t4\n\t\t],\n\t\to: 1\n\t},\n\thatched_chick: {\n\t\ta: \"Front-Facing Baby Chick\",\n\t\tb: \"1F425\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"chicken\",\n\t\t\t\"baby\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t15\n\t\t]\n\t},\n\t\"flag-cm\": {\n\t\ta: \"Cameroon Flag\",\n\t\tb: \"1F1E8-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t26\n\t\t]\n\t},\n\tlatin_cross: {\n\t\ta: \"Latin Cross\",\n\t\tb: \"271D-FE0F\",\n\t\tc: \"271D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"christianity\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t46\n\t\t],\n\t\to: 1\n\t},\n\ttriumph: {\n\t\ta: \"Face with Look of Triumph\",\n\t\tb: \"1F624\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"gas\",\n\t\t\t\"phew\",\n\t\t\t\"proud\",\n\t\t\t\"pride\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t8\n\t\t]\n\t},\n\thotsprings: {\n\t\ta: \"Hot Springs\",\n\t\tb: \"2668-FE0F\",\n\t\tc: \"2668\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bath\",\n\t\t\t\"warm\",\n\t\t\t\"relax\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t8\n\t\t],\n\t\to: 1\n\t},\n\tbento: {\n\t\ta: \"Bento Box\",\n\t\tb: \"1F371\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\",\n\t\t\t\"box\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t51\n\t\t]\n\t},\n\tmicroscope: {\n\t\ta: \"Microscope\",\n\t\tb: \"1F52C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"laboratory\",\n\t\t\t\"experiment\",\n\t\t\t\"zoomin\",\n\t\t\t\"science\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t46\n\t\t]\n\t},\n\tcry: {\n\t\ta: \"Crying Face\",\n\t\tb: \"1F622\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"tears\",\n\t\t\t\"sad\",\n\t\t\t\"depressed\",\n\t\t\t\"upset\",\n\t\t\t\":'(\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t6\n\t\t],\n\t\tl: [\n\t\t\t\":'(\"\n\t\t],\n\t\tm: \":'(\"\n\t},\n\tbird: {\n\t\ta: \"Bird\",\n\t\tb: \"1F426\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"fly\",\n\t\t\t\"tweet\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t16\n\t\t]\n\t},\n\tcn: {\n\t\ta: \"China Flag\",\n\t\tb: \"1F1E8-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"china\",\n\t\t\t\"chinese\",\n\t\t\t\"prc\",\n\t\t\t\"flag\",\n\t\t\t\"country\",\n\t\t\t\"nation\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t1,\n\t\t\t27\n\t\t],\n\t\tn: [\n\t\t\t\"flag-cn\"\n\t\t]\n\t},\n\ttelescope: {\n\t\ta: \"Telescope\",\n\t\tb: \"1F52D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stars\",\n\t\t\t\"space\",\n\t\t\t\"zoom\",\n\t\t\t\"science\",\n\t\t\t\"astronomy\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t47\n\t\t]\n\t},\n\trice_cracker: {\n\t\ta: \"Rice Cracker\",\n\t\tb: \"1F358\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t26\n\t\t]\n\t},\n\thearts: {\n\t\ta: \"Black Heart Suit\",\n\t\tb: \"2665-FE0F\",\n\t\tc: \"2665\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"magic\",\n\t\t\t\"suits\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t6\n\t\t],\n\t\to: 1\n\t},\n\torthodox_cross: {\n\t\ta: \"Orthodox Cross\",\n\t\tb: \"2626-FE0F\",\n\t\tc: \"2626\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"suppedaneum\",\n\t\t\t\"religion\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t35\n\t\t],\n\t\to: 1\n\t},\n\tmilky_way: {\n\t\ta: \"Milky Way\",\n\t\tb: \"1F30C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"space\",\n\t\t\t\"stars\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t4\n\t\t]\n\t},\n\trice_ball: {\n\t\ta: \"Rice Ball\",\n\t\tb: \"1F359\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t27\n\t\t]\n\t},\n\tsatellite_antenna: {\n\t\ta: \"Satellite Antenna\",\n\t\tb: \"1F4E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t26,\n\t\t\t24\n\t\t]\n\t},\n\t\"flag-co\": {\n\t\ta: \"Colombia Flag\",\n\t\tb: \"1F1E8-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t28\n\t\t]\n\t},\n\tcarousel_horse: {\n\t\ta: \"Carousel Horse\",\n\t\tb: \"1F3A0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"carnival\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t46\n\t\t]\n\t},\n\tsob: {\n\t\ta: \"Loudly Crying Face\",\n\t\tb: \"1F62D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"cry\",\n\t\t\t\"tears\",\n\t\t\t\"sad\",\n\t\t\t\"upset\",\n\t\t\t\"depressed\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t17\n\t\t],\n\t\tm: \":'(\"\n\t},\n\tdiamonds: {\n\t\ta: \"Black Diamond Suit\",\n\t\tb: \"2666-FE0F\",\n\t\tc: \"2666\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"magic\",\n\t\t\t\"suits\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t7\n\t\t],\n\t\to: 1\n\t},\n\tstar_and_crescent: {\n\t\ta: \"Star and Crescent\",\n\t\tb: \"262A-FE0F\",\n\t\tc: \"262A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"islam\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t36\n\t\t],\n\t\to: 1\n\t},\n\tpenguin: {\n\t\ta: \"Penguin\",\n\t\tb: \"1F427\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t17\n\t\t]\n\t},\n\tdove_of_peace: {\n\t\ta: \"Dove of Peace\",\n\t\tb: \"1F54A-FE0F\",\n\t\tc: \"1F54A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t13\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-cp\": {\n\t\ta: \"Clipperton Island Flag\",\n\t\tb: \"1F1E8-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t1,\n\t\t\t29\n\t\t]\n\t},\n\tferris_wheel: {\n\t\ta: \"Ferris Wheel\",\n\t\tb: \"1F3A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"photo\",\n\t\t\t\"carnival\",\n\t\t\t\"londoneye\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t47\n\t\t]\n\t},\n\tclubs: {\n\t\ta: \"Black Club Suit\",\n\t\tb: \"2663-FE0F\",\n\t\tc: \"2663\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"magic\",\n\t\t\t\"suits\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t5\n\t\t],\n\t\to: 1\n\t},\n\tpeace_symbol: {\n\t\ta: \"Peace Symbol\",\n\t\tb: \"262E-FE0F\",\n\t\tc: \"262E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"hippie\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t37\n\t\t],\n\t\to: 1\n\t},\n\tcandle: {\n\t\ta: \"Candle\",\n\t\tb: \"1F56F-FE0F\",\n\t\tc: \"1F56F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"fire\",\n\t\t\t\"wax\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t42\n\t\t],\n\t\to: 7\n\t},\n\tfrowning: {\n\t\ta: \"Frowning Face with Open Mouth\",\n\t\tb: \"1F626\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"aw\",\n\t\t\t\"what\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t10\n\t\t]\n\t},\n\trice: {\n\t\ta: \"Cooked Rice\",\n\t\tb: \"1F35A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"china\",\n\t\t\t\"asian\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-cr\": {\n\t\ta: \"Costa Rica Flag\",\n\t\tb: \"1F1E8-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t30\n\t\t]\n\t},\n\troller_coaster: {\n\t\ta: \"Roller Coaster\",\n\t\tb: \"1F3A2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"carnival\",\n\t\t\t\"playground\",\n\t\t\t\"photo\",\n\t\t\t\"fun\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t48\n\t\t]\n\t},\n\tmenorah_with_nine_branches: {\n\t\ta: \"Menorah with Nine Branches\",\n\t\tb: \"1F54E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t17\n\t\t],\n\t\to: 8\n\t},\n\tblack_joker: {\n\t\ta: \"Playing Card Black Joker\",\n\t\tb: \"1F0CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"poker\",\n\t\t\t\"cards\",\n\t\t\t\"game\",\n\t\t\t\"play\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t15\n\t\t]\n\t},\n\teagle: {\n\t\ta: \"Eagle\",\n\t\tb: \"1F985\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"bird\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t29\n\t\t],\n\t\to: 9\n\t},\n\tcurry: {\n\t\ta: \"Curry and Rice\",\n\t\tb: \"1F35B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"spicy\",\n\t\t\t\"hot\",\n\t\t\t\"indian\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t29\n\t\t]\n\t},\n\tbulb: {\n\t\ta: \"Electric Light Bulb\",\n\t\tb: \"1F4A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"light\",\n\t\t\t\"electricity\",\n\t\t\t\"idea\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t7\n\t\t]\n\t},\n\tanguished: {\n\t\ta: \"Anguished Face\",\n\t\tb: \"1F627\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"stunned\",\n\t\t\t\"nervous\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t11\n\t\t],\n\t\tl: [\n\t\t\t\"D:\"\n\t\t]\n\t},\n\t\"flag-cu\": {\n\t\ta: \"Cuba Flag\",\n\t\tb: \"1F1E8-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t31\n\t\t]\n\t},\n\tbarber: {\n\t\ta: \"Barber Pole\",\n\t\tb: \"1F488\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hair\",\n\t\t\t\"salon\",\n\t\t\t\"style\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t34\n\t\t]\n\t},\n\tduck: {\n\t\ta: \"Duck\",\n\t\tb: \"1F986\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"bird\",\n\t\t\t\"mallard\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t30\n\t\t],\n\t\to: 9\n\t},\n\tsix_pointed_star: {\n\t\ta: \"Six Pointed Star with Middle Dot\",\n\t\tb: \"1F52F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"religion\",\n\t\t\t\"jewish\",\n\t\t\t\"hexagram\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t49\n\t\t]\n\t},\n\tramen: {\n\t\ta: \"Steaming Bowl\",\n\t\tb: \"1F35C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\",\n\t\t\t\"noodle\",\n\t\t\t\"chopsticks\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t30\n\t\t]\n\t},\n\tflashlight: {\n\t\ta: \"Electric Torch\",\n\t\tb: \"1F526\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dark\",\n\t\t\t\"camping\",\n\t\t\t\"sight\",\n\t\t\t\"night\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t40\n\t\t]\n\t},\n\tmahjong: {\n\t\ta: \"Mahjong Tile Red Dragon\",\n\t\tb: \"1F004\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"play\",\n\t\t\t\"chinese\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t14\n\t\t],\n\t\to: 5\n\t},\n\tfearful: {\n\t\ta: \"Fearful Face\",\n\t\tb: \"1F628\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"scared\",\n\t\t\t\"terrified\",\n\t\t\t\"nervous\",\n\t\t\t\"oops\",\n\t\t\t\"huh\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t12\n\t\t]\n\t},\n\taries: {\n\t\ta: \"Aries\",\n\t\tb: \"2648\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t44\n\t\t],\n\t\to: 1\n\t},\n\tspaghetti: {\n\t\ta: \"Spaghetti\",\n\t\tb: \"1F35D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"italian\",\n\t\t\t\"noodle\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t31\n\t\t]\n\t},\n\tcircus_tent: {\n\t\ta: \"Circus Tent\",\n\t\tb: \"1F3AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"festival\",\n\t\t\t\"carnival\",\n\t\t\t\"party\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t4\n\t\t]\n\t},\n\tizakaya_lantern: {\n\t\ta: \"Izakaya Lantern\",\n\t\tb: \"1F3EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"light\",\n\t\t\t\"paper\",\n\t\t\t\"halloween\",\n\t\t\t\"spooky\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t11\n\t\t],\n\t\tn: [\n\t\t\t\"lantern\"\n\t\t]\n\t},\n\t\"flag-cv\": {\n\t\ta: \"Cape Verde Flag\",\n\t\tb: \"1F1E8-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t32\n\t\t]\n\t},\n\tweary: {\n\t\ta: \"Weary Face\",\n\t\tb: \"1F629\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"tired\",\n\t\t\t\"sleepy\",\n\t\t\t\"sad\",\n\t\t\t\"frustrated\",\n\t\t\t\"upset\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t13\n\t\t]\n\t},\n\tflower_playing_cards: {\n\t\ta: \"Flower Playing Cards\",\n\t\tb: \"1F3B4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"sunset\",\n\t\t\t\"red\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t14\n\t\t]\n\t},\n\towl: {\n\t\ta: \"Owl\",\n\t\tb: \"1F989\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"bird\",\n\t\t\t\"hoot\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t33\n\t\t],\n\t\to: 9\n\t},\n\tperforming_arts: {\n\t\ta: \"Performing Arts\",\n\t\tb: \"1F3AD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"acting\",\n\t\t\t\"theater\",\n\t\t\t\"drama\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t7\n\t\t]\n\t},\n\tfrog: {\n\t\ta: \"Frog Face\",\n\t\tb: \"1F438\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"croak\",\n\t\t\t\"toad\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t34\n\t\t]\n\t},\n\t\"flag-cw\": {\n\t\ta: \"Curaçao Flag\",\n\t\tb: \"1F1E8-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t33\n\t\t]\n\t},\n\tnotebook_with_decorative_cover: {\n\t\ta: \"Notebook with Decorative Cover\",\n\t\tb: \"1F4D4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"classroom\",\n\t\t\t\"notes\",\n\t\t\t\"record\",\n\t\t\t\"paper\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t11\n\t\t]\n\t},\n\texploding_head: {\n\t\ta: \"Shocked Face with Exploding Head\",\n\t\tb: \"1F92F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t3\n\t\t],\n\t\tn: [\n\t\t\t\"shocked_face_with_exploding_head\"\n\t\t],\n\t\to: 10\n\t},\n\ttaurus: {\n\t\ta: \"Taurus\",\n\t\tb: \"2649\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t45\n\t\t],\n\t\to: 1\n\t},\n\tsweet_potato: {\n\t\ta: \"Roasted Sweet Potato\",\n\t\tb: \"1F360\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t34\n\t\t]\n\t},\n\tclosed_book: {\n\t\ta: \"Closed Book\",\n\t\tb: \"1F4D5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"library\",\n\t\t\t\"knowledge\",\n\t\t\t\"textbook\",\n\t\t\t\"learn\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t12\n\t\t]\n\t},\n\tgemini: {\n\t\ta: \"Gemini\",\n\t\tb: \"264A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t46\n\t\t],\n\t\to: 1\n\t},\n\tframe_with_picture: {\n\t\ta: \"Frame with Picture\",\n\t\tb: \"1F5BC-FE0F\",\n\t\tc: \"1F5BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t3\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-cx\": {\n\t\ta: \"Christmas Island Flag\",\n\t\tb: \"1F1E8-1F1FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t34\n\t\t]\n\t},\n\tgrimacing: {\n\t\ta: \"Grimacing Face\",\n\t\tb: \"1F62C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"grimace\",\n\t\t\t\"teeth\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t16\n\t\t]\n\t},\n\tcrocodile: {\n\t\ta: \"Crocodile\",\n\t\tb: \"1F40A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"reptile\",\n\t\t\t\"lizard\",\n\t\t\t\"alligator\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t40\n\t\t]\n\t},\n\toden: {\n\t\ta: \"Oden\",\n\t\tb: \"1F362\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-cy\": {\n\t\ta: \"Cyprus Flag\",\n\t\tb: \"1F1E8-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t35\n\t\t]\n\t},\n\tbook: {\n\t\ta: \"Open Book\",\n\t\tb: \"1F4D6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t26,\n\t\t\t13\n\t\t],\n\t\tn: [\n\t\t\t\"open_book\"\n\t\t]\n\t},\n\tturtle: {\n\t\ta: \"Turtle\",\n\t\tb: \"1F422\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"slow\",\n\t\t\t\"nature\",\n\t\t\t\"tortoise\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t12\n\t\t]\n\t},\n\tart: {\n\t\ta: \"Artist Palette\",\n\t\tb: \"1F3A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"design\",\n\t\t\t\"paint\",\n\t\t\t\"draw\",\n\t\t\t\"colors\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t2\n\t\t]\n\t},\n\tsushi: {\n\t\ta: \"Sushi\",\n\t\tb: \"1F363\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"fish\",\n\t\t\t\"japanese\",\n\t\t\t\"rice\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t37\n\t\t]\n\t},\n\tcold_sweat: {\n\t\ta: \"Face with Open Mouth and Cold Sweat\",\n\t\tb: \"1F630\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"nervous\",\n\t\t\t\"sweat\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t20\n\t\t]\n\t},\n\tcancer: {\n\t\ta: \"Cancer\",\n\t\tb: \"264B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t47\n\t\t],\n\t\to: 1\n\t},\n\tfried_shrimp: {\n\t\ta: \"Fried Shrimp\",\n\t\tb: \"1F364\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"animal\",\n\t\t\t\"appetizer\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t38\n\t\t]\n\t},\n\tslot_machine: {\n\t\ta: \"Slot Machine\",\n\t\tb: \"1F3B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bet\",\n\t\t\t\"gamble\",\n\t\t\t\"vegas\",\n\t\t\t\"fruit machine\",\n\t\t\t\"luck\",\n\t\t\t\"casino\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t10\n\t\t]\n\t},\n\tscream: {\n\t\ta: \"Face Screaming in Fear\",\n\t\tb: \"1F631\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"munch\",\n\t\t\t\"scared\",\n\t\t\t\"omg\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t21\n\t\t]\n\t},\n\tgreen_book: {\n\t\ta: \"Green Book\",\n\t\tb: \"1F4D7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"library\",\n\t\t\t\"knowledge\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t14\n\t\t]\n\t},\n\tleo: {\n\t\ta: \"Leo\",\n\t\tb: \"264C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t48\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-cz\": {\n\t\ta: \"Czechia Flag\",\n\t\tb: \"1F1E8-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t36\n\t\t]\n\t},\n\tlizard: {\n\t\ta: \"Lizard\",\n\t\tb: \"1F98E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"reptile\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t38\n\t\t],\n\t\to: 9\n\t},\n\tvirgo: {\n\t\ta: \"Virgo\",\n\t\tb: \"264D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t49\n\t\t],\n\t\to: 1\n\t},\n\tsteam_locomotive: {\n\t\ta: \"Steam Locomotive\",\n\t\tb: \"1F682\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"train\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t10\n\t\t]\n\t},\n\tde: {\n\t\ta: \"Germany Flag\",\n\t\tb: \"1F1E9-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"german\",\n\t\t\t\"nation\",\n\t\t\t\"flag\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t1,\n\t\t\t37\n\t\t],\n\t\tn: [\n\t\t\t\"flag-de\"\n\t\t]\n\t},\n\tflushed: {\n\t\ta: \"Flushed Face\",\n\t\tb: \"1F633\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"blush\",\n\t\t\t\"shy\",\n\t\t\t\"flattered\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t23\n\t\t]\n\t},\n\tblue_book: {\n\t\ta: \"Blue Book\",\n\t\tb: \"1F4D8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"library\",\n\t\t\t\"knowledge\",\n\t\t\t\"learn\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t15\n\t\t]\n\t},\n\tsnake: {\n\t\ta: \"Snake\",\n\t\tb: \"1F40D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"evil\",\n\t\t\t\"nature\",\n\t\t\t\"hiss\",\n\t\t\t\"python\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t43\n\t\t]\n\t},\n\tfish_cake: {\n\t\ta: \"Fish Cake with Swirl Design\",\n\t\tb: \"1F365\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"japan\",\n\t\t\t\"sea\",\n\t\t\t\"beach\",\n\t\t\t\"narutomaki\",\n\t\t\t\"pink\",\n\t\t\t\"swirl\",\n\t\t\t\"kamaboko\",\n\t\t\t\"surimi\",\n\t\t\t\"ramen\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t39\n\t\t]\n\t},\n\trailway_car: {\n\t\ta: \"Railway Car\",\n\t\tb: \"1F683\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t11\n\t\t]\n\t},\n\tdango: {\n\t\ta: \"Dango\",\n\t\tb: \"1F361\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"dessert\",\n\t\t\t\"sweet\",\n\t\t\t\"japanese\",\n\t\t\t\"barbecue\",\n\t\t\t\"meat\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t35\n\t\t]\n\t},\n\torange_book: {\n\t\ta: \"Orange Book\",\n\t\tb: \"1F4D9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"library\",\n\t\t\t\"knowledge\",\n\t\t\t\"textbook\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t16\n\t\t]\n\t},\n\tlibra: {\n\t\ta: \"Libra\",\n\t\tb: \"264E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t50\n\t\t],\n\t\to: 1\n\t},\n\tdragon_face: {\n\t\ta: \"Dragon Face\",\n\t\tb: \"1F432\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"myth\",\n\t\t\t\"nature\",\n\t\t\t\"chinese\",\n\t\t\t\"green\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-dg\": {\n\t\ta: \"Diego Garcia Flag\",\n\t\tb: \"1F1E9-1F1EC\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t38\n\t\t]\n\t},\n\tzany_face: {\n\t\ta: \"Grinning Face with One Large and One Small Eye\",\n\t\tb: \"1F92A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t50\n\t\t],\n\t\tn: [\n\t\t\t\"grinning_face_with_one_large_and_one_small_eye\"\n\t\t],\n\t\to: 10\n\t},\n\tbooks: {\n\t\ta: \"Books\",\n\t\tb: \"1F4DA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"literature\",\n\t\t\t\"library\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t17\n\t\t]\n\t},\n\tdragon: {\n\t\ta: \"Dragon\",\n\t\tb: \"1F409\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"myth\",\n\t\t\t\"nature\",\n\t\t\t\"chinese\",\n\t\t\t\"green\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t39\n\t\t]\n\t},\n\t\"flag-dj\": {\n\t\ta: \"Djibouti Flag\",\n\t\tb: \"1F1E9-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t39\n\t\t]\n\t},\n\tdumpling: {\n\t\ta: \"Dumpling\",\n\t\tb: \"1F95F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t11\n\t\t],\n\t\to: 10\n\t},\n\tdizzy_face: {\n\t\ta: \"Dizzy Face\",\n\t\tb: \"1F635\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"spent\",\n\t\t\t\"unconscious\",\n\t\t\t\"xox\",\n\t\t\t\"dizzy\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t25\n\t\t]\n\t},\n\tscorpius: {\n\t\ta: \"Scorpius\",\n\t\tb: \"264F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\",\n\t\t\t\"scorpio\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t51\n\t\t],\n\t\to: 1\n\t},\n\tbullettrain_side: {\n\t\ta: \"High-Speed Train\",\n\t\tb: \"1F684\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t12\n\t\t]\n\t},\n\tbullettrain_front: {\n\t\ta: \"High-Speed Train with Bullet Nose\",\n\t\tb: \"1F685\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"speed\",\n\t\t\t\"fast\",\n\t\t\t\"public\",\n\t\t\t\"travel\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t13\n\t\t]\n\t},\n\tnotebook: {\n\t\ta: \"Notebook\",\n\t\tb: \"1F4D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"record\",\n\t\t\t\"notes\",\n\t\t\t\"paper\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t10\n\t\t]\n\t},\n\tfortune_cookie: {\n\t\ta: \"Fortune Cookie\",\n\t\tb: \"1F960\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t12\n\t\t],\n\t\to: 10\n\t},\n\tsagittarius: {\n\t\ta: \"Sagittarius\",\n\t\tb: \"2650\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t0\n\t\t],\n\t\to: 1\n\t},\n\tsauropod: {\n\t\ta: \"Sauropod\",\n\t\tb: \"1F995\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t45\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-dk\": {\n\t\ta: \"Denmark Flag\",\n\t\tb: \"1F1E9-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t40\n\t\t]\n\t},\n\trage: {\n\t\ta: \"Pouting Face\",\n\t\tb: \"1F621\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"angry\",\n\t\t\t\"mad\",\n\t\t\t\"hate\",\n\t\t\t\"despise\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t5\n\t\t]\n\t},\n\tledger: {\n\t\ta: \"Ledger\",\n\t\tb: \"1F4D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"notes\",\n\t\t\t\"paper\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t9\n\t\t]\n\t},\n\tangry: {\n\t\ta: \"Angry Face\",\n\t\tb: \"1F620\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mad\",\n\t\t\t\"face\",\n\t\t\t\"annoyed\",\n\t\t\t\"frustrated\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t4\n\t\t],\n\t\tl: [\n\t\t\t\">:(\",\n\t\t\t\">:-(\"\n\t\t]\n\t},\n\t\"t-rex\": {\n\t\ta: \"T-Rex\",\n\t\tb: \"1F996\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t46\n\t\t],\n\t\to: 10\n\t},\n\tcapricorn: {\n\t\ta: \"Capricorn\",\n\t\tb: \"2651\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"purple-square\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t1\n\t\t],\n\t\to: 1\n\t},\n\ttakeout_box: {\n\t\ta: \"Takeout Box\",\n\t\tb: \"1F961\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t13\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-dm\": {\n\t\ta: \"Dominica Flag\",\n\t\tb: \"1F1E9-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t41\n\t\t]\n\t},\n\ttrain2: {\n\t\ta: \"Train\",\n\t\tb: \"1F686\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t14\n\t\t]\n\t},\n\tpage_with_curl: {\n\t\ta: \"Page with Curl\",\n\t\tb: \"1F4C3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"office\",\n\t\t\t\"paper\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t46\n\t\t]\n\t},\n\twhale: {\n\t\ta: \"Spouting Whale\",\n\t\tb: \"1F433\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t29\n\t\t]\n\t},\n\tface_with_symbols_on_mouth: {\n\t\ta: \"Serious Face with Symbols Covering Mouth\",\n\t\tb: \"1F92C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t0\n\t\t],\n\t\tn: [\n\t\t\t\"serious_face_with_symbols_covering_mouth\"\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-do\": {\n\t\ta: \"Dominican Republic Flag\",\n\t\tb: \"1F1E9-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t42\n\t\t]\n\t},\n\tmetro: {\n\t\ta: \"Metro\",\n\t\tb: \"1F687\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"blue-square\",\n\t\t\t\"mrt\",\n\t\t\t\"underground\",\n\t\t\t\"tube\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t15\n\t\t]\n\t},\n\ticecream: {\n\t\ta: \"Soft Ice Cream\",\n\t\tb: \"1F366\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"hot\",\n\t\t\t\"dessert\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t40\n\t\t]\n\t},\n\taquarius: {\n\t\ta: \"Aquarius\",\n\t\tb: \"2652\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t2\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-dz\": {\n\t\ta: \"Algeria Flag\",\n\t\tb: \"1F1E9-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t43\n\t\t]\n\t},\n\twhale2: {\n\t\ta: \"Whale\",\n\t\tb: \"1F40B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t41\n\t\t]\n\t},\n\tmask: {\n\t\ta: \"Face with Medical Mask\",\n\t\tb: \"1F637\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"sick\",\n\t\t\t\"ill\",\n\t\t\t\"disease\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t27\n\t\t]\n\t},\n\tscroll: {\n\t\ta: \"Scroll\",\n\t\tb: \"1F4DC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"ancient\",\n\t\t\t\"history\",\n\t\t\t\"paper\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t19\n\t\t]\n\t},\n\tshaved_ice: {\n\t\ta: \"Shaved Ice\",\n\t\tb: \"1F367\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hot\",\n\t\t\t\"dessert\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t41\n\t\t]\n\t},\n\tpisces: {\n\t\ta: \"Pisces\",\n\t\tb: \"2653\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"sign\",\n\t\t\t\"zodiac\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t3\n\t\t],\n\t\to: 1\n\t},\n\tlight_rail: {\n\t\ta: \"Light Rail\",\n\t\tb: \"1F688\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t16\n\t\t]\n\t},\n\tdolphin: {\n\t\ta: \"Dolphin\",\n\t\tb: \"1F42C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"fish\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\",\n\t\t\t\"flipper\",\n\t\t\t\"fins\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t22\n\t\t],\n\t\tn: [\n\t\t\t\"flipper\"\n\t\t]\n\t},\n\tface_with_thermometer: {\n\t\ta: \"Face with Thermometer\",\n\t\tb: \"1F912\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sick\",\n\t\t\t\"temperature\",\n\t\t\t\"thermometer\",\n\t\t\t\"cold\",\n\t\t\t\"fever\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t26\n\t\t],\n\t\to: 8\n\t},\n\t\"flag-ea\": {\n\t\ta: \"Ceuta & Melilla Flag\",\n\t\tb: \"1F1EA-1F1E6\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t44\n\t\t]\n\t},\n\tophiuchus: {\n\t\ta: \"Ophiuchus\",\n\t\tb: \"26CE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sign\",\n\t\t\t\"purple-square\",\n\t\t\t\"constellation\",\n\t\t\t\"astrology\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t31\n\t\t]\n\t},\n\tstation: {\n\t\ta: \"Station\",\n\t\tb: \"1F689\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"public\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t17\n\t\t]\n\t},\n\tice_cream: {\n\t\ta: \"Ice Cream\",\n\t\tb: \"1F368\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"hot\",\n\t\t\t\"dessert\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t42\n\t\t]\n\t},\n\tpage_facing_up: {\n\t\ta: \"Page Facing Up\",\n\t\tb: \"1F4C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"office\",\n\t\t\t\"paper\",\n\t\t\t\"information\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t47\n\t\t]\n\t},\n\tdoughnut: {\n\t\ta: \"Doughnut\",\n\t\tb: \"1F369\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"dessert\",\n\t\t\t\"snack\",\n\t\t\t\"sweet\",\n\t\t\t\"donut\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t43\n\t\t]\n\t},\n\tface_with_head_bandage: {\n\t\ta: \"Face with Head-Bandage\",\n\t\tb: \"1F915\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"injured\",\n\t\t\t\"clumsy\",\n\t\t\t\"bandage\",\n\t\t\t\"hurt\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t29\n\t\t],\n\t\to: 8\n\t},\n\tfish: {\n\t\ta: \"Fish\",\n\t\tb: \"1F41F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"food\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t9\n\t\t]\n\t},\n\tnewspaper: {\n\t\ta: \"Newspaper\",\n\t\tb: \"1F4F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"press\",\n\t\t\t\"headline\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t39\n\t\t]\n\t},\n\ttram: {\n\t\ta: \"Tram\",\n\t\tb: \"1F68A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t18\n\t\t]\n\t},\n\t\"flag-ec\": {\n\t\ta: \"Ecuador Flag\",\n\t\tb: \"1F1EA-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t45\n\t\t]\n\t},\n\ttwisted_rightwards_arrows: {\n\t\ta: \"Twisted Rightwards Arrows\",\n\t\tb: \"1F500\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"shuffle\",\n\t\t\t\"music\",\n\t\t\t\"random\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-ee\": {\n\t\ta: \"Estonia Flag\",\n\t\tb: \"1F1EA-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t46\n\t\t]\n\t},\n\tcookie: {\n\t\ta: \"Cookie\",\n\t\tb: \"1F36A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"snack\",\n\t\t\t\"oreo\",\n\t\t\t\"chocolate\",\n\t\t\t\"sweet\",\n\t\t\t\"dessert\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t44\n\t\t]\n\t},\n\tmonorail: {\n\t\ta: \"Monorail\",\n\t\tb: \"1F69D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t37\n\t\t]\n\t},\n\ttropical_fish: {\n\t\ta: \"Tropical Fish\",\n\t\tb: \"1F420\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"swim\",\n\t\t\t\"ocean\",\n\t\t\t\"beach\",\n\t\t\t\"nemo\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t10\n\t\t]\n\t},\n\trolled_up_newspaper: {\n\t\ta: \"Rolled Up Newspaper\",\n\t\tb: \"1F5DE-FE0F\",\n\t\tc: \"1F5DE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t12\n\t\t],\n\t\to: 7\n\t},\n\tnauseated_face: {\n\t\ta: \"Nauseated Face\",\n\t\tb: \"1F922\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"vomit\",\n\t\t\t\"gross\",\n\t\t\t\"green\",\n\t\t\t\"sick\",\n\t\t\t\"throw up\",\n\t\t\t\"ill\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t25\n\t\t],\n\t\to: 9\n\t},\n\trepeat: {\n\t\ta: \"Clockwise Rightwards and Leftwards Open Circle Arrows\",\n\t\tb: \"1F501\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"loop\",\n\t\t\t\"record\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t3\n\t\t]\n\t},\n\tbookmark_tabs: {\n\t\ta: \"Bookmark Tabs\",\n\t\tb: \"1F4D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"favorite\",\n\t\t\t\"save\",\n\t\t\t\"order\",\n\t\t\t\"tidy\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t8\n\t\t]\n\t},\n\trepeat_one: {\n\t\ta: \"Clockwise Rightwards and Leftwards Open Circle Arrows with Circled One Overlay\",\n\t\tb: \"1F502\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"loop\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-eg\": {\n\t\ta: \"Egypt Flag\",\n\t\tb: \"1F1EA-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t47\n\t\t]\n\t},\n\tmountain_railway: {\n\t\ta: \"Mountain Railway\",\n\t\tb: \"1F69E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t38\n\t\t]\n\t},\n\tbirthday: {\n\t\ta: \"Birthday Cake\",\n\t\tb: \"1F382\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"dessert\",\n\t\t\t\"cake\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t16\n\t\t]\n\t},\n\tblowfish: {\n\t\ta: \"Blowfish\",\n\t\tb: \"1F421\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"food\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t11\n\t\t]\n\t},\n\tface_vomiting: {\n\t\ta: \"Face with Open Mouth Vomiting\",\n\t\tb: \"1F92E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t2\n\t\t],\n\t\tn: [\n\t\t\t\"face_with_open_mouth_vomiting\"\n\t\t],\n\t\to: 10\n\t},\n\tarrow_forward: {\n\t\ta: \"Black Right-Pointing Triangle\",\n\t\tb: \"25B6-FE0F\",\n\t\tc: \"25B6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"right\",\n\t\t\t\"direction\",\n\t\t\t\"play\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t10\n\t\t],\n\t\to: 1\n\t},\n\tbookmark: {\n\t\ta: \"Bookmark\",\n\t\tb: \"1F516\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"favorite\",\n\t\t\t\"label\",\n\t\t\t\"save\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t24\n\t\t]\n\t},\n\t\"flag-eh\": {\n\t\ta: \"Western Sahara Flag\",\n\t\tb: \"1F1EA-1F1ED\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t48\n\t\t]\n\t},\n\tshark: {\n\t\ta: \"Shark\",\n\t\tb: \"1F988\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"fish\",\n\t\t\t\"sea\",\n\t\t\t\"ocean\",\n\t\t\t\"jaws\",\n\t\t\t\"fins\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t32\n\t\t],\n\t\to: 9\n\t},\n\ttrain: {\n\t\ta: \"Tram Car\",\n\t\tb: \"1F68B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"carriage\",\n\t\t\t\"public\",\n\t\t\t\"travel\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t19\n\t\t]\n\t},\n\tsneezing_face: {\n\t\ta: \"Sneezing Face\",\n\t\tb: \"1F927\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"gesundheit\",\n\t\t\t\"sneeze\",\n\t\t\t\"sick\",\n\t\t\t\"allergy\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t47\n\t\t],\n\t\to: 9\n\t},\n\tcake: {\n\t\ta: \"Shortcake\",\n\t\tb: \"1F370\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"dessert\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t50\n\t\t]\n\t},\n\tbus: {\n\t\ta: \"Bus\",\n\t\tb: \"1F68C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"car\",\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t20\n\t\t]\n\t},\n\tpie: {\n\t\ta: \"Pie\",\n\t\tb: \"1F967\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t19\n\t\t],\n\t\to: 10\n\t},\n\tinnocent: {\n\t\ta: \"Smiling Face with Halo\",\n\t\tb: \"1F607\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"angel\",\n\t\t\t\"heaven\",\n\t\t\t\"halo\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t31\n\t\t]\n\t},\n\tfast_forward: {\n\t\ta: \"Black Right-Pointing Double Triangle\",\n\t\tb: \"23E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"play\",\n\t\t\t\"speed\",\n\t\t\t\"continue\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t45\n\t\t]\n\t},\n\tlabel: {\n\t\ta: \"Label\",\n\t\tb: \"1F3F7-FE0F\",\n\t\tc: \"1F3F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sale\",\n\t\t\t\"tag\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t21\n\t\t],\n\t\to: 7\n\t},\n\toctopus: {\n\t\ta: \"Octopus\",\n\t\tb: \"1F419\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"creature\",\n\t\t\t\"ocean\",\n\t\t\t\"sea\",\n\t\t\t\"nature\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t3\n\t\t]\n\t},\n\t\"flag-er\": {\n\t\ta: \"Eritrea Flag\",\n\t\tb: \"1F1EA-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t49\n\t\t]\n\t},\n\tblack_right_pointing_double_triangle_with_vertical_bar: {\n\t\ta: \"Black Right Pointing Double Triangle with Vertical Bar\",\n\t\tb: \"23ED-FE0F\",\n\t\tc: \"23ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t49\n\t\t]\n\t},\n\tchocolate_bar: {\n\t\ta: \"Chocolate Bar\",\n\t\tb: \"1F36B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"snack\",\n\t\t\t\"dessert\",\n\t\t\t\"sweet\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t45\n\t\t]\n\t},\n\toncoming_bus: {\n\t\ta: \"Oncoming Bus\",\n\t\tb: \"1F68D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t21\n\t\t]\n\t},\n\tshell: {\n\t\ta: \"Spiral Shell\",\n\t\tb: \"1F41A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"sea\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t4\n\t\t]\n\t},\n\tface_with_cowboy_hat: {\n\t\ta: \"Face with Cowboy Hat\",\n\t\tb: \"1F920\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t23\n\t\t],\n\t\to: 9\n\t},\n\tmoneybag: {\n\t\ta: \"Money Bag\",\n\t\tb: \"1F4B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dollar\",\n\t\t\t\"payment\",\n\t\t\t\"coins\",\n\t\t\t\"sale\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t27\n\t\t]\n\t},\n\tes: {\n\t\ta: \"Spain Flag\",\n\t\tb: \"1F1EA-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"spain\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t1,\n\t\t\t50\n\t\t],\n\t\tn: [\n\t\t\t\"flag-es\"\n\t\t]\n\t},\n\tcrab: {\n\t\ta: \"Crab\",\n\t\tb: \"1F980\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"crustacean\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t24\n\t\t],\n\t\to: 8\n\t},\n\tyen: {\n\t\ta: \"Banknote with Yen Sign\",\n\t\tb: \"1F4B4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"japanese\",\n\t\t\t\"dollar\",\n\t\t\t\"currency\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t31\n\t\t]\n\t},\n\t\"flag-et\": {\n\t\ta: \"Ethiopia Flag\",\n\t\tb: \"1F1EA-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t1,\n\t\t\t51\n\t\t]\n\t},\n\tclown_face: {\n\t\ta: \"Clown Face\",\n\t\tb: \"1F921\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t24\n\t\t],\n\t\to: 9\n\t},\n\tblack_right_pointing_triangle_with_double_vertical_bar: {\n\t\ta: \"Black Right Pointing Triangle with Double Vertical Bar\",\n\t\tb: \"23EF-FE0F\",\n\t\tc: \"23EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t51\n\t\t]\n\t},\n\ttrolleybus: {\n\t\ta: \"Trolleybus\",\n\t\tb: \"1F68E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bart\",\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t22\n\t\t]\n\t},\n\tcandy: {\n\t\ta: \"Candy\",\n\t\tb: \"1F36C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"snack\",\n\t\t\t\"dessert\",\n\t\t\t\"sweet\",\n\t\t\t\"lolly\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t46\n\t\t]\n\t},\n\tlying_face: {\n\t\ta: \"Lying Face\",\n\t\tb: \"1F925\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"lie\",\n\t\t\t\"pinocchio\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t28\n\t\t],\n\t\to: 9\n\t},\n\tarrow_backward: {\n\t\ta: \"Black Left-Pointing Triangle\",\n\t\tb: \"25C0-FE0F\",\n\t\tc: \"25C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"left\",\n\t\t\t\"direction\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t11\n\t\t],\n\t\to: 1\n\t},\n\tdollar: {\n\t\ta: \"Banknote with Dollar Sign\",\n\t\tb: \"1F4B5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"bill\",\n\t\t\t\"currency\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t32\n\t\t]\n\t},\n\tshrimp: {\n\t\ta: \"Shrimp\",\n\t\tb: \"1F990\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"ocean\",\n\t\t\t\"nature\",\n\t\t\t\"seafood\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t40\n\t\t],\n\t\to: 9\n\t},\n\tminibus: {\n\t\ta: \"Minibus\",\n\t\tb: \"1F690\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"car\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t24\n\t\t]\n\t},\n\t\"flag-eu\": {\n\t\ta: \"European Union Flag\",\n\t\tb: \"1F1EA-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t0\n\t\t]\n\t},\n\tlollipop: {\n\t\ta: \"Lollipop\",\n\t\tb: \"1F36D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"snack\",\n\t\t\t\"candy\",\n\t\t\t\"sweet\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t47\n\t\t]\n\t},\n\tsquid: {\n\t\ta: \"Squid\",\n\t\tb: \"1F991\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"ocean\",\n\t\t\t\"sea\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t41\n\t\t],\n\t\to: 9\n\t},\n\teuro: {\n\t\ta: \"Banknote with Euro Sign\",\n\t\tb: \"1F4B6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"dollar\",\n\t\t\t\"currency\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t33\n\t\t]\n\t},\n\t\"flag-fi\": {\n\t\ta: \"Finland Flag\",\n\t\tb: \"1F1EB-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t1\n\t\t]\n\t},\n\tambulance: {\n\t\ta: \"Ambulance\",\n\t\tb: \"1F691\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"health\",\n\t\t\t\"911\",\n\t\t\t\"hospital\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t25\n\t\t]\n\t},\n\tcustard: {\n\t\ta: \"Custard\",\n\t\tb: \"1F36E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dessert\",\n\t\t\t\"food\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t48\n\t\t]\n\t},\n\tshushing_face: {\n\t\ta: \"Face with Finger Covering Closed Lips\",\n\t\tb: \"1F92B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t51\n\t\t],\n\t\tn: [\n\t\t\t\"face_with_finger_covering_closed_lips\"\n\t\t],\n\t\to: 10\n\t},\n\trewind: {\n\t\ta: \"Black Left-Pointing Double Triangle\",\n\t\tb: \"23EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"play\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t46\n\t\t]\n\t},\n\tblack_left_pointing_double_triangle_with_vertical_bar: {\n\t\ta: \"Black Left Pointing Double Triangle with Vertical Bar\",\n\t\tb: \"23EE-FE0F\",\n\t\tc: \"23EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t50\n\t\t]\n\t},\n\tface_with_hand_over_mouth: {\n\t\ta: \"Smiling Face with Smiling Eyes and Hand Covering Mouth\",\n\t\tb: \"1F92D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t1\n\t\t],\n\t\tn: [\n\t\t\t\"smiling_face_with_smiling_eyes_and_hand_covering_mouth\"\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-fj\": {\n\t\ta: \"Fiji Flag\",\n\t\tb: \"1F1EB-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t2\n\t\t]\n\t},\n\thoney_pot: {\n\t\ta: \"Honey Pot\",\n\t\tb: \"1F36F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bees\",\n\t\t\t\"sweet\",\n\t\t\t\"kitchen\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t49\n\t\t]\n\t},\n\tsnail: {\n\t\ta: \"Snail\",\n\t\tb: \"1F40C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"slow\",\n\t\t\t\"animal\",\n\t\t\t\"shell\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t42\n\t\t]\n\t},\n\tpound: {\n\t\ta: \"Banknote with Pound Sign\",\n\t\tb: \"1F4B7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"british\",\n\t\t\t\"sterling\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"bills\",\n\t\t\t\"uk\",\n\t\t\t\"england\",\n\t\t\t\"currency\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t34\n\t\t]\n\t},\n\tfire_engine: {\n\t\ta: \"Fire Engine\",\n\t\tb: \"1F692\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"cars\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t26\n\t\t]\n\t},\n\tbaby_bottle: {\n\t\ta: \"Baby Bottle\",\n\t\tb: \"1F37C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"food\",\n\t\t\t\"container\",\n\t\t\t\"milk\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t10\n\t\t]\n\t},\n\t\"flag-fk\": {\n\t\ta: \"Falkland Islands Flag\",\n\t\tb: \"1F1EB-1F1F0\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t3\n\t\t]\n\t},\n\tbutterfly: {\n\t\ta: \"Butterfly\",\n\t\tb: \"1F98B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"nature\",\n\t\t\t\"caterpillar\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t35\n\t\t],\n\t\to: 9\n\t},\n\tmoney_with_wings: {\n\t\ta: \"Money with Wings\",\n\t\tb: \"1F4B8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dollar\",\n\t\t\t\"bills\",\n\t\t\t\"payment\",\n\t\t\t\"sale\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t35\n\t\t]\n\t},\n\tface_with_monocle: {\n\t\ta: \"Face with Monocle\",\n\t\tb: \"1F9D0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t49\n\t\t],\n\t\to: 10\n\t},\n\tpolice_car: {\n\t\ta: \"Police Car\",\n\t\tb: \"1F693\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"cars\",\n\t\t\t\"transportation\",\n\t\t\t\"law\",\n\t\t\t\"legal\",\n\t\t\t\"enforcement\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t27\n\t\t]\n\t},\n\tarrow_up_small: {\n\t\ta: \"Up-Pointing Small Red Triangle\",\n\t\tb: \"1F53C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"triangle\",\n\t\t\t\"direction\",\n\t\t\t\"point\",\n\t\t\t\"forward\",\n\t\t\t\"top\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t10\n\t\t]\n\t},\n\t\"flag-fm\": {\n\t\ta: \"Micronesia Flag\",\n\t\tb: \"1F1EB-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t4\n\t\t]\n\t},\n\tglass_of_milk: {\n\t\ta: \"Glass of Milk\",\n\t\tb: \"1F95B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t7\n\t\t],\n\t\to: 9\n\t},\n\tcredit_card: {\n\t\ta: \"Credit Card\",\n\t\tb: \"1F4B3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"dollar\",\n\t\t\t\"bill\",\n\t\t\t\"payment\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t30\n\t\t]\n\t},\n\toncoming_police_car: {\n\t\ta: \"Oncoming Police Car\",\n\t\tb: \"1F694\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"law\",\n\t\t\t\"legal\",\n\t\t\t\"enforcement\",\n\t\t\t\"911\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t28\n\t\t]\n\t},\n\tbug: {\n\t\ta: \"Bug\",\n\t\tb: \"1F41B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"nature\",\n\t\t\t\"worm\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t5\n\t\t]\n\t},\n\tnerd_face: {\n\t\ta: \"Nerd Face\",\n\t\tb: \"1F913\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"nerdy\",\n\t\t\t\"geek\",\n\t\t\t\"dork\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t27\n\t\t],\n\t\to: 8\n\t},\n\tarrow_double_up: {\n\t\ta: \"Black Up-Pointing Double Triangle\",\n\t\tb: \"23EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"top\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t47\n\t\t]\n\t},\n\tchart: {\n\t\ta: \"Chart with Upwards Trend and Yen Sign\",\n\t\tb: \"1F4B9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"green-square\",\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-fo\": {\n\t\ta: \"Faroe Islands Flag\",\n\t\tb: \"1F1EB-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t5\n\t\t]\n\t},\n\tant: {\n\t\ta: \"Ant\",\n\t\tb: \"1F41C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"nature\",\n\t\t\t\"bug\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t6\n\t\t]\n\t},\n\tarrow_down_small: {\n\t\ta: \"Down-Pointing Small Red Triangle\",\n\t\tb: \"1F53D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t11\n\t\t]\n\t},\n\tsmiling_imp: {\n\t\ta: \"Smiling Face with Horns\",\n\t\tb: \"1F608\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"devil\",\n\t\t\t\"horns\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t32\n\t\t]\n\t},\n\ttaxi: {\n\t\ta: \"Taxi\",\n\t\tb: \"1F695\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"uber\",\n\t\t\t\"vehicle\",\n\t\t\t\"cars\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t29\n\t\t]\n\t},\n\tcoffee: {\n\t\ta: \"Hot Beverage\",\n\t\tb: \"2615\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beverage\",\n\t\t\t\"caffeine\",\n\t\t\t\"latte\",\n\t\t\t\"espresso\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t24\n\t\t],\n\t\to: 4\n\t},\n\tfr: {\n\t\ta: \"France Flag\",\n\t\tb: \"1F1EB-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"banner\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"france\",\n\t\t\t\"french\",\n\t\t\t\"country\"\n\t\t],\n\t\tk: [\n\t\t\t2,\n\t\t\t6\n\t\t],\n\t\tn: [\n\t\t\t\"flag-fr\"\n\t\t]\n\t},\n\toncoming_taxi: {\n\t\ta: \"Oncoming Taxi\",\n\t\tb: \"1F696\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"cars\",\n\t\t\t\"uber\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t30\n\t\t]\n\t},\n\tarrow_double_down: {\n\t\ta: \"Black Down-Pointing Double Triangle\",\n\t\tb: \"23EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t48\n\t\t]\n\t},\n\timp: {\n\t\ta: \"Imp\",\n\t\tb: \"1F47F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"devil\",\n\t\t\t\"angry\",\n\t\t\t\"horns\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t51\n\t\t]\n\t},\n\tcurrency_exchange: {\n\t\ta: \"Currency Exchange\",\n\t\tb: \"1F4B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"dollar\",\n\t\t\t\"travel\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t28\n\t\t]\n\t},\n\ttea: {\n\t\ta: \"Teacup Without Handle\",\n\t\tb: \"1F375\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"bowl\",\n\t\t\t\"breakfast\",\n\t\t\t\"green\",\n\t\t\t\"british\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t3\n\t\t]\n\t},\n\tbee: {\n\t\ta: \"Honeybee\",\n\t\tb: \"1F41D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t13,\n\t\t\t7\n\t\t],\n\t\tn: [\n\t\t\t\"honeybee\"\n\t\t]\n\t},\n\theavy_dollar_sign: {\n\t\ta: \"Heavy Dollar Sign\",\n\t\tb: \"1F4B2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"payment\",\n\t\t\t\"currency\",\n\t\t\t\"buck\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t29\n\t\t]\n\t},\n\tcar: {\n\t\ta: \"Automobile\",\n\t\tb: \"1F697\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t34,\n\t\t\t31\n\t\t],\n\t\tn: [\n\t\t\t\"red_car\"\n\t\t]\n\t},\n\tsake: {\n\t\ta: \"Sake Bottle and Cup\",\n\t\tb: \"1F376\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wine\",\n\t\t\t\"drink\",\n\t\t\t\"drunk\",\n\t\t\t\"beverage\",\n\t\t\t\"japanese\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-ga\": {\n\t\ta: \"Gabon Flag\",\n\t\tb: \"1F1EC-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t7\n\t\t]\n\t},\n\tbeetle: {\n\t\ta: \"Lady Beetle\",\n\t\tb: \"1F41E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"nature\",\n\t\t\t\"ladybug\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t8\n\t\t]\n\t},\n\tjapanese_ogre: {\n\t\ta: \"Japanese Ogre\",\n\t\tb: \"1F479\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"monster\",\n\t\t\t\"red\",\n\t\t\t\"mask\",\n\t\t\t\"halloween\",\n\t\t\t\"scary\",\n\t\t\t\"creepy\",\n\t\t\t\"devil\",\n\t\t\t\"demon\",\n\t\t\t\"japanese\",\n\t\t\t\"ogre\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t40\n\t\t]\n\t},\n\tdouble_vertical_bar: {\n\t\ta: \"Double Vertical Bar\",\n\t\tb: \"23F8-FE0F\",\n\t\tc: \"23F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t4\n\t\t],\n\t\to: 7\n\t},\n\tchampagne: {\n\t\ta: \"Bottle with Popping Cork\",\n\t\tb: \"1F37E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"wine\",\n\t\t\t\"bottle\",\n\t\t\t\"celebration\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t12\n\t\t],\n\t\to: 8\n\t},\n\tjapanese_goblin: {\n\t\ta: \"Japanese Goblin\",\n\t\tb: \"1F47A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"red\",\n\t\t\t\"evil\",\n\t\t\t\"mask\",\n\t\t\t\"monster\",\n\t\t\t\"scary\",\n\t\t\t\"creepy\",\n\t\t\t\"japanese\",\n\t\t\t\"goblin\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t41\n\t\t]\n\t},\n\tblack_square_for_stop: {\n\t\ta: \"Black Square for Stop\",\n\t\tb: \"23F9-FE0F\",\n\t\tc: \"23F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t5\n\t\t],\n\t\to: 7\n\t},\n\toncoming_automobile: {\n\t\ta: \"Oncoming Automobile\",\n\t\tb: \"1F698\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"car\",\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t32\n\t\t]\n\t},\n\temail: {\n\t\ta: \"Envelope\",\n\t\tb: \"2709-FE0F\",\n\t\tc: \"2709\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"letter\",\n\t\t\t\"postal\",\n\t\t\t\"inbox\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t17\n\t\t],\n\t\tn: [\n\t\t\t\"envelope\"\n\t\t],\n\t\to: 1\n\t},\n\tcricket: {\n\t\ta: \"Cricket\",\n\t\tb: \"1F997\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t47\n\t\t],\n\t\to: 10\n\t},\n\tgb: {\n\t\ta: \"United Kingdom Flag\",\n\t\tb: \"1F1EC-1F1E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t8\n\t\t],\n\t\tn: [\n\t\t\t\"uk\",\n\t\t\t\"flag-gb\"\n\t\t]\n\t},\n\tblack_circle_for_record: {\n\t\ta: \"Black Circle for Record\",\n\t\tb: \"23FA-FE0F\",\n\t\tc: \"23FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t6\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-gd\": {\n\t\ta: \"Grenada Flag\",\n\t\tb: \"1F1EC-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t9\n\t\t]\n\t},\n\tspider: {\n\t\ta: \"Spider\",\n\t\tb: \"1F577-FE0F\",\n\t\tc: \"1F577\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"arachnid\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\tblue_car: {\n\t\ta: \"Recreational Vehicle\",\n\t\tb: \"1F699\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t33\n\t\t]\n\t},\n\tskull: {\n\t\ta: \"Skull\",\n\t\tb: \"1F480\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dead\",\n\t\t\t\"skeleton\",\n\t\t\t\"creepy\",\n\t\t\t\"death\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t0\n\t\t]\n\t},\n\t\"e-mail\": {\n\t\ta: \"E-Mail Symbol\",\n\t\tb: \"1F4E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"communication\",\n\t\t\t\"inbox\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t30\n\t\t]\n\t},\n\twine_glass: {\n\t\ta: \"Wine Glass\",\n\t\tb: \"1F377\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"beverage\",\n\t\t\t\"drunk\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t5\n\t\t]\n\t},\n\tspider_web: {\n\t\ta: \"Spider Web\",\n\t\tb: \"1F578-FE0F\",\n\t\tc: \"1F578\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"insect\",\n\t\t\t\"arachnid\",\n\t\t\t\"silk\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t19\n\t\t],\n\t\to: 7\n\t},\n\tcocktail: {\n\t\ta: \"Cocktail Glass\",\n\t\tb: \"1F378\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"drunk\",\n\t\t\t\"alcohol\",\n\t\t\t\"beverage\",\n\t\t\t\"booze\",\n\t\t\t\"mojito\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t6\n\t\t]\n\t},\n\tskull_and_crossbones: {\n\t\ta: \"Skull and Crossbones\",\n\t\tb: \"2620-FE0F\",\n\t\tc: \"2620\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"poison\",\n\t\t\t\"danger\",\n\t\t\t\"deadly\",\n\t\t\t\"scary\",\n\t\t\t\"death\",\n\t\t\t\"pirate\",\n\t\t\t\"evil\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t32\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-ge\": {\n\t\ta: \"Georgia Flag\",\n\t\tb: \"1F1EC-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t10\n\t\t]\n\t},\n\teject: {\n\t\ta: \"Eject\",\n\t\tb: \"23CF-FE0F\",\n\t\tc: \"23CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t44\n\t\t],\n\t\to: 4\n\t},\n\ttruck: {\n\t\ta: \"Delivery Truck\",\n\t\tb: \"1F69A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cars\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t34\n\t\t]\n\t},\n\tincoming_envelope: {\n\t\ta: \"Incoming Envelope\",\n\t\tb: \"1F4E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"inbox\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t31\n\t\t]\n\t},\n\ttropical_drink: {\n\t\ta: \"Tropical Drink\",\n\t\tb: \"1F379\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beverage\",\n\t\t\t\"cocktail\",\n\t\t\t\"summer\",\n\t\t\t\"beach\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\",\n\t\t\t\"mojito\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t7\n\t\t]\n\t},\n\tscorpion: {\n\t\ta: \"Scorpion\",\n\t\tb: \"1F982\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"arachnid\"\n\t\t],\n\t\tk: [\n\t\t\t42,\n\t\t\t26\n\t\t],\n\t\to: 8\n\t},\n\tcinema: {\n\t\ta: \"Cinema\",\n\t\tb: \"1F3A6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"record\",\n\t\t\t\"film\",\n\t\t\t\"movie\",\n\t\t\t\"curtain\",\n\t\t\t\"stage\",\n\t\t\t\"theater\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t0\n\t\t]\n\t},\n\tarticulated_lorry: {\n\t\ta: \"Articulated Lorry\",\n\t\tb: \"1F69B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"cars\",\n\t\t\t\"transportation\",\n\t\t\t\"express\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t35\n\t\t]\n\t},\n\tenvelope_with_arrow: {\n\t\ta: \"Envelope with Downwards Arrow Above\",\n\t\tb: \"1F4E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t32\n\t\t]\n\t},\n\tghost: {\n\t\ta: \"Ghost\",\n\t\tb: \"1F47B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"halloween\",\n\t\t\t\"spooky\",\n\t\t\t\"scary\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t42\n\t\t]\n\t},\n\t\"flag-gf\": {\n\t\ta: \"French Guiana Flag\",\n\t\tb: \"1F1EC-1F1EB\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t11\n\t\t]\n\t},\n\tbouquet: {\n\t\ta: \"Bouquet\",\n\t\tb: \"1F490\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"flowers\",\n\t\t\t\"nature\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t42\n\t\t]\n\t},\n\ttractor: {\n\t\ta: \"Tractor\",\n\t\tb: \"1F69C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"car\",\n\t\t\t\"farming\",\n\t\t\t\"agriculture\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t36\n\t\t]\n\t},\n\tbeer: {\n\t\ta: \"Beer Mug\",\n\t\tb: \"1F37A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"relax\",\n\t\t\t\"beverage\",\n\t\t\t\"drink\",\n\t\t\t\"drunk\",\n\t\t\t\"party\",\n\t\t\t\"pub\",\n\t\t\t\"summer\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t8\n\t\t]\n\t},\n\toutbox_tray: {\n\t\ta: \"Outbox Tray\",\n\t\tb: \"1F4E4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"inbox\",\n\t\t\t\"email\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t27\n\t\t]\n\t},\n\tlow_brightness: {\n\t\ta: \"Low Brightness Symbol\",\n\t\tb: \"1F505\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sun\",\n\t\t\t\"afternoon\",\n\t\t\t\"warm\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t7\n\t\t]\n\t},\n\talien: {\n\t\ta: \"Extraterrestrial Alien\",\n\t\tb: \"1F47D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"UFO\",\n\t\t\t\"paul\",\n\t\t\t\"weird\",\n\t\t\t\"outer_space\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t49\n\t\t]\n\t},\n\t\"flag-gg\": {\n\t\ta: \"Guernsey Flag\",\n\t\tb: \"1F1EC-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t12\n\t\t]\n\t},\n\tcherry_blossom: {\n\t\ta: \"Cherry Blossom\",\n\t\tb: \"1F338\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"spring\",\n\t\t\t\"flower\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t46\n\t\t]\n\t},\n\tinbox_tray: {\n\t\ta: \"Inbox Tray\",\n\t\tb: \"1F4E5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"documents\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-gh\": {\n\t\ta: \"Ghana Flag\",\n\t\tb: \"1F1EC-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t13\n\t\t]\n\t},\n\tbike: {\n\t\ta: \"Bicycle\",\n\t\tb: \"1F6B2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"bicycle\",\n\t\t\t\"exercise\",\n\t\t\t\"hipster\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t23\n\t\t]\n\t},\n\tspace_invader: {\n\t\ta: \"Alien Monster\",\n\t\tb: \"1F47E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"game\",\n\t\t\t\"arcade\",\n\t\t\t\"play\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t50\n\t\t]\n\t},\n\tbeers: {\n\t\ta: \"Clinking Beer Mugs\",\n\t\tb: \"1F37B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"relax\",\n\t\t\t\"beverage\",\n\t\t\t\"drink\",\n\t\t\t\"drunk\",\n\t\t\t\"party\",\n\t\t\t\"pub\",\n\t\t\t\"summer\",\n\t\t\t\"alcohol\",\n\t\t\t\"booze\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t9\n\t\t]\n\t},\n\thigh_brightness: {\n\t\ta: \"High Brightness Symbol\",\n\t\tb: \"1F506\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sun\",\n\t\t\t\"light\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t8\n\t\t]\n\t},\n\t\"package\": {\n\t\ta: \"Package\",\n\t\tb: \"1F4E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mail\",\n\t\t\t\"gift\",\n\t\t\t\"cardboard\",\n\t\t\t\"box\",\n\t\t\t\"moving\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t29\n\t\t]\n\t},\n\tscooter: {\n\t\ta: \"Scooter\",\n\t\tb: \"1F6F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t19\n\t\t],\n\t\to: 9\n\t},\n\twhite_flower: {\n\t\ta: \"White Flower\",\n\t\tb: \"1F4AE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t25\n\t\t]\n\t},\n\tclinking_glasses: {\n\t\ta: \"Clinking Glasses\",\n\t\tb: \"1F942\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"beverage\",\n\t\t\t\"drink\",\n\t\t\t\"party\",\n\t\t\t\"alcohol\",\n\t\t\t\"celebrate\",\n\t\t\t\"cheers\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t38\n\t\t],\n\t\to: 9\n\t},\n\trobot_face: {\n\t\ta: \"Robot Face\",\n\t\tb: \"1F916\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t30\n\t\t],\n\t\to: 8\n\t},\n\tsignal_strength: {\n\t\ta: \"Antenna with Bars\",\n\t\tb: \"1F4F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"reception\",\n\t\t\t\"phone\",\n\t\t\t\"internet\",\n\t\t\t\"connection\",\n\t\t\t\"wifi\",\n\t\t\t\"bluetooth\",\n\t\t\t\"bars\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t45\n\t\t]\n\t},\n\t\"flag-gi\": {\n\t\ta: \"Gibraltar Flag\",\n\t\tb: \"1F1EC-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t14\n\t\t]\n\t},\n\t\"flag-gl\": {\n\t\ta: \"Greenland Flag\",\n\t\tb: \"1F1EC-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t15\n\t\t]\n\t},\n\tmotor_scooter: {\n\t\ta: \"Motor Scooter\",\n\t\tb: \"1F6F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"vespa\",\n\t\t\t\"sasha\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t20\n\t\t],\n\t\to: 9\n\t},\n\tmailbox: {\n\t\ta: \"Closed Mailbox with Raised Flag\",\n\t\tb: \"1F4EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"inbox\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t34\n\t\t]\n\t},\n\tvibration_mode: {\n\t\ta: \"Vibration Mode\",\n\t\tb: \"1F4F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"orange-square\",\n\t\t\t\"phone\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t42\n\t\t]\n\t},\n\thankey: {\n\t\ta: \"Pile of Poo\",\n\t\tb: \"1F4A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t25,\n\t\t\t15\n\t\t],\n\t\tn: [\n\t\t\t\"poop\",\n\t\t\t\"shit\"\n\t\t]\n\t},\n\trosette: {\n\t\ta: \"Rosette\",\n\t\tb: \"1F3F5-FE0F\",\n\t\tc: \"1F3F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"flower\",\n\t\t\t\"decoration\",\n\t\t\t\"military\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t20\n\t\t],\n\t\to: 7\n\t},\n\ttumbler_glass: {\n\t\ta: \"Tumbler Glass\",\n\t\tb: \"1F943\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"drink\",\n\t\t\t\"beverage\",\n\t\t\t\"drunk\",\n\t\t\t\"alcohol\",\n\t\t\t\"liquor\",\n\t\t\t\"booze\",\n\t\t\t\"bourbon\",\n\t\t\t\"scotch\",\n\t\t\t\"whisky\",\n\t\t\t\"glass\",\n\t\t\t\"shot\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t39\n\t\t],\n\t\to: 9\n\t},\n\tcup_with_straw: {\n\t\ta: \"Cup with Straw\",\n\t\tb: \"1F964\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t16\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-gm\": {\n\t\ta: \"Gambia Flag\",\n\t\tb: \"1F1EC-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t16\n\t\t]\n\t},\n\tmailbox_closed: {\n\t\ta: \"Closed Mailbox with Lowered Flag\",\n\t\tb: \"1F4EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"communication\",\n\t\t\t\"inbox\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t33\n\t\t]\n\t},\n\tmobile_phone_off: {\n\t\ta: \"Mobile Phone off\",\n\t\tb: \"1F4F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mute\",\n\t\t\t\"orange-square\",\n\t\t\t\"silence\",\n\t\t\t\"quiet\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t43\n\t\t]\n\t},\n\tbusstop: {\n\t\ta: \"Bus Stop\",\n\t\tb: \"1F68F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"wait\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t23\n\t\t]\n\t},\n\tsmiley_cat: {\n\t\ta: \"Smiling Cat Face with Open Mouth\",\n\t\tb: \"1F63A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"happy\",\n\t\t\t\"smile\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t30\n\t\t]\n\t},\n\trose: {\n\t\ta: \"Rose\",\n\t\tb: \"1F339\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"flowers\",\n\t\t\t\"valentines\",\n\t\t\t\"love\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t47\n\t\t]\n\t},\n\tmotorway: {\n\t\ta: \"Motorway\",\n\t\tb: \"1F6E3-FE0F\",\n\t\tc: \"1F6E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"road\",\n\t\t\t\"cupertino\",\n\t\t\t\"interstate\",\n\t\t\t\"highway\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t11\n\t\t],\n\t\to: 7\n\t},\n\tsmile_cat: {\n\t\ta: \"Grinning Cat Face with Smiling Eyes\",\n\t\tb: \"1F638\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"smile\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-gn\": {\n\t\ta: \"Guinea Flag\",\n\t\tb: \"1F1EC-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t17\n\t\t]\n\t},\n\twilted_flower: {\n\t\ta: \"Wilted Flower\",\n\t\tb: \"1F940\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"flower\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t36\n\t\t],\n\t\to: 9\n\t},\n\tmailbox_with_mail: {\n\t\ta: \"Open Mailbox with Raised Flag\",\n\t\tb: \"1F4EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"inbox\",\n\t\t\t\"communication\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t35\n\t\t]\n\t},\n\tchopsticks: {\n\t\ta: \"Chopsticks\",\n\t\tb: \"1F962\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t14\n\t\t],\n\t\to: 10\n\t},\n\tfemale_sign: {\n\t\ta: \"Female Sign\",\n\t\tb: \"2640-FE0F\",\n\t\tc: \"2640\",\n\t\td: false,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t42\n\t\t],\n\t\to: 1\n\t},\n\tmailbox_with_no_mail: {\n\t\ta: \"Open Mailbox with Lowered Flag\",\n\t\tb: \"1F4ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"inbox\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t36\n\t\t]\n\t},\n\tknife_fork_plate: {\n\t\ta: \"Knife Fork Plate\",\n\t\tb: \"1F37D-FE0F\",\n\t\tc: \"1F37D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t8,\n\t\t\t11\n\t\t],\n\t\to: 7\n\t},\n\thibiscus: {\n\t\ta: \"Hibiscus\",\n\t\tb: \"1F33A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"vegetable\",\n\t\t\t\"flowers\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t48\n\t\t]\n\t},\n\t\"flag-gp\": {\n\t\ta: \"Guadeloupe Flag\",\n\t\tb: \"1F1EC-1F1F5\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t18\n\t\t]\n\t},\n\trailway_track: {\n\t\ta: \"Railway Track\",\n\t\tb: \"1F6E4-FE0F\",\n\t\tc: \"1F6E4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"train\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t12\n\t\t],\n\t\to: 7\n\t},\n\tmale_sign: {\n\t\ta: \"Male Sign\",\n\t\tb: \"2642-FE0F\",\n\t\tc: \"2642\",\n\t\td: false,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t47,\n\t\t\t43\n\t\t],\n\t\to: 1\n\t},\n\tjoy_cat: {\n\t\ta: \"Cat Face with Tears of Joy\",\n\t\tb: \"1F639\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"haha\",\n\t\t\t\"happy\",\n\t\t\t\"tears\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t29\n\t\t]\n\t},\n\tfuelpump: {\n\t\ta: \"Fuel Pump\",\n\t\tb: \"26FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"gas station\",\n\t\t\t\"petroleum\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t13\n\t\t],\n\t\to: 5\n\t},\n\tsunflower: {\n\t\ta: \"Sunflower\",\n\t\tb: \"1F33B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"fall\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t49\n\t\t]\n\t},\n\tpostbox: {\n\t\ta: \"Postbox\",\n\t\tb: \"1F4EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"letter\",\n\t\t\t\"envelope\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t37\n\t\t]\n\t},\n\t\"flag-gq\": {\n\t\ta: \"Equatorial Guinea Flag\",\n\t\tb: \"1F1EC-1F1F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t19\n\t\t]\n\t},\n\theart_eyes_cat: {\n\t\ta: \"Smiling Cat Face with Heart-Shaped Eyes\",\n\t\tb: \"1F63B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"cats\",\n\t\t\t\"valentines\",\n\t\t\t\"heart\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t31\n\t\t]\n\t},\n\tfork_and_knife: {\n\t\ta: \"Fork and Knife\",\n\t\tb: \"1F374\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cutlery\",\n\t\t\t\"kitchen\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t2\n\t\t]\n\t},\n\tmedical_symbol: {\n\t\ta: \"Medical Symbol\",\n\t\tb: \"2695-FE0F\",\n\t\tc: \"2695\",\n\t\td: false,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t14\n\t\t],\n\t\tn: [\n\t\t\t\"staff_of_aesculapius\"\n\t\t],\n\t\to: 4\n\t},\n\trecycle: {\n\t\ta: \"Black Universal Recycling Symbol\",\n\t\tb: \"267B-FE0F\",\n\t\tc: \"267B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arrow\",\n\t\t\t\"environment\",\n\t\t\t\"garbage\",\n\t\t\t\"trash\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t9\n\t\t],\n\t\to: 3\n\t},\n\tspoon: {\n\t\ta: \"Spoon\",\n\t\tb: \"1F944\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"cutlery\",\n\t\t\t\"kitchen\",\n\t\t\t\"tableware\"\n\t\t],\n\t\tk: [\n\t\t\t41,\n\t\t\t40\n\t\t],\n\t\to: 9\n\t},\n\tblossom: {\n\t\ta: \"Blossom\",\n\t\tb: \"1F33C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"flowers\",\n\t\t\t\"yellow\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t50\n\t\t]\n\t},\n\trotating_light: {\n\t\ta: \"Police Cars Revolving Light\",\n\t\tb: \"1F6A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"police\",\n\t\t\t\"ambulance\",\n\t\t\t\"911\",\n\t\t\t\"emergency\",\n\t\t\t\"alert\",\n\t\t\t\"error\",\n\t\t\t\"pinged\",\n\t\t\t\"law\",\n\t\t\t\"legal\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t13\n\t\t]\n\t},\n\tsmirk_cat: {\n\t\ta: \"Cat Face with Wry Smile\",\n\t\tb: \"1F63C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"smirk\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t32\n\t\t]\n\t},\n\tballot_box_with_ballot: {\n\t\ta: \"Ballot Box with Ballot\",\n\t\tb: \"1F5F3-FE0F\",\n\t\tc: \"1F5F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t17\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-gr\": {\n\t\ta: \"Greece Flag\",\n\t\tb: \"1F1EC-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t20\n\t\t]\n\t},\n\tkissing_cat: {\n\t\ta: \"Kissing Cat Face with Closed Eyes\",\n\t\tb: \"1F63D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t33\n\t\t]\n\t},\n\tpencil2: {\n\t\ta: \"Pencil\",\n\t\tb: \"270F-FE0F\",\n\t\tc: \"270F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"write\",\n\t\t\t\"paper\",\n\t\t\t\"writing\",\n\t\t\t\"school\",\n\t\t\t\"study\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t42\n\t\t],\n\t\to: 1\n\t},\n\ttraffic_light: {\n\t\ta: \"Horizontal Traffic Light\",\n\t\tb: \"1F6A5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"signal\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t10\n\t\t]\n\t},\n\tfleur_de_lis: {\n\t\ta: \"Fleur De Lis\",\n\t\tb: \"269C-FE0F\",\n\t\tc: \"269C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"decorative\",\n\t\t\t\"scout\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t19\n\t\t],\n\t\to: 4\n\t},\n\ttulip: {\n\t\ta: \"Tulip\",\n\t\tb: \"1F337\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"flowers\",\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"summer\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t45\n\t\t]\n\t},\n\thocho: {\n\t\ta: \"Hocho\",\n\t\tb: \"1F52A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"knife\",\n\t\t\t\"blade\",\n\t\t\t\"cutlery\",\n\t\t\t\"kitchen\",\n\t\t\t\"weapon\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t44\n\t\t],\n\t\tn: [\n\t\t\t\"knife\"\n\t\t]\n\t},\n\t\"flag-gs\": {\n\t\ta: \"South Georgia & South Sandwich Islands Flag\",\n\t\tb: \"1F1EC-1F1F8\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t21\n\t\t]\n\t},\n\tseedling: {\n\t\ta: \"Seedling\",\n\t\tb: \"1F331\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"grass\",\n\t\t\t\"lawn\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t39\n\t\t]\n\t},\n\tamphora: {\n\t\ta: \"Amphora\",\n\t\tb: \"1F3FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vase\",\n\t\t\t\"jar\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t24\n\t\t],\n\t\to: 8\n\t},\n\tscream_cat: {\n\t\ta: \"Weary Cat Face\",\n\t\tb: \"1F640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\",\n\t\t\t\"munch\",\n\t\t\t\"scared\",\n\t\t\t\"scream\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t36\n\t\t]\n\t},\n\tvertical_traffic_light: {\n\t\ta: \"Vertical Traffic Light\",\n\t\tb: \"1F6A6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"driving\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t11\n\t\t]\n\t},\n\tblack_nib: {\n\t\ta: \"Black Nib\",\n\t\tb: \"2712-FE0F\",\n\t\tc: \"2712\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pen\",\n\t\t\t\"stationery\",\n\t\t\t\"writing\",\n\t\t\t\"write\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t43\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-gt\": {\n\t\ta: \"Guatemala Flag\",\n\t\tb: \"1F1EC-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t22\n\t\t]\n\t},\n\ttrident: {\n\t\ta: \"Trident Emblem\",\n\t\tb: \"1F531\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weapon\",\n\t\t\t\"spear\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t51\n\t\t]\n\t},\n\t\"flag-gu\": {\n\t\ta: \"Guam Flag\",\n\t\tb: \"1F1EC-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t23\n\t\t]\n\t},\n\tname_badge: {\n\t\ta: \"Name Badge\",\n\t\tb: \"1F4DB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fire\",\n\t\t\t\"forbid\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t18\n\t\t]\n\t},\n\tconstruction: {\n\t\ta: \"Construction Sign\",\n\t\tb: \"1F6A7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wip\",\n\t\t\t\"progress\",\n\t\t\t\"caution\",\n\t\t\t\"warning\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t12\n\t\t]\n\t},\n\tlower_left_fountain_pen: {\n\t\ta: \"Lower Left Fountain Pen\",\n\t\tb: \"1F58B-FE0F\",\n\t\tc: \"1F58B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t29\n\t\t],\n\t\to: 7\n\t},\n\tevergreen_tree: {\n\t\ta: \"Evergreen Tree\",\n\t\tb: \"1F332\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t40\n\t\t]\n\t},\n\tcrying_cat_face: {\n\t\ta: \"Crying Cat Face\",\n\t\tb: \"1F63F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"tears\",\n\t\t\t\"weep\",\n\t\t\t\"sad\",\n\t\t\t\"cats\",\n\t\t\t\"upset\",\n\t\t\t\"cry\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t35\n\t\t]\n\t},\n\t\"flag-gw\": {\n\t\ta: \"Guinea-Bissau Flag\",\n\t\tb: \"1F1EC-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t24\n\t\t]\n\t},\n\tlower_left_ballpoint_pen: {\n\t\ta: \"Lower Left Ballpoint Pen\",\n\t\tb: \"1F58A-FE0F\",\n\t\tc: \"1F58A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t28\n\t\t],\n\t\to: 7\n\t},\n\tpouting_cat: {\n\t\ta: \"Pouting Cat Face\",\n\t\tb: \"1F63E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"cats\"\n\t\t],\n\t\tk: [\n\t\t\t31,\n\t\t\t34\n\t\t]\n\t},\n\tdeciduous_tree: {\n\t\ta: \"Deciduous Tree\",\n\t\tb: \"1F333\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t41\n\t\t]\n\t},\n\toctagonal_sign: {\n\t\ta: \"Octagonal Sign\",\n\t\tb: \"1F6D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t6\n\t\t],\n\t\to: 9\n\t},\n\tbeginner: {\n\t\ta: \"Japanese Symbol for Beginner\",\n\t\tb: \"1F530\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"badge\",\n\t\t\t\"shield\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t50\n\t\t]\n\t},\n\t\"flag-gy\": {\n\t\ta: \"Guyana Flag\",\n\t\tb: \"1F1EC-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t25\n\t\t]\n\t},\n\tlower_left_paintbrush: {\n\t\ta: \"Lower Left Paintbrush\",\n\t\tb: \"1F58C-FE0F\",\n\t\tc: \"1F58C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t30\n\t\t],\n\t\to: 7\n\t},\n\to: {\n\t\ta: \"Heavy Large Circle\",\n\t\tb: \"2B55\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"circle\",\n\t\t\t\"round\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t23\n\t\t],\n\t\to: 5\n\t},\n\tpalm_tree: {\n\t\ta: \"Palm Tree\",\n\t\tb: \"1F334\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"plant\",\n\t\t\t\"vegetable\",\n\t\t\t\"nature\",\n\t\t\t\"summer\",\n\t\t\t\"beach\",\n\t\t\t\"mojito\",\n\t\t\t\"tropical\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t42\n\t\t]\n\t},\n\tanchor: {\n\t\ta: \"Anchor\",\n\t\tb: \"2693\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ship\",\n\t\t\t\"ferry\",\n\t\t\t\"sea\",\n\t\t\t\"boat\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t12\n\t\t],\n\t\to: 4\n\t},\n\tsee_no_evil: {\n\t\ta: \"See-No-Evil Monkey\",\n\t\tb: \"1F648\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"monkey\",\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"haha\"\n\t\t],\n\t\tk: [\n\t\t\t32,\n\t\t\t43\n\t\t]\n\t},\n\tboat: {\n\t\ta: \"Sailboat\",\n\t\tb: \"26F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t48,\n\t\t\t43\n\t\t],\n\t\tn: [\n\t\t\t\"sailboat\"\n\t\t],\n\t\to: 5\n\t},\n\twhite_check_mark: {\n\t\ta: \"White Heavy Check Mark\",\n\t\tb: \"2705\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"green-square\",\n\t\t\t\"ok\",\n\t\t\t\"agree\",\n\t\t\t\"vote\",\n\t\t\t\"election\",\n\t\t\t\"answer\",\n\t\t\t\"tick\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t15\n\t\t]\n\t},\n\t\"flag-hk\": {\n\t\ta: \"Hong Kong Sar China Flag\",\n\t\tb: \"1F1ED-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t26\n\t\t]\n\t},\n\tlower_left_crayon: {\n\t\ta: \"Lower Left Crayon\",\n\t\tb: \"1F58D-FE0F\",\n\t\tc: \"1F58D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\to: 7\n\t},\n\thear_no_evil: {\n\t\ta: \"Hear-No-Evil Monkey\",\n\t\tb: \"1F649\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"monkey\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t32,\n\t\t\t44\n\t\t]\n\t},\n\tcactus: {\n\t\ta: \"Cactus\",\n\t\tb: \"1F335\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"plant\",\n\t\t\t\"nature\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t43\n\t\t]\n\t},\n\tear_of_rice: {\n\t\ta: \"Ear of Rice\",\n\t\tb: \"1F33E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t0\n\t\t]\n\t},\n\tspeak_no_evil: {\n\t\ta: \"Speak-No-Evil Monkey\",\n\t\tb: \"1F64A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"monkey\",\n\t\t\t\"animal\",\n\t\t\t\"nature\",\n\t\t\t\"omg\"\n\t\t],\n\t\tk: [\n\t\t\t32,\n\t\t\t45\n\t\t]\n\t},\n\t\"flag-hm\": {\n\t\ta: \"Heard & Mcdonald Islands Flag\",\n\t\tb: \"1F1ED-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t27\n\t\t]\n\t},\n\tballot_box_with_check: {\n\t\ta: \"Ballot Box with Check\",\n\t\tb: \"2611-FE0F\",\n\t\tc: \"2611\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ok\",\n\t\t\t\"agree\",\n\t\t\t\"confirm\",\n\t\t\t\"black-square\",\n\t\t\t\"vote\",\n\t\t\t\"election\",\n\t\t\t\"yes\",\n\t\t\t\"tick\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t22\n\t\t],\n\t\to: 1\n\t},\n\tcanoe: {\n\t\ta: \"Canoe\",\n\t\tb: \"1F6F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"boat\",\n\t\t\t\"paddle\",\n\t\t\t\"water\",\n\t\t\t\"ship\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t21\n\t\t],\n\t\to: 9\n\t},\n\tmemo: {\n\t\ta: \"Memo\",\n\t\tb: \"1F4DD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"write\",\n\t\t\t\"documents\",\n\t\t\t\"stationery\",\n\t\t\t\"pencil\",\n\t\t\t\"paper\",\n\t\t\t\"writing\",\n\t\t\t\"legal\",\n\t\t\t\"exam\",\n\t\t\t\"quiz\",\n\t\t\t\"test\",\n\t\t\t\"study\",\n\t\t\t\"compose\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t20\n\t\t],\n\t\tn: [\n\t\t\t\"pencil\"\n\t\t]\n\t},\n\therb: {\n\t\ta: \"Herb\",\n\t\tb: \"1F33F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"plant\",\n\t\t\t\"medicine\",\n\t\t\t\"weed\",\n\t\t\t\"grass\",\n\t\t\t\"lawn\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-hn\": {\n\t\ta: \"Honduras Flag\",\n\t\tb: \"1F1ED-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t28\n\t\t]\n\t},\n\theavy_check_mark: {\n\t\ta: \"Heavy Check Mark\",\n\t\tb: \"2714-FE0F\",\n\t\tc: \"2714\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ok\",\n\t\t\t\"nike\",\n\t\t\t\"answer\",\n\t\t\t\"yes\",\n\t\t\t\"tick\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t44\n\t\t],\n\t\to: 1\n\t},\n\tbriefcase: {\n\t\ta: \"Briefcase\",\n\t\tb: \"1F4BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"business\",\n\t\t\t\"documents\",\n\t\t\t\"work\",\n\t\t\t\"law\",\n\t\t\t\"legal\",\n\t\t\t\"job\",\n\t\t\t\"career\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t39\n\t\t]\n\t},\n\tspeedboat: {\n\t\ta: \"Speedboat\",\n\t\tb: \"1F6A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ship\",\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t9\n\t\t]\n\t},\n\tbaby: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F476-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F476-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F476-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F476-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F476-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f476-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Baby\",\n\t\tb: \"1F476\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"child\",\n\t\t\t\"boy\",\n\t\t\t\"girl\",\n\t\t\t\"toddler\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t10\n\t\t]\n\t},\n\theavy_multiplication_x: {\n\t\ta: \"Heavy Multiplication X\",\n\t\tb: \"2716-FE0F\",\n\t\tc: \"2716\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"math\",\n\t\t\t\"calculation\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t45\n\t\t],\n\t\to: 1\n\t},\n\tchild: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D2-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D2-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D2-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D2-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D2-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d2-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Child\",\n\t\tb: \"1F9D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t4\n\t\t],\n\t\to: 10\n\t},\n\tshamrock: {\n\t\ta: \"Shamrock\",\n\t\tb: \"2618-FE0F\",\n\t\tc: \"2618\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"irish\",\n\t\t\t\"clover\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t25\n\t\t],\n\t\to: 4\n\t},\n\tpassenger_ship: {\n\t\ta: \"Passenger Ship\",\n\t\tb: \"1F6F3-FE0F\",\n\t\tc: \"1F6F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"yacht\",\n\t\t\t\"cruise\",\n\t\t\t\"ferry\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-hr\": {\n\t\ta: \"Croatia Flag\",\n\t\tb: \"1F1ED-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t29\n\t\t]\n\t},\n\tfile_folder: {\n\t\ta: \"File Folder\",\n\t\tb: \"1F4C1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"business\",\n\t\t\t\"office\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t44\n\t\t]\n\t},\n\tx: {\n\t\ta: \"Cross Mark\",\n\t\tb: \"274C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"no\",\n\t\t\t\"delete\",\n\t\t\t\"remove\",\n\t\t\t\"cancel\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t1\n\t\t]\n\t},\n\tfour_leaf_clover: {\n\t\ta: \"Four Leaf Clover\",\n\t\tb: \"1F340\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vegetable\",\n\t\t\t\"plant\",\n\t\t\t\"nature\",\n\t\t\t\"lucky\",\n\t\t\t\"irish\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t2\n\t\t]\n\t},\n\topen_file_folder: {\n\t\ta: \"Open File Folder\",\n\t\tb: \"1F4C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"load\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t45\n\t\t]\n\t},\n\tboy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F466-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F466-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F466-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F466-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F466-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f466-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Boy\",\n\t\tb: \"1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"man\",\n\t\t\t\"male\",\n\t\t\t\"guy\",\n\t\t\t\"teenager\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t42\n\t\t]\n\t},\n\tferry: {\n\t\ta: \"Ferry\",\n\t\tb: \"26F4-FE0F\",\n\t\tc: \"26F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"boat\",\n\t\t\t\"ship\",\n\t\t\t\"yacht\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t42\n\t\t],\n\t\to: 5\n\t},\n\t\"flag-ht\": {\n\t\ta: \"Haiti Flag\",\n\t\tb: \"1F1ED-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t30\n\t\t]\n\t},\n\tgirl: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F467-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F467-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F467-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F467-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3fe.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F467-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f467-1f3ff.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Girl\",\n\t\tb: \"1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"female\",\n\t\t\t\"woman\",\n\t\t\t\"teenager\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t48\n\t\t]\n\t},\n\tnegative_squared_cross_mark: {\n\t\ta: \"Negative Squared Cross Mark\",\n\t\tb: \"274E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"x\",\n\t\t\t\"green-square\",\n\t\t\t\"no\",\n\t\t\t\"deny\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-hu\": {\n\t\ta: \"Hungary Flag\",\n\t\tb: \"1F1ED-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t31\n\t\t]\n\t},\n\tcard_index_dividers: {\n\t\ta: \"Card Index Dividers\",\n\t\tb: \"1F5C2-FE0F\",\n\t\tc: \"1F5C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"organizing\",\n\t\t\t\"business\",\n\t\t\t\"stationery\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t4\n\t\t],\n\t\to: 7\n\t},\n\tmaple_leaf: {\n\t\ta: \"Maple Leaf\",\n\t\tb: \"1F341\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"vegetable\",\n\t\t\t\"ca\",\n\t\t\t\"fall\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t3\n\t\t]\n\t},\n\tmotor_boat: {\n\t\ta: \"Motor Boat\",\n\t\tb: \"1F6E5-FE0F\",\n\t\tc: \"1F6E5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"ship\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t13\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-ic\": {\n\t\ta: \"Canary Islands Flag\",\n\t\tb: \"1F1EE-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t32\n\t\t]\n\t},\n\tfallen_leaf: {\n\t\ta: \"Fallen Leaf\",\n\t\tb: \"1F342\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"vegetable\",\n\t\t\t\"leaves\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t4\n\t\t]\n\t},\n\tadult: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D1-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3fb.png\",\n\t\t\t\tsheet_x: 42,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D1-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D1-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D1-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D1-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d1-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Adult\",\n\t\tb: \"1F9D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t42,\n\t\t\t50\n\t\t],\n\t\to: 10\n\t},\n\tship: {\n\t\ta: \"Ship\",\n\t\tb: \"1F6A2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"titanic\",\n\t\t\t\"deploy\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t42\n\t\t]\n\t},\n\theavy_plus_sign: {\n\t\ta: \"Heavy Plus Sign\",\n\t\tb: \"2795\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"math\",\n\t\t\t\"calculation\",\n\t\t\t\"addition\",\n\t\t\t\"more\",\n\t\t\t\"increase\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t9\n\t\t]\n\t},\n\tdate: {\n\t\ta: \"Calendar\",\n\t\tb: \"1F4C5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"calendar\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t48\n\t\t]\n\t},\n\tman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Man\",\n\t\tb: \"1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mustache\",\n\t\t\t\"father\",\n\t\t\t\"dad\",\n\t\t\t\"guy\",\n\t\t\t\"classy\",\n\t\t\t\"sir\",\n\t\t\t\"moustache\"\n\t\t],\n\t\tk: [\n\t\t\t18,\n\t\t\t11\n\t\t]\n\t},\n\t\"flag-id\": {\n\t\ta: \"Indonesia Flag\",\n\t\tb: \"1F1EE-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t33\n\t\t]\n\t},\n\tleaves: {\n\t\ta: \"Leaf Fluttering in Wind\",\n\t\tb: \"1F343\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"plant\",\n\t\t\t\"tree\",\n\t\t\t\"vegetable\",\n\t\t\t\"grass\",\n\t\t\t\"lawn\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t7,\n\t\t\t5\n\t\t]\n\t},\n\theavy_minus_sign: {\n\t\ta: \"Heavy Minus Sign\",\n\t\tb: \"2796\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"math\",\n\t\t\t\"calculation\",\n\t\t\t\"subtract\",\n\t\t\t\"less\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t10\n\t\t]\n\t},\n\tcalendar: {\n\t\ta: \"Tear-off Calendar\",\n\t\tb: \"1F4C6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"schedule\",\n\t\t\t\"date\",\n\t\t\t\"planning\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t49\n\t\t]\n\t},\n\tairplane: {\n\t\ta: \"Airplane\",\n\t\tb: \"2708-FE0F\",\n\t\tc: \"2708\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\",\n\t\t\t\"flight\",\n\t\t\t\"fly\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t16\n\t\t],\n\t\to: 1\n\t},\n\tspiral_note_pad: {\n\t\ta: \"Spiral Note Pad\",\n\t\tb: \"1F5D2-FE0F\",\n\t\tc: \"1F5D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t8\n\t\t],\n\t\to: 7\n\t},\n\theavy_division_sign: {\n\t\ta: \"Heavy Division Sign\",\n\t\tb: \"2797\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"divide\",\n\t\t\t\"math\",\n\t\t\t\"calculation\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t11\n\t\t]\n\t},\n\tsmall_airplane: {\n\t\ta: \"Small Airplane\",\n\t\tb: \"1F6E9-FE0F\",\n\t\tc: \"1F6E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"flight\",\n\t\t\t\"transportation\",\n\t\t\t\"fly\",\n\t\t\t\"vehicle\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t14\n\t\t],\n\t\to: 7\n\t},\n\twoman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Woman\",\n\t\tb: \"1F469\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"female\",\n\t\t\t\"girls\",\n\t\t\t\"lady\"\n\t\t],\n\t\tk: [\n\t\t\t20,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-ie\": {\n\t\ta: \"Ireland Flag\",\n\t\tb: \"1F1EE-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t34\n\t\t]\n\t},\n\tcurly_loop: {\n\t\ta: \"Curly Loop\",\n\t\tb: \"27B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"scribble\",\n\t\t\t\"draw\",\n\t\t\t\"shape\",\n\t\t\t\"squiggle\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t13\n\t\t]\n\t},\n\t\"flag-il\": {\n\t\ta: \"Israel Flag\",\n\t\tb: \"1F1EE-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t35\n\t\t]\n\t},\n\tairplane_departure: {\n\t\ta: \"Airplane Departure\",\n\t\tb: \"1F6EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t15\n\t\t],\n\t\to: 7\n\t},\n\tspiral_calendar_pad: {\n\t\ta: \"Spiral Calendar Pad\",\n\t\tb: \"1F5D3-FE0F\",\n\t\tc: \"1F5D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t9\n\t\t],\n\t\to: 7\n\t},\n\tolder_adult: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D3-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D3-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D3-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D3-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D3-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d3-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Older Adult\",\n\t\tb: \"1F9D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t10\n\t\t],\n\t\to: 10\n\t},\n\tairplane_arriving: {\n\t\ta: \"Airplane Arriving\",\n\t\tb: \"1F6EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t16\n\t\t],\n\t\to: 7\n\t},\n\tcard_index: {\n\t\ta: \"Card Index\",\n\t\tb: \"1F4C7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"business\",\n\t\t\t\"stationery\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t50\n\t\t]\n\t},\n\tloop: {\n\t\ta: \"Double Curly Loop\",\n\t\tb: \"27BF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"tape\",\n\t\t\t\"cassette\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t14\n\t\t]\n\t},\n\tolder_man: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F474-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F474-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F474-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F474-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F474-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f474-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Older Man\",\n\t\tb: \"1F474\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"human\",\n\t\t\t\"male\",\n\t\t\t\"men\",\n\t\t\t\"old\",\n\t\t\t\"elder\",\n\t\t\t\"senior\"\n\t\t],\n\t\tk: [\n\t\t\t21,\n\t\t\t50\n\t\t]\n\t},\n\t\"flag-im\": {\n\t\ta: \"Isle of Man Flag\",\n\t\tb: \"1F1EE-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-in\": {\n\t\ta: \"India Flag\",\n\t\tb: \"1F1EE-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t37\n\t\t]\n\t},\n\tchart_with_upwards_trend: {\n\t\ta: \"Chart with Upwards Trend\",\n\t\tb: \"1F4C8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\",\n\t\t\t\"recovery\",\n\t\t\t\"business\",\n\t\t\t\"economics\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"good\",\n\t\t\t\"success\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t51\n\t\t]\n\t},\n\tpart_alternation_mark: {\n\t\ta: \"Part Alternation Mark\",\n\t\tb: \"303D-FE0F\",\n\t\tc: \"303D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\",\n\t\t\t\"business\",\n\t\t\t\"economics\",\n\t\t\t\"bad\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t25\n\t\t],\n\t\to: 3\n\t},\n\tseat: {\n\t\ta: \"Seat\",\n\t\tb: \"1F4BA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sit\",\n\t\t\t\"airplane\",\n\t\t\t\"transport\",\n\t\t\t\"bus\",\n\t\t\t\"flight\",\n\t\t\t\"fly\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t37\n\t\t]\n\t},\n\tolder_woman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F475-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F475-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F475-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F475-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F475-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f475-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Older Woman\",\n\t\tb: \"1F475\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"human\",\n\t\t\t\"female\",\n\t\t\t\"women\",\n\t\t\t\"lady\",\n\t\t\t\"old\",\n\t\t\t\"elder\",\n\t\t\t\"senior\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t4\n\t\t]\n\t},\n\teight_spoked_asterisk: {\n\t\ta: \"Eight Spoked Asterisk\",\n\t\tb: \"2733-FE0F\",\n\t\tc: \"2733\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"star\",\n\t\t\t\"sparkle\",\n\t\t\t\"green-square\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t49\n\t\t],\n\t\to: 1\n\t},\n\tchart_with_downwards_trend: {\n\t\ta: \"Chart with Downwards Trend\",\n\t\tb: \"1F4C9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\",\n\t\t\t\"recession\",\n\t\t\t\"business\",\n\t\t\t\"economics\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"bad\",\n\t\t\t\"failure\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t0\n\t\t]\n\t},\n\t\"flag-io\": {\n\t\ta: \"British Indian Ocean Territory Flag\",\n\t\tb: \"1F1EE-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t38\n\t\t]\n\t},\n\t\"male-doctor\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FB-200D-2695\",\n\t\t\t\timage: \"1f468-1f3fb-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FC-200D-2695\",\n\t\t\t\timage: \"1f468-1f3fc-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FD-200D-2695\",\n\t\t\t\timage: \"1f468-1f3fd-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FE-200D-2695\",\n\t\t\t\timage: \"1f468-1f3fe-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FF-200D-2695\",\n\t\t\t\timage: \"1f468-1f3ff-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Doctor\",\n\t\tb: \"1F468-200D-2695-FE0F\",\n\t\tc: \"1F468-200D-2695\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t43\n\t\t]\n\t},\n\thelicopter: {\n\t\ta: \"Helicopter\",\n\t\tb: \"1F681\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"fly\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t9\n\t\t]\n\t},\n\t\"female-doctor\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FB-200D-2695\",\n\t\t\t\timage: \"1f469-1f3fb-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FC-200D-2695\",\n\t\t\t\timage: \"1f469-1f3fc-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FD-200D-2695\",\n\t\t\t\timage: \"1f469-1f3fd-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FE-200D-2695\",\n\t\t\t\timage: \"1f469-1f3fe-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-2695-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FF-200D-2695\",\n\t\t\t\timage: \"1f469-1f3ff-200d-2695-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Doctor\",\n\t\tb: \"1F469-200D-2695-FE0F\",\n\t\tc: \"1F469-200D-2695\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t1\n\t\t]\n\t},\n\tsuspension_railway: {\n\t\ta: \"Suspension Railway\",\n\t\tb: \"1F69F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"vehicle\",\n\t\t\t\"transportation\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t39\n\t\t]\n\t},\n\tbar_chart: {\n\t\ta: \"Bar Chart\",\n\t\tb: \"1F4CA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"graph\",\n\t\t\t\"presentation\",\n\t\t\t\"stats\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-iq\": {\n\t\ta: \"Iraq Flag\",\n\t\tb: \"1F1EE-1F1F6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t39\n\t\t]\n\t},\n\teight_pointed_black_star: {\n\t\ta: \"Eight Pointed Black Star\",\n\t\tb: \"2734-FE0F\",\n\t\tc: \"2734\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"orange-square\",\n\t\t\t\"shape\",\n\t\t\t\"polygon\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t50\n\t\t],\n\t\to: 1\n\t},\n\tmountain_cableway: {\n\t\ta: \"Mountain Cableway\",\n\t\tb: \"1F6A0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"ski\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t40\n\t\t]\n\t},\n\t\"male-student\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f393.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Student\",\n\t\tb: \"1F468-200D-1F393\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t14\n\t\t]\n\t},\n\tclipboard: {\n\t\ta: \"Clipboard\",\n\t\tb: \"1F4CB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"documents\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-ir\": {\n\t\ta: \"Iran Flag\",\n\t\tb: \"1F1EE-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t40\n\t\t]\n\t},\n\tsparkle: {\n\t\ta: \"Sparkle\",\n\t\tb: \"2747-FE0F\",\n\t\tc: \"2747\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stars\",\n\t\t\t\"green-square\",\n\t\t\t\"awesome\",\n\t\t\t\"good\",\n\t\t\t\"fireworks\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t0\n\t\t],\n\t\to: 1\n\t},\n\t\"female-student\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F393\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f393.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Student\",\n\t\tb: \"1F469-200D-1F393\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t29\n\t\t]\n\t},\n\tpushpin: {\n\t\ta: \"Pushpin\",\n\t\tb: \"1F4CC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"mark\",\n\t\t\t\"here\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t3\n\t\t]\n\t},\n\taerial_tramway: {\n\t\ta: \"Aerial Tramway\",\n\t\tb: \"1F6A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"transportation\",\n\t\t\t\"vehicle\",\n\t\t\t\"ski\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-is\": {\n\t\ta: \"Iceland Flag\",\n\t\tb: \"1F1EE-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t41\n\t\t]\n\t},\n\tbangbang: {\n\t\ta: \"Double Exclamation Mark\",\n\t\tb: \"203C-FE0F\",\n\t\tc: \"203C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"exclamation\",\n\t\t\t\"surprise\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t29\n\t\t],\n\t\to: 1\n\t},\n\tinterrobang: {\n\t\ta: \"Exclamation Question Mark\",\n\t\tb: \"2049-FE0F\",\n\t\tc: \"2049\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wat\",\n\t\t\t\"punctuation\",\n\t\t\t\"surprise\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t30\n\t\t],\n\t\to: 3\n\t},\n\tsatellite: {\n\t\ta: \"Satellite\",\n\t\tb: \"1F6F0-FE0F\",\n\t\tc: \"1F6F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"communication\",\n\t\t\t\"future\",\n\t\t\t\"radio\",\n\t\t\t\"space\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t17\n\t\t],\n\t\to: 7\n\t},\n\tit: {\n\t\ta: \"Italy Flag\",\n\t\tb: \"1F1EE-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"italy\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t2,\n\t\t\t42\n\t\t],\n\t\tn: [\n\t\t\t\"flag-it\"\n\t\t]\n\t},\n\t\"male-teacher\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Teacher\",\n\t\tb: \"1F468-200D-1F3EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t32\n\t\t]\n\t},\n\tround_pushpin: {\n\t\ta: \"Round Pushpin\",\n\t\tb: \"1F4CD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"location\",\n\t\t\t\"map\",\n\t\t\t\"here\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-je\": {\n\t\ta: \"Jersey Flag\",\n\t\tb: \"1F1EF-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t43\n\t\t]\n\t},\n\tquestion: {\n\t\ta: \"Black Question Mark Ornament\",\n\t\tb: \"2753\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"doubt\",\n\t\t\t\"confused\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t3\n\t\t]\n\t},\n\trocket: {\n\t\ta: \"Rocket\",\n\t\tb: \"1F680\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"launch\",\n\t\t\t\"ship\",\n\t\t\t\"staffmode\",\n\t\t\t\"NASA\",\n\t\t\t\"outer space\",\n\t\t\t\"outer_space\",\n\t\t\t\"fly\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t8\n\t\t]\n\t},\n\t\"female-teacher\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F3EB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f3eb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Teacher\",\n\t\tb: \"1F469-200D-1F3EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t47\n\t\t]\n\t},\n\tpaperclip: {\n\t\ta: \"Paperclip\",\n\t\tb: \"1F4CE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"documents\",\n\t\t\t\"stationery\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t5\n\t\t]\n\t},\n\tlinked_paperclips: {\n\t\ta: \"Linked Paperclips\",\n\t\tb: \"1F587-FE0F\",\n\t\tc: \"1F587\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t27\n\t\t],\n\t\to: 7\n\t},\n\tflying_saucer: {\n\t\ta: \"Flying Saucer\",\n\t\tb: \"1F6F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t23\n\t\t],\n\t\to: 10\n\t},\n\t\"male-judge\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FB-200D-2696\",\n\t\t\t\timage: \"1f468-1f3fb-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FC-200D-2696\",\n\t\t\t\timage: \"1f468-1f3fc-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FD-200D-2696\",\n\t\t\t\timage: \"1f468-1f3fd-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FE-200D-2696\",\n\t\t\t\timage: \"1f468-1f3fe-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FF-200D-2696\",\n\t\t\t\timage: \"1f468-1f3ff-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Judge\",\n\t\tb: \"1F468-200D-2696-FE0F\",\n\t\tc: \"1F468-200D-2696\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t49\n\t\t]\n\t},\n\tgrey_question: {\n\t\ta: \"White Question Mark Ornament\",\n\t\tb: \"2754\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"doubts\",\n\t\t\t\"gray\",\n\t\t\t\"huh\",\n\t\t\t\"confused\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-jm\": {\n\t\ta: \"Jamaica Flag\",\n\t\tb: \"1F1EF-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t44\n\t\t]\n\t},\n\tbellhop_bell: {\n\t\ta: \"Bellhop Bell\",\n\t\tb: \"1F6CE-FE0F\",\n\t\tc: \"1F6CE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"service\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t3\n\t\t],\n\t\to: 7\n\t},\n\tstraight_ruler: {\n\t\ta: \"Straight Ruler\",\n\t\tb: \"1F4CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"calculate\",\n\t\t\t\"length\",\n\t\t\t\"math\",\n\t\t\t\"school\",\n\t\t\t\"drawing\",\n\t\t\t\"architect\",\n\t\t\t\"sketch\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-jo\": {\n\t\ta: \"Jordan Flag\",\n\t\tb: \"1F1EF-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t45\n\t\t]\n\t},\n\t\"female-judge\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FB-200D-2696\",\n\t\t\t\timage: \"1f469-1f3fb-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FC-200D-2696\",\n\t\t\t\timage: \"1f469-1f3fc-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FD-200D-2696\",\n\t\t\t\timage: \"1f469-1f3fd-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FE-200D-2696\",\n\t\t\t\timage: \"1f469-1f3fe-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-2696-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FF-200D-2696\",\n\t\t\t\timage: \"1f469-1f3ff-200d-2696-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Judge\",\n\t\tb: \"1F469-200D-2696-FE0F\",\n\t\tc: \"1F469-200D-2696\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t7\n\t\t]\n\t},\n\tgrey_exclamation: {\n\t\ta: \"White Exclamation Mark Ornament\",\n\t\tb: \"2755\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"surprise\",\n\t\t\t\"punctuation\",\n\t\t\t\"gray\",\n\t\t\t\"wow\",\n\t\t\t\"warning\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t5\n\t\t]\n\t},\n\tdoor: {\n\t\ta: \"Door\",\n\t\tb: \"1F6AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"house\",\n\t\t\t\"entry\",\n\t\t\t\"exit\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t15\n\t\t]\n\t},\n\t\"male-farmer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f33e.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Farmer\",\n\t\tb: \"1F468-200D-1F33E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t2\n\t\t]\n\t},\n\tjp: {\n\t\ta: \"Japan Flag\",\n\t\tb: \"1F1EF-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"nation\",\n\t\t\t\"flag\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t2,\n\t\t\t46\n\t\t],\n\t\tn: [\n\t\t\t\"flag-jp\"\n\t\t]\n\t},\n\ttriangular_ruler: {\n\t\ta: \"Triangular Ruler\",\n\t\tb: \"1F4D0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"math\",\n\t\t\t\"architect\",\n\t\t\t\"sketch\"\n\t\t],\n\t\tk: [\n\t\t\t26,\n\t\t\t7\n\t\t]\n\t},\n\texclamation: {\n\t\ta: \"Heavy Exclamation Mark Symbol\",\n\t\tb: \"2757\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"heavy_exclamation_mark\",\n\t\t\t\"danger\",\n\t\t\t\"surprise\",\n\t\t\t\"punctuation\",\n\t\t\t\"wow\",\n\t\t\t\"warning\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t6\n\t\t],\n\t\tn: [\n\t\t\t\"heavy_exclamation_mark\"\n\t\t],\n\t\to: 5\n\t},\n\tbed: {\n\t\ta: \"Bed\",\n\t\tb: \"1F6CF-FE0F\",\n\t\tc: \"1F6CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sleep\",\n\t\t\t\"rest\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t4\n\t\t],\n\t\to: 7\n\t},\n\t\"female-farmer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F33E\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f33e.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Farmer\",\n\t\tb: \"1F469-200D-1F33E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t17\n\t\t]\n\t},\n\tscissors: {\n\t\ta: \"Black Scissors\",\n\t\tb: \"2702-FE0F\",\n\t\tc: \"2702\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"stationery\",\n\t\t\t\"cut\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t14\n\t\t],\n\t\to: 1\n\t},\n\twavy_dash: {\n\t\ta: \"Wavy Dash\",\n\t\tb: \"3030-FE0F\",\n\t\tc: \"3030\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"draw\",\n\t\t\t\"line\",\n\t\t\t\"moustache\",\n\t\t\t\"mustache\",\n\t\t\t\"squiggle\",\n\t\t\t\"scribble\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t24\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-ke\": {\n\t\ta: \"Kenya Flag\",\n\t\tb: \"1F1F0-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t47\n\t\t]\n\t},\n\t\"flag-kg\": {\n\t\ta: \"Kyrgyzstan Flag\",\n\t\tb: \"1F1F0-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t48\n\t\t]\n\t},\n\tcouch_and_lamp: {\n\t\ta: \"Couch and Lamp\",\n\t\tb: \"1F6CB-FE0F\",\n\t\tc: \"1F6CB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"read\",\n\t\t\t\"chill\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t47\n\t\t],\n\t\to: 7\n\t},\n\t\"male-cook\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f373.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Cook\",\n\t\tb: \"1F468-200D-1F373\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t8\n\t\t]\n\t},\n\tcard_file_box: {\n\t\ta: \"Card File Box\",\n\t\tb: \"1F5C3-FE0F\",\n\t\tc: \"1F5C3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"business\",\n\t\t\t\"stationery\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t5\n\t\t],\n\t\to: 7\n\t},\n\tcopyright: {\n\t\ta: \"Copyright Sign\",\n\t\tb: \"00A9-FE0F\",\n\t\tc: \"00A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: false,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"ip\",\n\t\t\t\"license\",\n\t\t\t\"circle\",\n\t\t\t\"law\",\n\t\t\t\"legal\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t12\n\t\t],\n\t\to: 1\n\t},\n\tfile_cabinet: {\n\t\ta: \"File Cabinet\",\n\t\tb: \"1F5C4-FE0F\",\n\t\tc: \"1F5C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"filing\",\n\t\t\t\"organizing\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t6\n\t\t],\n\t\to: 7\n\t},\n\tregistered: {\n\t\ta: \"Registered Sign\",\n\t\tb: \"00AE-FE0F\",\n\t\tc: \"00AE\",\n\t\td: true,\n\t\te: true,\n\t\tf: false,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t13\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-kh\": {\n\t\ta: \"Cambodia Flag\",\n\t\tb: \"1F1F0-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t49\n\t\t]\n\t},\n\t\"female-cook\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F373\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f373.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Cook\",\n\t\tb: \"1F469-200D-1F373\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t23\n\t\t]\n\t},\n\ttoilet: {\n\t\ta: \"Toilet\",\n\t\tb: \"1F6BD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"restroom\",\n\t\t\t\"wc\",\n\t\t\t\"washroom\",\n\t\t\t\"bathroom\",\n\t\t\t\"potty\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t33\n\t\t]\n\t},\n\twastebasket: {\n\t\ta: \"Wastebasket\",\n\t\tb: \"1F5D1-FE0F\",\n\t\tc: \"1F5D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"bin\",\n\t\t\t\"trash\",\n\t\t\t\"rubbish\",\n\t\t\t\"garbage\",\n\t\t\t\"toss\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t7\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-ki\": {\n\t\ta: \"Kiribati Flag\",\n\t\tb: \"1F1F0-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t50\n\t\t]\n\t},\n\tshower: {\n\t\ta: \"Shower\",\n\t\tb: \"1F6BF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"clean\",\n\t\t\t\"water\",\n\t\t\t\"bathroom\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t35\n\t\t]\n\t},\n\t\"male-mechanic\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f527.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Mechanic\",\n\t\tb: \"1F468-200D-1F527\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t19\n\t\t]\n\t},\n\ttm: {\n\t\ta: \"Trade Mark Sign\",\n\t\tb: \"2122-FE0F\",\n\t\tc: \"2122\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"trademark\",\n\t\t\t\"brand\",\n\t\t\t\"law\",\n\t\t\t\"legal\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t31\n\t\t],\n\t\to: 1\n\t},\n\thash: {\n\t\ta: \"Hash Key\",\n\t\tb: \"0023-FE0F-20E3\",\n\t\tc: \"0023-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"symbol\",\n\t\t\t\"blue-square\",\n\t\t\t\"twitter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t0\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-km\": {\n\t\ta: \"Comoros Flag\",\n\t\tb: \"1F1F0-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t2,\n\t\t\t51\n\t\t]\n\t},\n\tbathtub: {\n\t\ta: \"Bathtub\",\n\t\tb: \"1F6C1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"clean\",\n\t\t\t\"shower\",\n\t\t\t\"bathroom\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t42\n\t\t]\n\t},\n\t\"female-mechanic\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F527\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f527.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Mechanic\",\n\t\tb: \"1F469-200D-1F527\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t29\n\t\t]\n\t},\n\tlock: {\n\t\ta: \"Lock\",\n\t\tb: \"1F512\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"security\",\n\t\t\t\"password\",\n\t\t\t\"padlock\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t20\n\t\t]\n\t},\n\t\"male-factory-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Factory Worker\",\n\t\tb: \"1F468-200D-1F3ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t38\n\t\t]\n\t},\n\t\"flag-kn\": {\n\t\ta: \"St. Kitts & Nevis Flag\",\n\t\tb: \"1F1F0-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t0\n\t\t]\n\t},\n\thourglass: {\n\t\ta: \"Hourglass\",\n\t\tb: \"231B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"clock\",\n\t\t\t\"oldschool\",\n\t\t\t\"limit\",\n\t\t\t\"exam\",\n\t\t\t\"quiz\",\n\t\t\t\"test\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t42\n\t\t],\n\t\to: 1\n\t},\n\tkeycap_star: {\n\t\ta: \"Keycap Star\",\n\t\tb: \"002A-FE0F-20E3\",\n\t\tc: \"002A-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t0,\n\t\t\t1\n\t\t],\n\t\to: 3\n\t},\n\tunlock: {\n\t\ta: \"Open Lock\",\n\t\tb: \"1F513\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"privacy\",\n\t\t\t\"security\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t21\n\t\t]\n\t},\n\t\"flag-kp\": {\n\t\ta: \"North Korea Flag\",\n\t\tb: \"1F1F0-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t1\n\t\t]\n\t},\n\t\"female-factory-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F3ED\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f3ed.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Factory Worker\",\n\t\tb: \"1F469-200D-1F3ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t1\n\t\t]\n\t},\n\tzero: {\n\t\ta: \"Keycap 0\",\n\t\tb: \"0030-FE0F-20E3\",\n\t\tc: \"0030-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"0\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\",\n\t\t\t\"null\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t2\n\t\t],\n\t\to: 3\n\t},\n\tlock_with_ink_pen: {\n\t\ta: \"Lock with Ink Pen\",\n\t\tb: \"1F50F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"security\",\n\t\t\t\"secret\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t17\n\t\t]\n\t},\n\thourglass_flowing_sand: {\n\t\ta: \"Hourglass with Flowing Sand\",\n\t\tb: \"23F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"oldschool\",\n\t\t\t\"time\",\n\t\t\t\"countdown\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t3\n\t\t]\n\t},\n\tone: {\n\t\ta: \"Keycap 1\",\n\t\tb: \"0031-FE0F-20E3\",\n\t\tc: \"0031-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"numbers\",\n\t\t\t\"1\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t3\n\t\t],\n\t\to: 3\n\t},\n\tkr: {\n\t\ta: \"South Korea Flag\",\n\t\tb: \"1F1F0-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"south\",\n\t\t\t\"korea\",\n\t\t\t\"nation\",\n\t\t\t\"flag\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t3,\n\t\t\t2\n\t\t],\n\t\tn: [\n\t\t\t\"flag-kr\"\n\t\t]\n\t},\n\twatch: {\n\t\ta: \"Watch\",\n\t\tb: \"231A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"accessories\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t41\n\t\t],\n\t\to: 1\n\t},\n\t\"male-office-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Office Worker\",\n\t\tb: \"1F468-200D-1F4BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t13\n\t\t]\n\t},\n\tclosed_lock_with_key: {\n\t\ta: \"Closed Lock with Key\",\n\t\tb: \"1F510\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"security\",\n\t\t\t\"privacy\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t18\n\t\t]\n\t},\n\t\"female-office-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F4BC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f4bc.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Office Worker\",\n\t\tb: \"1F469-200D-1F4BC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t23\n\t\t]\n\t},\n\ttwo: {\n\t\ta: \"Keycap 2\",\n\t\tb: \"0032-FE0F-20E3\",\n\t\tc: \"0032-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"numbers\",\n\t\t\t\"2\",\n\t\t\t\"prime\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t4\n\t\t],\n\t\to: 3\n\t},\n\talarm_clock: {\n\t\ta: \"Alarm Clock\",\n\t\tb: \"23F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"wake\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t0\n\t\t]\n\t},\n\tkey: {\n\t\ta: \"Key\",\n\t\tb: \"1F511\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"lock\",\n\t\t\t\"door\",\n\t\t\t\"password\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t19\n\t\t]\n\t},\n\t\"flag-kw\": {\n\t\ta: \"Kuwait Flag\",\n\t\tb: \"1F1F0-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t3\n\t\t]\n\t},\n\tstopwatch: {\n\t\ta: \"Stopwatch\",\n\t\tb: \"23F1-FE0F\",\n\t\tc: \"23F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"deadline\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t1\n\t\t]\n\t},\n\t\"male-scientist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f52c.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Scientist\",\n\t\tb: \"1F468-200D-1F52C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t25\n\t\t]\n\t},\n\tthree: {\n\t\ta: \"Keycap 3\",\n\t\tb: \"0033-FE0F-20E3\",\n\t\tc: \"0033-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"3\",\n\t\t\t\"numbers\",\n\t\t\t\"prime\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t5\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-ky\": {\n\t\ta: \"Cayman Islands Flag\",\n\t\tb: \"1F1F0-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t4\n\t\t]\n\t},\n\told_key: {\n\t\ta: \"Old Key\",\n\t\tb: \"1F5DD-FE0F\",\n\t\tc: \"1F5DD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"lock\",\n\t\t\t\"door\",\n\t\t\t\"password\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t11\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-kz\": {\n\t\ta: \"Kazakhstan Flag\",\n\t\tb: \"1F1F0-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t5\n\t\t]\n\t},\n\thammer: {\n\t\ta: \"Hammer\",\n\t\tb: \"1F528\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"build\",\n\t\t\t\"create\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t42\n\t\t]\n\t},\n\t\"female-scientist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F52C\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f52c.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Scientist\",\n\t\tb: \"1F469-200D-1F52C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t35\n\t\t]\n\t},\n\ttimer_clock: {\n\t\ta: \"Timer Clock\",\n\t\tb: \"23F2-FE0F\",\n\t\tc: \"23F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"alarm\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t2\n\t\t]\n\t},\n\tfour: {\n\t\ta: \"Keycap 4\",\n\t\tb: \"0034-FE0F-20E3\",\n\t\tc: \"0034-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"4\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t6\n\t\t],\n\t\to: 3\n\t},\n\t\"male-technologist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Technologist\",\n\t\tb: \"1F468-200D-1F4BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t7\n\t\t]\n\t},\n\tmantelpiece_clock: {\n\t\ta: \"Mantelpiece Clock\",\n\t\tb: \"1F570-FE0F\",\n\t\tc: \"1F570\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"time\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t43\n\t\t],\n\t\to: 7\n\t},\n\tfive: {\n\t\ta: \"Keycap 5\",\n\t\tb: \"0035-FE0F-20E3\",\n\t\tc: \"0035-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"5\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\",\n\t\t\t\"prime\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t7\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-la\": {\n\t\ta: \"Laos Flag\",\n\t\tb: \"1F1F1-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t6\n\t\t]\n\t},\n\tpick: {\n\t\ta: \"Pick\",\n\t\tb: \"26CF-FE0F\",\n\t\tc: \"26CF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"dig\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t32\n\t\t],\n\t\to: 5\n\t},\n\t\"flag-lb\": {\n\t\ta: \"Lebanon Flag\",\n\t\tb: \"1F1F1-1F1E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t7\n\t\t]\n\t},\n\tclock12: {\n\t\ta: \"Clock Face Twelve Oclock\",\n\t\tb: \"1F55B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"noon\",\n\t\t\t\"midnight\",\n\t\t\t\"midday\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t29\n\t\t]\n\t},\n\thammer_and_pick: {\n\t\ta: \"Hammer and Pick\",\n\t\tb: \"2692-FE0F\",\n\t\tc: \"2692\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"build\",\n\t\t\t\"create\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t11\n\t\t],\n\t\to: 4\n\t},\n\tsix: {\n\t\ta: \"Keycap 6\",\n\t\tb: \"0036-FE0F-20E3\",\n\t\tc: \"0036-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"6\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t8\n\t\t],\n\t\to: 3\n\t},\n\t\"female-technologist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F4BB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f4bb.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Technologist\",\n\t\tb: \"1F469-200D-1F4BB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t17\n\t\t]\n\t},\n\thammer_and_wrench: {\n\t\ta: \"Hammer and Wrench\",\n\t\tb: \"1F6E0-FE0F\",\n\t\tc: \"1F6E0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"build\",\n\t\t\t\"create\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t8\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-lc\": {\n\t\ta: \"St. Lucia Flag\",\n\t\tb: \"1F1F1-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t8\n\t\t]\n\t},\n\tclock1230: {\n\t\ta: \"Clock Face Twelve-Thirty\",\n\t\tb: \"1F567\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t41\n\t\t]\n\t},\n\tseven: {\n\t\ta: \"Keycap 7\",\n\t\tb: \"0037-FE0F-20E3\",\n\t\tc: \"0037-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"7\",\n\t\t\t\"numbers\",\n\t\t\t\"blue-square\",\n\t\t\t\"prime\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t9\n\t\t],\n\t\to: 3\n\t},\n\t\"male-singer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Singer\",\n\t\tb: \"1F468-200D-1F3A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t20\n\t\t]\n\t},\n\teight: {\n\t\ta: \"Keycap 8\",\n\t\tb: \"0038-FE0F-20E3\",\n\t\tc: \"0038-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"8\",\n\t\t\t\"blue-square\",\n\t\t\t\"numbers\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t10\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-li\": {\n\t\ta: \"Liechtenstein Flag\",\n\t\tb: \"1F1F1-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t9\n\t\t]\n\t},\n\tdagger_knife: {\n\t\ta: \"Dagger Knife\",\n\t\tb: \"1F5E1-FE0F\",\n\t\tc: \"1F5E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t13\n\t\t],\n\t\to: 7\n\t},\n\tclock1: {\n\t\ta: \"Clock Face One Oclock\",\n\t\tb: \"1F550\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t18\n\t\t]\n\t},\n\t\"female-singer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F3A4\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f3a4.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Singer\",\n\t\tb: \"1F469-200D-1F3A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t35\n\t\t]\n\t},\n\t\"male-artist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 16,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Artist\",\n\t\tb: \"1F468-200D-1F3A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t26\n\t\t]\n\t},\n\tcrossed_swords: {\n\t\ta: \"Crossed Swords\",\n\t\tb: \"2694-FE0F\",\n\t\tc: \"2694\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"weapon\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t13\n\t\t],\n\t\to: 4\n\t},\n\tnine: {\n\t\ta: \"Keycap 9\",\n\t\tb: \"0039-FE0F-20E3\",\n\t\tc: \"0039-20E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"numbers\",\n\t\t\t\"9\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t11\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-lk\": {\n\t\ta: \"Sri Lanka Flag\",\n\t\tb: \"1F1F1-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t10\n\t\t]\n\t},\n\tclock130: {\n\t\ta: \"Clock Face One-Thirty\",\n\t\tb: \"1F55C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t30\n\t\t]\n\t},\n\tclock2: {\n\t\ta: \"Clock Face Two Oclock\",\n\t\tb: \"1F551\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t19\n\t\t]\n\t},\n\tgun: {\n\t\ta: \"Pistol\",\n\t\tb: \"1F52B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"violence\",\n\t\t\t\"weapon\",\n\t\t\t\"pistol\",\n\t\t\t\"revolver\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t45\n\t\t]\n\t},\n\tkeycap_ten: {\n\t\ta: \"Keycap Ten\",\n\t\tb: \"1F51F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"numbers\",\n\t\t\t\"10\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t33\n\t\t]\n\t},\n\t\"female-artist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F3A8\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f3a8.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Artist\",\n\t\tb: \"1F469-200D-1F3A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-lr\": {\n\t\ta: \"Liberia Flag\",\n\t\tb: \"1F1F1-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t11\n\t\t]\n\t},\n\tclock230: {\n\t\ta: \"Clock Face Two-Thirty\",\n\t\tb: \"1F55D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t31\n\t\t]\n\t},\n\tbow_and_arrow: {\n\t\ta: \"Bow and Arrow\",\n\t\tb: \"1F3F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\"\n\t\t],\n\t\tk: [\n\t\t\t12,\n\t\t\t23\n\t\t],\n\t\to: 8\n\t},\n\t\"male-pilot\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FB-200D-2708\",\n\t\t\t\timage: \"1f468-1f3fb-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FC-200D-2708\",\n\t\t\t\timage: \"1f468-1f3fc-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FD-200D-2708\",\n\t\t\t\timage: \"1f468-1f3fd-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FE-200D-2708\",\n\t\t\t\timage: \"1f468-1f3fe-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F468-1F3FF-200D-2708\",\n\t\t\t\timage: \"1f468-1f3ff-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 18,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Pilot\",\n\t\tb: \"1F468-200D-2708-FE0F\",\n\t\tc: \"1F468-200D-2708\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t18,\n\t\t\t3\n\t\t]\n\t},\n\t\"flag-ls\": {\n\t\ta: \"Lesotho Flag\",\n\t\tb: \"1F1F1-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t12\n\t\t]\n\t},\n\t\"flag-lt\": {\n\t\ta: \"Lithuania Flag\",\n\t\tb: \"1F1F1-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t13\n\t\t]\n\t},\n\tcapital_abcd: {\n\t\ta: \"Input Symbol for Latin Capital Letters\",\n\t\tb: \"1F520\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"words\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t34\n\t\t]\n\t},\n\t\"female-pilot\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FB-200D-2708\",\n\t\t\t\timage: \"1f469-1f3fb-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FC-200D-2708\",\n\t\t\t\timage: \"1f469-1f3fc-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FD-200D-2708\",\n\t\t\t\timage: \"1f469-1f3fd-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FE-200D-2708\",\n\t\t\t\timage: \"1f469-1f3fe-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-2708-FE0F\",\n\t\t\t\tnon_qualified: \"1F469-1F3FF-200D-2708\",\n\t\t\t\timage: \"1f469-1f3ff-200d-2708-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Pilot\",\n\t\tb: \"1F469-200D-2708-FE0F\",\n\t\tc: \"1F469-200D-2708\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t13\n\t\t]\n\t},\n\tclock3: {\n\t\ta: \"Clock Face Three Oclock\",\n\t\tb: \"1F552\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t20\n\t\t]\n\t},\n\tshield: {\n\t\ta: \"Shield\",\n\t\tb: \"1F6E1-FE0F\",\n\t\tc: \"1F6E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"protection\",\n\t\t\t\"security\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t9\n\t\t],\n\t\to: 7\n\t},\n\t\"male-astronaut\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f680.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Astronaut\",\n\t\tb: \"1F468-200D-1F680\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t31\n\t\t]\n\t},\n\tabcd: {\n\t\ta: \"Input Symbol for Latin Small Letters\",\n\t\tb: \"1F521\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"alphabet\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t35\n\t\t]\n\t},\n\tclock330: {\n\t\ta: \"Clock Face Three-Thirty\",\n\t\tb: \"1F55E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t32\n\t\t]\n\t},\n\t\"flag-lu\": {\n\t\ta: \"Luxembourg Flag\",\n\t\tb: \"1F1F1-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t14\n\t\t]\n\t},\n\twrench: {\n\t\ta: \"Wrench\",\n\t\tb: \"1F527\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"tools\",\n\t\t\t\"diy\",\n\t\t\t\"ikea\",\n\t\t\t\"fix\",\n\t\t\t\"maintainer\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t41\n\t\t]\n\t},\n\tnut_and_bolt: {\n\t\ta: \"Nut and Bolt\",\n\t\tb: \"1F529\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"handy\",\n\t\t\t\"tools\",\n\t\t\t\"fix\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t43\n\t\t]\n\t},\n\tclock4: {\n\t\ta: \"Clock Face Four Oclock\",\n\t\tb: \"1F553\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t21\n\t\t]\n\t},\n\t\"female-astronaut\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F680\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f680.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Astronaut\",\n\t\tb: \"1F469-200D-1F680\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-lv\": {\n\t\ta: \"Latvia Flag\",\n\t\tb: \"1F1F1-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t15\n\t\t]\n\t},\n\tgear: {\n\t\ta: \"Gear\",\n\t\tb: \"2699-FE0F\",\n\t\tc: \"2699\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"cog\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t17\n\t\t],\n\t\to: 4\n\t},\n\t\"male-firefighter\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F468-1F3FB-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fb-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F468-1F3FC-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fc-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F468-1F3FD-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fd-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F468-1F3FE-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3fe-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F468-1F3FF-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f468-1f3ff-200d-1f692.png\",\n\t\t\t\tsheet_x: 17,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Firefighter\",\n\t\tb: \"1F468-200D-1F692\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t17,\n\t\t\t37\n\t\t]\n\t},\n\t\"flag-ly\": {\n\t\ta: \"Libya Flag\",\n\t\tb: \"1F1F1-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t16\n\t\t]\n\t},\n\tsymbols: {\n\t\ta: \"Input Symbol for Symbols\",\n\t\tb: \"1F523\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"music\",\n\t\t\t\"note\",\n\t\t\t\"ampersand\",\n\t\t\t\"percent\",\n\t\t\t\"glyphs\",\n\t\t\t\"characters\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t37\n\t\t]\n\t},\n\tclock430: {\n\t\ta: \"Clock Face Four-Thirty\",\n\t\tb: \"1F55F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t33\n\t\t]\n\t},\n\t\"flag-ma\": {\n\t\ta: \"Morocco Flag\",\n\t\tb: \"1F1F2-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t17\n\t\t]\n\t},\n\tcompression: {\n\t\ta: \"Compression\",\n\t\tb: \"1F5DC-FE0F\",\n\t\tc: \"1F5DC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t10\n\t\t],\n\t\to: 7\n\t},\n\t\"female-firefighter\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F469-1F3FB-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fb-200d-1f692.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F469-1F3FC-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fc-200d-1f692.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F469-1F3FD-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fd-200d-1f692.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F469-1F3FE-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3fe-200d-1f692.png\",\n\t\t\t\tsheet_x: 19,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F469-1F3FF-200D-1F692\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f469-1f3ff-200d-1f692.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Firefighter\",\n\t\tb: \"1F469-200D-1F692\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t47\n\t\t]\n\t},\n\tabc: {\n\t\ta: \"Input Symbol for Latin Letters\",\n\t\tb: \"1F524\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"alphabet\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t38\n\t\t]\n\t},\n\tclock5: {\n\t\ta: \"Clock Face Five Oclock\",\n\t\tb: \"1F554\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t22\n\t\t]\n\t},\n\tclock530: {\n\t\ta: \"Clock Face Five-Thirty\",\n\t\tb: \"1F560\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t34\n\t\t]\n\t},\n\ta: {\n\t\ta: \"Negative Squared Latin Capital Letter a\",\n\t\tb: \"1F170-FE0F\",\n\t\tc: \"1F170\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"red-square\",\n\t\t\t\"alphabet\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t16\n\t\t]\n\t},\n\talembic: {\n\t\ta: \"Alembic\",\n\t\tb: \"2697-FE0F\",\n\t\tc: \"2697\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"distilling\",\n\t\t\t\"science\",\n\t\t\t\"experiment\",\n\t\t\t\"chemistry\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t16\n\t\t],\n\t\to: 4\n\t},\n\t\"flag-mc\": {\n\t\ta: \"Monaco Flag\",\n\t\tb: \"1F1F2-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t18\n\t\t]\n\t},\n\tcop: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F46E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3fb.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F46E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3fc.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F46E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3fd.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F46E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3fe.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F46E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f46e-1f3ff.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F46E-200D-2642-FE0F\",\n\t\ta: \"Police Officer\",\n\t\tb: \"1F46E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t20,\n\t\t\t45\n\t\t]\n\t},\n\tscales: {\n\t\ta: \"Scales\",\n\t\tb: \"2696-FE0F\",\n\t\tc: \"2696\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t15\n\t\t],\n\t\to: 4\n\t},\n\tclock6: {\n\t\ta: \"Clock Face Six Oclock\",\n\t\tb: \"1F555\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\",\n\t\t\t\"dawn\",\n\t\t\t\"dusk\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-md\": {\n\t\ta: \"Moldova Flag\",\n\t\tb: \"1F1F2-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t19\n\t\t]\n\t},\n\tab: {\n\t\ta: \"Negative Squared Ab\",\n\t\tb: \"1F18E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"red-square\",\n\t\t\t\"alphabet\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t20\n\t\t]\n\t},\n\t\"male-police-officer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F46E-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F46E-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F46E-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F46E-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F46E-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f46e-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F46E\",\n\t\ta: \"Male Police Officer\",\n\t\tb: \"1F46E-200D-2642-FE0F\",\n\t\tc: \"1F46E-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t39\n\t\t]\n\t},\n\tlink: {\n\t\ta: \"Link Symbol\",\n\t\tb: \"1F517\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"rings\",\n\t\t\t\"url\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t25\n\t\t]\n\t},\n\t\"flag-me\": {\n\t\ta: \"Montenegro Flag\",\n\t\tb: \"1F1F2-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t20\n\t\t]\n\t},\n\tclock630: {\n\t\ta: \"Clock Face Six-Thirty\",\n\t\tb: \"1F561\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t35\n\t\t]\n\t},\n\tb: {\n\t\ta: \"Negative Squared Latin Capital Letter B\",\n\t\tb: \"1F171-FE0F\",\n\t\tc: \"1F171\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"red-square\",\n\t\t\t\"alphabet\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t17\n\t\t]\n\t},\n\t\"female-police-officer\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F46E-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F46E-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F46E-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F46E-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F46E-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F46E-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f46e-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 20,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Police Officer\",\n\t\tb: \"1F46E-200D-2640-FE0F\",\n\t\tc: \"1F46E-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t33\n\t\t]\n\t},\n\tclock7: {\n\t\ta: \"Clock Face Seven Oclock\",\n\t\tb: \"1F556\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t24\n\t\t]\n\t},\n\tcl: {\n\t\ta: \"Squared Cl\",\n\t\tb: \"1F191\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"words\",\n\t\t\t\"red-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t21\n\t\t]\n\t},\n\tsleuth_or_spy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F575-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F575-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F575-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F575-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F575-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f575-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F575-FE0F-200D-2642-FE0F\",\n\t\ta: \"Sleuth or Spy\",\n\t\tb: \"1F575-FE0F\",\n\t\tc: \"1F575\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t11\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-mf\": {\n\t\ta: \"St. Martin Flag\",\n\t\tb: \"1F1F2-1F1EB\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t21\n\t\t]\n\t},\n\tchains: {\n\t\ta: \"Chains\",\n\t\tb: \"26D3-FE0F\",\n\t\tc: \"26D3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"lock\",\n\t\t\t\"arrest\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t34\n\t\t],\n\t\to: 5\n\t},\n\tsyringe: {\n\t\ta: \"Syringe\",\n\t\tb: \"1F489\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"health\",\n\t\t\t\"hospital\",\n\t\t\t\"drugs\",\n\t\t\t\"blood\",\n\t\t\t\"medicine\",\n\t\t\t\"needle\",\n\t\t\t\"doctor\",\n\t\t\t\"nurse\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t35\n\t\t]\n\t},\n\t\"male-detective\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F575-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f575-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F575-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f575-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F575-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f575-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F575-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f575-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F575-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f575-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F575-FE0F\",\n\t\ta: \"Male Detective\",\n\t\tb: \"1F575-FE0F-200D-2642-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t5\n\t\t],\n\t\to: 7\n\t},\n\tcool: {\n\t\ta: \"Squared Cool\",\n\t\tb: \"1F192\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t22\n\t\t]\n\t},\n\tclock730: {\n\t\ta: \"Clock Face Seven-Thirty\",\n\t\tb: \"1F562\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-mg\": {\n\t\ta: \"Madagascar Flag\",\n\t\tb: \"1F1F2-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t22\n\t\t]\n\t},\n\tfree: {\n\t\ta: \"Squared Free\",\n\t\tb: \"1F193\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"words\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-mh\": {\n\t\ta: \"Marshall Islands Flag\",\n\t\tb: \"1F1F2-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t23\n\t\t]\n\t},\n\tclock8: {\n\t\ta: \"Clock Face Eight Oclock\",\n\t\tb: \"1F557\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t25\n\t\t]\n\t},\n\tpill: {\n\t\ta: \"Pill\",\n\t\tb: \"1F48A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"health\",\n\t\t\t\"medicine\",\n\t\t\t\"doctor\",\n\t\t\t\"pharmacy\",\n\t\t\t\"drug\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t36\n\t\t]\n\t},\n\t\"female-detective\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F575-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f575-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F575-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f575-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F575-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f575-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F575-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f575-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F575-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F575-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f575-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Detective\",\n\t\tb: \"1F575-FE0F-200D-2640-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t51\n\t\t],\n\t\to: 7\n\t},\n\tclock830: {\n\t\ta: \"Clock Face Eight-Thirty\",\n\t\tb: \"1F563\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t37\n\t\t]\n\t},\n\tguardsman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F482-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3fb.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F482-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3fc.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F482-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3fd.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F482-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3fe.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F482-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f482-1f3ff.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F482-200D-2642-FE0F\",\n\t\ta: \"Guardsman\",\n\t\tb: \"1F482\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"uk\",\n\t\t\t\"gb\",\n\t\t\t\"british\",\n\t\t\t\"male\",\n\t\t\t\"guy\",\n\t\t\t\"royal\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t31\n\t\t]\n\t},\n\tinformation_source: {\n\t\ta: \"Information Source\",\n\t\tb: \"2139-FE0F\",\n\t\tc: \"2139\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"alphabet\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t46,\n\t\t\t32\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-mk\": {\n\t\ta: \"Macedonia Flag\",\n\t\tb: \"1F1F2-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t24\n\t\t]\n\t},\n\tsmoking: {\n\t\ta: \"Smoking Symbol\",\n\t\tb: \"1F6AC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"kills\",\n\t\t\t\"tobacco\",\n\t\t\t\"cigarette\",\n\t\t\t\"joint\",\n\t\t\t\"smoke\"\n\t\t],\n\t\tk: [\n\t\t\t35,\n\t\t\t17\n\t\t]\n\t},\n\tid: {\n\t\ta: \"Squared Id\",\n\t\tb: \"1F194\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"words\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t24\n\t\t]\n\t},\n\tclock9: {\n\t\ta: \"Clock Face Nine Oclock\",\n\t\tb: \"1F558\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t26\n\t\t]\n\t},\n\t\"flag-ml\": {\n\t\ta: \"Mali Flag\",\n\t\tb: \"1F1F2-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t25\n\t\t]\n\t},\n\tcoffin: {\n\t\ta: \"Coffin\",\n\t\tb: \"26B0-FE0F\",\n\t\tc: \"26B0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"vampire\",\n\t\t\t\"dead\",\n\t\t\t\"die\",\n\t\t\t\"death\",\n\t\t\t\"rip\",\n\t\t\t\"graveyard\",\n\t\t\t\"cemetery\",\n\t\t\t\"casket\",\n\t\t\t\"funeral\",\n\t\t\t\"box\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t24\n\t\t],\n\t\to: 4\n\t},\n\t\"male-guard\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F482-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f482-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F482-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f482-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F482-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f482-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F482-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f482-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F482-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f482-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F482\",\n\t\ta: \"Male Guard\",\n\t\tb: \"1F482-200D-2642-FE0F\",\n\t\tc: \"1F482-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t25\n\t\t]\n\t},\n\tm: {\n\t\ta: \"Circled Latin Capital Letter M\",\n\t\tb: \"24C2-FE0F\",\n\t\tc: \"24C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"blue-circle\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t7\n\t\t],\n\t\to: 1\n\t},\n\tfuneral_urn: {\n\t\ta: \"Funeral Urn\",\n\t\tb: \"26B1-FE0F\",\n\t\tc: \"26B1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"dead\",\n\t\t\t\"die\",\n\t\t\t\"death\",\n\t\t\t\"rip\",\n\t\t\t\"ashes\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t25\n\t\t],\n\t\to: 4\n\t},\n\t\"female-guard\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F482-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f482-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F482-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f482-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F482-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f482-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F482-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f482-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F482-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F482-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f482-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Guard\",\n\t\tb: \"1F482-200D-2640-FE0F\",\n\t\tc: \"1F482-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t19\n\t\t]\n\t},\n\t\"flag-mm\": {\n\t\ta: \"Myanmar (burma) Flag\",\n\t\tb: \"1F1F2-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t26\n\t\t]\n\t},\n\tclock930: {\n\t\ta: \"Clock Face Nine-Thirty\",\n\t\tb: \"1F564\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t38\n\t\t]\n\t},\n\tmoyai: {\n\t\ta: \"Moyai\",\n\t\tb: \"1F5FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"rock\",\n\t\t\t\"easter island\",\n\t\t\t\"moai\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t23\n\t\t]\n\t},\n\t\"new\": {\n\t\ta: \"Squared New\",\n\t\tb: \"1F195\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"words\",\n\t\t\t\"start\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t25\n\t\t]\n\t},\n\t\"flag-mn\": {\n\t\ta: \"Mongolia Flag\",\n\t\tb: \"1F1F2-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t27\n\t\t]\n\t},\n\tconstruction_worker: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F477-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F477-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F477-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F477-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F477-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f477-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F477-200D-2642-FE0F\",\n\t\ta: \"Construction Worker\",\n\t\tb: \"1F477\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t22,\n\t\t\t28\n\t\t]\n\t},\n\tclock10: {\n\t\ta: \"Clock Face Ten Oclock\",\n\t\tb: \"1F559\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t27\n\t\t]\n\t},\n\tclock1030: {\n\t\ta: \"Clock Face Ten-Thirty\",\n\t\tb: \"1F565\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t39\n\t\t]\n\t},\n\tng: {\n\t\ta: \"Squared Ng\",\n\t\tb: \"1F196\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"words\",\n\t\t\t\"shape\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t26\n\t\t]\n\t},\n\t\"male-construction-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F477-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f477-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F477-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f477-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F477-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f477-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F477-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f477-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F477-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f477-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F477\",\n\t\ta: \"Male Construction Worker\",\n\t\tb: \"1F477-200D-2642-FE0F\",\n\t\tc: \"1F477-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t22,\n\t\t\t22\n\t\t]\n\t},\n\t\"flag-mo\": {\n\t\ta: \"Macau Sar China Flag\",\n\t\tb: \"1F1F2-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t28\n\t\t]\n\t},\n\toil_drum: {\n\t\ta: \"Oil Drum\",\n\t\tb: \"1F6E2-FE0F\",\n\t\tc: \"1F6E2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"barrell\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t10\n\t\t],\n\t\to: 7\n\t},\n\to2: {\n\t\ta: \"Negative Squared Latin Capital Letter O\",\n\t\tb: \"1F17E-FE0F\",\n\t\tc: \"1F17E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"alphabet\",\n\t\t\t\"red-square\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t18\n\t\t]\n\t},\n\t\"female-construction-worker\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F477-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f477-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F477-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f477-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F477-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f477-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F477-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f477-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F477-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F477-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f477-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Construction Worker\",\n\t\tb: \"1F477-200D-2640-FE0F\",\n\t\tc: \"1F477-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t22,\n\t\t\t16\n\t\t]\n\t},\n\tclock11: {\n\t\ta: \"Clock Face Eleven Oclock\",\n\t\tb: \"1F55A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t28\n\t\t]\n\t},\n\tcrystal_ball: {\n\t\ta: \"Crystal Ball\",\n\t\tb: \"1F52E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"disco\",\n\t\t\t\"party\",\n\t\t\t\"magic\",\n\t\t\t\"circus\",\n\t\t\t\"fortune_teller\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t48\n\t\t]\n\t},\n\t\"flag-mp\": {\n\t\ta: \"Northern Mariana Islands Flag\",\n\t\tb: \"1F1F2-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t29\n\t\t]\n\t},\n\t\"flag-mq\": {\n\t\ta: \"Martinique Flag\",\n\t\tb: \"1F1F2-1F1F6\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t30\n\t\t]\n\t},\n\tprince: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F934-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F934-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F934-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F934-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F934-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f934-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Prince\",\n\t\tb: \"1F934\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"boy\",\n\t\t\t\"man\",\n\t\t\t\"male\",\n\t\t\t\"crown\",\n\t\t\t\"royal\",\n\t\t\t\"king\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t28\n\t\t],\n\t\to: 9\n\t},\n\tok: {\n\t\ta: \"Squared Ok\",\n\t\tb: \"1F197\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"good\",\n\t\t\t\"agree\",\n\t\t\t\"yes\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t27\n\t\t]\n\t},\n\tclock1130: {\n\t\ta: \"Clock Face Eleven-Thirty\",\n\t\tb: \"1F566\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"time\",\n\t\t\t\"late\",\n\t\t\t\"early\",\n\t\t\t\"schedule\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t40\n\t\t]\n\t},\n\tshopping_trolley: {\n\t\ta: \"Shopping Trolley\",\n\t\tb: \"1F6D2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t7\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-mr\": {\n\t\ta: \"Mauritania Flag\",\n\t\tb: \"1F1F2-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t31\n\t\t]\n\t},\n\tprincess: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F478-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F478-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F478-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F478-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F478-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f478-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Princess\",\n\t\tb: \"1F478\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"girl\",\n\t\t\t\"woman\",\n\t\t\t\"female\",\n\t\t\t\"blond\",\n\t\t\t\"crown\",\n\t\t\t\"royal\",\n\t\t\t\"queen\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t34\n\t\t]\n\t},\n\tnew_moon: {\n\t\ta: \"New Moon Symbol\",\n\t\tb: \"1F311\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t9\n\t\t]\n\t},\n\tparking: {\n\t\ta: \"Negative Squared Latin Capital Letter P\",\n\t\tb: \"1F17F-FE0F\",\n\t\tc: \"1F17F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cars\",\n\t\t\t\"blue-square\",\n\t\t\t\"alphabet\",\n\t\t\t\"letter\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t19\n\t\t],\n\t\to: 5\n\t},\n\tsos: {\n\t\ta: \"Squared Sos\",\n\t\tb: \"1F198\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"help\",\n\t\t\t\"red-square\",\n\t\t\t\"words\",\n\t\t\t\"emergency\",\n\t\t\t\"911\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t28\n\t\t]\n\t},\n\tman_with_turban: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F473-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F473-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3fc.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F473-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3fd.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F473-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3fe.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F473-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f473-1f3ff.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F473-200D-2642-FE0F\",\n\t\ta: \"Man with Turban\",\n\t\tb: \"1F473\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"male\",\n\t\t\t\"indian\",\n\t\t\t\"hinduism\",\n\t\t\t\"arabs\"\n\t\t],\n\t\tk: [\n\t\t\t21,\n\t\t\t44\n\t\t]\n\t},\n\t\"flag-ms\": {\n\t\ta: \"Montserrat Flag\",\n\t\tb: \"1F1F2-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t32\n\t\t]\n\t},\n\twaxing_crescent_moon: {\n\t\ta: \"Waxing Crescent Moon Symbol\",\n\t\tb: \"1F312\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t10\n\t\t]\n\t},\n\tup: {\n\t\ta: \"Squared Up with Exclamation Mark\",\n\t\tb: \"1F199\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"above\",\n\t\t\t\"high\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t29\n\t\t]\n\t},\n\tfirst_quarter_moon: {\n\t\ta: \"First Quarter Moon Symbol\",\n\t\tb: \"1F313\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t11\n\t\t]\n\t},\n\t\"flag-mt\": {\n\t\ta: \"Malta Flag\",\n\t\tb: \"1F1F2-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t33\n\t\t]\n\t},\n\t\"man-wearing-turban\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F473-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f473-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F473-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f473-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F473-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f473-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F473-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f473-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F473-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f473-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F473\",\n\t\ta: \"Man Wearing Turban\",\n\t\tb: \"1F473-200D-2642-FE0F\",\n\t\tc: \"1F473-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t38\n\t\t]\n\t},\n\tmoon: {\n\t\ta: \"Waxing Gibbous Moon Symbol\",\n\t\tb: \"1F314\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t6,\n\t\t\t12\n\t\t],\n\t\tn: [\n\t\t\t\"waxing_gibbous_moon\"\n\t\t]\n\t},\n\t\"woman-wearing-turban\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F473-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f473-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F473-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f473-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F473-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f473-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F473-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f473-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F473-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F473-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f473-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Wearing Turban\",\n\t\tb: \"1F473-200D-2640-FE0F\",\n\t\tc: \"1F473-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t32\n\t\t]\n\t},\n\tvs: {\n\t\ta: \"Squared Vs\",\n\t\tb: \"1F19A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"orange-square\"\n\t\t],\n\t\tk: [\n\t\t\t0,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-mu\": {\n\t\ta: \"Mauritius Flag\",\n\t\tb: \"1F1F2-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t34\n\t\t]\n\t},\n\tman_with_gua_pi_mao: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F472-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F472-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3fc.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F472-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3fd.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F472-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3fe.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F472-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f472-1f3ff.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Man with Gua Pi Mao\",\n\t\tb: \"1F472\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"male\",\n\t\t\t\"boy\",\n\t\t\t\"chinese\"\n\t\t],\n\t\tk: [\n\t\t\t21,\n\t\t\t26\n\t\t]\n\t},\n\tkoko: {\n\t\ta: \"Squared Katakana Koko\",\n\t\tb: \"1F201\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue-square\",\n\t\t\t\"here\",\n\t\t\t\"katakana\",\n\t\t\t\"japanese\",\n\t\t\t\"destination\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t29\n\t\t]\n\t},\n\tfull_moon: {\n\t\ta: \"Full Moon Symbol\",\n\t\tb: \"1F315\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"yellow\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t13\n\t\t]\n\t},\n\t\"flag-mv\": {\n\t\ta: \"Maldives Flag\",\n\t\tb: \"1F1F2-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t35\n\t\t]\n\t},\n\tperson_with_headscarf: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D5-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D5-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D5-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D5-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D5-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d5-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Person with Headscarf\",\n\t\tb: \"1F9D5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t22\n\t\t],\n\t\to: 10\n\t},\n\twaning_gibbous_moon: {\n\t\ta: \"Waning Gibbous Moon Symbol\",\n\t\tb: \"1F316\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\",\n\t\t\t\"waxing_gibbous_moon\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t14\n\t\t]\n\t},\n\tsa: {\n\t\ta: \"Squared Katakana Sa\",\n\t\tb: \"1F202-FE0F\",\n\t\tc: \"1F202\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"blue-square\",\n\t\t\t\"katakana\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-mw\": {\n\t\ta: \"Malawi Flag\",\n\t\tb: \"1F1F2-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t36\n\t\t]\n\t},\n\tlast_quarter_moon: {\n\t\ta: \"Last Quarter Moon Symbol\",\n\t\tb: \"1F317\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t15\n\t\t]\n\t},\n\tu6708: {\n\t\ta: \"Squared Cjk Unified Ideograph-6708\",\n\t\tb: \"1F237-FE0F\",\n\t\tc: \"1F237\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"month\",\n\t\t\t\"moon\",\n\t\t\t\"japanese\",\n\t\t\t\"orange-square\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t38\n\t\t]\n\t},\n\tbearded_person: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D4-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D4-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D4-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D4-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D4-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d4-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Bearded Person\",\n\t\tb: \"1F9D4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t16\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-mx\": {\n\t\ta: \"Mexico Flag\",\n\t\tb: \"1F1F2-1F1FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t37\n\t\t]\n\t},\n\tu6709: {\n\t\ta: \"Squared Cjk Unified Ideograph-6709\",\n\t\tb: \"1F236\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"orange-square\",\n\t\t\t\"chinese\",\n\t\t\t\"have\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t37\n\t\t]\n\t},\n\tperson_with_blond_hair: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F471-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F471-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3fc.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F471-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3fd.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F471-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3fe.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F471-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f471-1f3ff.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F471-200D-2642-FE0F\",\n\t\ta: \"Person with Blond Hair\",\n\t\tb: \"1F471\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t21,\n\t\t\t20\n\t\t]\n\t},\n\twaning_crescent_moon: {\n\t\ta: \"Waning Crescent Moon Symbol\",\n\t\tb: \"1F318\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t16\n\t\t]\n\t},\n\t\"flag-my\": {\n\t\ta: \"Malaysia Flag\",\n\t\tb: \"1F1F2-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t38\n\t\t]\n\t},\n\tu6307: {\n\t\ta: \"Squared Cjk Unified Ideograph-6307\",\n\t\tb: \"1F22F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"point\",\n\t\t\t\"green-square\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t32\n\t\t],\n\t\to: 5\n\t},\n\t\"blond-haired-man\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F471-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f471-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F471-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f471-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F471-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f471-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F471-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f471-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F471-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f471-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F471\",\n\t\ta: \"Blond Haired Man\",\n\t\tb: \"1F471-200D-2642-FE0F\",\n\t\tc: \"1F471-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t14\n\t\t]\n\t},\n\tcrescent_moon: {\n\t\ta: \"Crescent Moon\",\n\t\tb: \"1F319\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"night\",\n\t\t\t\"sleep\",\n\t\t\t\"sky\",\n\t\t\t\"evening\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t17\n\t\t]\n\t},\n\t\"flag-mz\": {\n\t\ta: \"Mozambique Flag\",\n\t\tb: \"1F1F2-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t39\n\t\t]\n\t},\n\tnew_moon_with_face: {\n\t\ta: \"New Moon with Face\",\n\t\tb: \"1F31A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t18\n\t\t]\n\t},\n\t\"flag-na\": {\n\t\ta: \"Namibia Flag\",\n\t\tb: \"1F1F3-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t40\n\t\t]\n\t},\n\t\"blond-haired-woman\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F471-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f471-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F471-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f471-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F471-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f471-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F471-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f471-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F471-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F471-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f471-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Blond Haired Woman\",\n\t\tb: \"1F471-200D-2640-FE0F\",\n\t\tc: \"1F471-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t8\n\t\t]\n\t},\n\tideograph_advantage: {\n\t\ta: \"Circled Ideograph Advantage\",\n\t\tb: \"1F250\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"obtain\",\n\t\t\t\"get\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t42\n\t\t]\n\t},\n\tfirst_quarter_moon_with_face: {\n\t\ta: \"First Quarter Moon with Face\",\n\t\tb: \"1F31B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t19\n\t\t]\n\t},\n\tman_in_tuxedo: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F935-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F935-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F935-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F935-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F935-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f935-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man in Tuxedo\",\n\t\tb: \"1F935\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"couple\",\n\t\t\t\"marriage\",\n\t\t\t\"wedding\",\n\t\t\t\"groom\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t34\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-nc\": {\n\t\ta: \"New Caledonia Flag\",\n\t\tb: \"1F1F3-1F1E8\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t41\n\t\t]\n\t},\n\tu5272: {\n\t\ta: \"Squared Cjk Unified Ideograph-5272\",\n\t\tb: \"1F239\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"cut\",\n\t\t\t\"divide\",\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"pink-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t40\n\t\t]\n\t},\n\t\"flag-ne\": {\n\t\ta: \"Niger Flag\",\n\t\tb: \"1F1F3-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t42\n\t\t]\n\t},\n\tlast_quarter_moon_with_face: {\n\t\ta: \"Last Quarter Moon with Face\",\n\t\tb: \"1F31C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t20\n\t\t]\n\t},\n\tu7121: {\n\t\ta: \"Squared Cjk Unified Ideograph-7121\",\n\t\tb: \"1F21A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nothing\",\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"japanese\",\n\t\t\t\"orange-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t31\n\t\t],\n\t\to: 5\n\t},\n\tbride_with_veil: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F470-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3fb.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F470-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3fc.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F470-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3fd.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F470-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3fe.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F470-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f470-1f3ff.png\",\n\t\t\t\tsheet_x: 21,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Bride with Veil\",\n\t\tb: \"1F470\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"couple\",\n\t\t\t\"marriage\",\n\t\t\t\"wedding\",\n\t\t\t\"woman\",\n\t\t\t\"bride\"\n\t\t],\n\t\tk: [\n\t\t\t21,\n\t\t\t2\n\t\t]\n\t},\n\tu7981: {\n\t\ta: \"Squared Cjk Unified Ideograph-7981\",\n\t\tb: \"1F232\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"kanji\",\n\t\t\t\"japanese\",\n\t\t\t\"chinese\",\n\t\t\t\"forbidden\",\n\t\t\t\"limit\",\n\t\t\t\"restricted\",\n\t\t\t\"red-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t33\n\t\t]\n\t},\n\tpregnant_woman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F930-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F930-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F930-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F930-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F930-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f930-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Pregnant Woman\",\n\t\tb: \"1F930\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"baby\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t4\n\t\t],\n\t\to: 9\n\t},\n\tthermometer: {\n\t\ta: \"Thermometer\",\n\t\tb: \"1F321-FE0F\",\n\t\tc: \"1F321\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"temperature\",\n\t\t\t\"hot\",\n\t\t\t\"cold\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t25\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-nf\": {\n\t\ta: \"Norfolk Island Flag\",\n\t\tb: \"1F1F3-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t43\n\t\t]\n\t},\n\tsunny: {\n\t\ta: \"Black Sun with Rays\",\n\t\tb: \"2600-FE0F\",\n\t\tc: \"2600\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"nature\",\n\t\t\t\"brightness\",\n\t\t\t\"summer\",\n\t\t\t\"beach\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t16\n\t\t],\n\t\to: 1\n\t},\n\taccept: {\n\t\ta: \"Circled Ideograph Accept\",\n\t\tb: \"1F251\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"ok\",\n\t\t\t\"good\",\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"agree\",\n\t\t\t\"yes\",\n\t\t\t\"orange-circle\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t43\n\t\t]\n\t},\n\t\"flag-ng\": {\n\t\ta: \"Nigeria Flag\",\n\t\tb: \"1F1F3-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t44\n\t\t]\n\t},\n\t\"breast-feeding\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F931-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F931-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F931-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F931-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F931-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f931-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Breast-Feeding\",\n\t\tb: \"1F931\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t10\n\t\t],\n\t\to: 10\n\t},\n\tfull_moon_with_face: {\n\t\ta: \"Full Moon with Face\",\n\t\tb: \"1F31D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"twilight\",\n\t\t\t\"planet\",\n\t\t\t\"space\",\n\t\t\t\"night\",\n\t\t\t\"evening\",\n\t\t\t\"sleep\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t21\n\t\t]\n\t},\n\t\"flag-ni\": {\n\t\ta: \"Nicaragua Flag\",\n\t\tb: \"1F1F3-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t45\n\t\t]\n\t},\n\tu7533: {\n\t\ta: \"Squared Cjk Unified Ideograph-7533\",\n\t\tb: \"1F238\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"japanese\",\n\t\t\t\"kanji\",\n\t\t\t\"orange-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t39\n\t\t]\n\t},\n\tangel: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F47C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3fb.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F47C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3fc.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F47C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3fd.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F47C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3fe.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F47C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f47c-1f3ff.png\",\n\t\t\t\tsheet_x: 22,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Baby Angel\",\n\t\tb: \"1F47C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"heaven\",\n\t\t\t\"wings\",\n\t\t\t\"halo\"\n\t\t],\n\t\tk: [\n\t\t\t22,\n\t\t\t43\n\t\t]\n\t},\n\tsun_with_face: {\n\t\ta: \"Sun with Face\",\n\t\tb: \"1F31E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"morning\",\n\t\t\t\"sky\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t22\n\t\t]\n\t},\n\tsanta: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F385-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3fb.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F385-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3fc.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F385-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3fd.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F385-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3fe.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F385-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f385-1f3ff.png\",\n\t\t\t\tsheet_x: 8,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Father Christmas\",\n\t\tb: \"1F385\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"festival\",\n\t\t\t\"man\",\n\t\t\t\"male\",\n\t\t\t\"xmas\",\n\t\t\t\"father christmas\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t19\n\t\t]\n\t},\n\tu5408: {\n\t\ta: \"Squared Cjk Unified Ideograph-5408\",\n\t\tb: \"1F234\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"chinese\",\n\t\t\t\"join\",\n\t\t\t\"kanji\",\n\t\t\t\"red-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t35\n\t\t]\n\t},\n\t\"flag-nl\": {\n\t\ta: \"Netherlands Flag\",\n\t\tb: \"1F1F3-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t46\n\t\t]\n\t},\n\tmrs_claus: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F936-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F936-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F936-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F936-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F936-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f936-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Mother Christmas\",\n\t\tb: \"1F936\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"woman\",\n\t\t\t\"female\",\n\t\t\t\"xmas\",\n\t\t\t\"mother christmas\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t40\n\t\t],\n\t\tn: [\n\t\t\t\"mother_christmas\"\n\t\t],\n\t\to: 9\n\t},\n\tu7a7a: {\n\t\ta: \"Squared Cjk Unified Ideograph-7a7a\",\n\t\tb: \"1F233\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"kanji\",\n\t\t\t\"japanese\",\n\t\t\t\"chinese\",\n\t\t\t\"empty\",\n\t\t\t\"sky\",\n\t\t\t\"blue-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t34\n\t\t]\n\t},\n\tstar: {\n\t\ta: \"White Medium Star\",\n\t\tb: \"2B50\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"night\",\n\t\t\t\"yellow\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t22\n\t\t],\n\t\to: 5\n\t},\n\t\"flag-no\": {\n\t\ta: \"Norway Flag\",\n\t\tb: \"1F1F3-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t47\n\t\t]\n\t},\n\tmage: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D9-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3fb.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D9-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3fc.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D9-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3fd.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D9-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3fe.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D9-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d9-1f3ff.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D9-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9D9-200D-2640-FE0F\",\n\t\ta: \"Mage\",\n\t\tb: \"1F9D9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t42\n\t\t],\n\t\to: 10\n\t},\n\tstar2: {\n\t\ta: \"Glowing Star\",\n\t\tb: \"1F31F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"night\",\n\t\t\t\"sparkle\",\n\t\t\t\"awesome\",\n\t\t\t\"good\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t23\n\t\t]\n\t},\n\t\"flag-np\": {\n\t\ta: \"Nepal Flag\",\n\t\tb: \"1F1F3-1F1F5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t48\n\t\t]\n\t},\n\tcongratulations: {\n\t\ta: \"Circled Ideograph Congratulation\",\n\t\tb: \"3297-FE0F\",\n\t\tc: \"3297\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"chinese\",\n\t\t\t\"kanji\",\n\t\t\t\"japanese\",\n\t\t\t\"red-circle\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t26\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-nr\": {\n\t\ta: \"Nauru Flag\",\n\t\tb: \"1F1F3-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t49\n\t\t]\n\t},\n\tstars: {\n\t\ta: \"Shooting Star\",\n\t\tb: \"1F320\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"night\",\n\t\t\t\"photo\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t24\n\t\t]\n\t},\n\tfemale_mage: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D9-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D9-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D9-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D9-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D9-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9d9-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D9-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9D9\",\n\t\ta: \"Female Mage\",\n\t\tb: \"1F9D9-200D-2640-FE0F\",\n\t\tc: \"1F9D9-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t30\n\t\t],\n\t\to: 10\n\t},\n\tsecret: {\n\t\ta: \"Circled Ideograph Secret\",\n\t\tb: \"3299-FE0F\",\n\t\tc: \"3299\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"privacy\",\n\t\t\t\"chinese\",\n\t\t\t\"sshh\",\n\t\t\t\"kanji\",\n\t\t\t\"red-circle\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t27\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-nu\": {\n\t\ta: \"Niue Flag\",\n\t\tb: \"1F1F3-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t50\n\t\t]\n\t},\n\tu55b6: {\n\t\ta: \"Squared Cjk Unified Ideograph-55b6\",\n\t\tb: \"1F23A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"japanese\",\n\t\t\t\"opening hours\",\n\t\t\t\"orange-square\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t41\n\t\t]\n\t},\n\tmale_mage: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D9-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D9-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D9-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D9-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D9-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D9-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9d9-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Mage\",\n\t\tb: \"1F9D9-200D-2642-FE0F\",\n\t\tc: \"1F9D9-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t36\n\t\t],\n\t\to: 10\n\t},\n\tcloud: {\n\t\ta: \"Cloud\",\n\t\tb: \"2601-FE0F\",\n\t\tc: \"2601\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"sky\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t17\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-nz\": {\n\t\ta: \"New Zealand Flag\",\n\t\tb: \"1F1F3-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t3,\n\t\t\t51\n\t\t]\n\t},\n\tpartly_sunny: {\n\t\ta: \"Sun Behind Cloud\",\n\t\tb: \"26C5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"nature\",\n\t\t\t\"cloudy\",\n\t\t\t\"morning\",\n\t\t\t\"fall\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t29\n\t\t],\n\t\to: 5\n\t},\n\tfairy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DA-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3fb.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DA-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3fc.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DA-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3fd.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DA-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3fe.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DA-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9da-1f3ff.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DA-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9DA-200D-2640-FE0F\",\n\t\ta: \"Fairy\",\n\t\tb: \"1F9DA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t8\n\t\t],\n\t\to: 10\n\t},\n\tu6e80: {\n\t\ta: \"Squared Cjk Unified Ideograph-6e80\",\n\t\tb: \"1F235\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"full\",\n\t\t\t\"chinese\",\n\t\t\t\"japanese\",\n\t\t\t\"red-square\",\n\t\t\t\"kanji\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t36\n\t\t]\n\t},\n\tblack_small_square: {\n\t\ta: \"Black Small Square\",\n\t\tb: \"25AA-FE0F\",\n\t\tc: \"25AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t8\n\t\t],\n\t\to: 1\n\t},\n\tthunder_cloud_and_rain: {\n\t\ta: \"Thunder Cloud and Rain\",\n\t\tb: \"26C8-FE0F\",\n\t\tc: \"26C8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t30\n\t\t],\n\t\to: 5\n\t},\n\tfemale_fairy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DA-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DA-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DA-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DA-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DA-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9da-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DA-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9DA\",\n\t\ta: \"Female Fairy\",\n\t\tb: \"1F9DA-200D-2640-FE0F\",\n\t\tc: \"1F9DA-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t48\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-om\": {\n\t\ta: \"Oman Flag\",\n\t\tb: \"1F1F4-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t0\n\t\t]\n\t},\n\twhite_small_square: {\n\t\ta: \"White Small Square\",\n\t\tb: \"25AB-FE0F\",\n\t\tc: \"25AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t9\n\t\t],\n\t\to: 1\n\t},\n\t\"flag-pa\": {\n\t\ta: \"Panama Flag\",\n\t\tb: \"1F1F5-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t1\n\t\t]\n\t},\n\tmostly_sunny: {\n\t\ta: \"Mostly Sunny\",\n\t\tb: \"1F324-FE0F\",\n\t\tc: \"1F324\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t26\n\t\t],\n\t\tn: [\n\t\t\t\"sun_small_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\tmale_fairy: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DA-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DA-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DA-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DA-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DA-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DA-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9da-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Fairy\",\n\t\tb: \"1F9DA-200D-2642-FE0F\",\n\t\tc: \"1F9DA-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t2\n\t\t],\n\t\to: 10\n\t},\n\tbarely_sunny: {\n\t\ta: \"Barely Sunny\",\n\t\tb: \"1F325-FE0F\",\n\t\tc: \"1F325\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t27\n\t\t],\n\t\tn: [\n\t\t\t\"sun_behind_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\twhite_medium_square: {\n\t\ta: \"White Medium Square\",\n\t\tb: \"25FB-FE0F\",\n\t\tc: \"25FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"stone\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t12\n\t\t],\n\t\to: 3\n\t},\n\t\"flag-pe\": {\n\t\ta: \"Peru Flag\",\n\t\tb: \"1F1F5-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t2\n\t\t]\n\t},\n\tvampire: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DB-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3fb.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DB-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3fc.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DB-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3fd.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DB-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3fe.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DB-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9db-1f3ff.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DB-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9DB-200D-2640-FE0F\",\n\t\ta: \"Vampire\",\n\t\tb: \"1F9DB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t26\n\t\t],\n\t\to: 10\n\t},\n\tfemale_vampire: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DB-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DB-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DB-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DB-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DB-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9db-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DB-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9DB\",\n\t\ta: \"Female Vampire\",\n\t\tb: \"1F9DB-200D-2640-FE0F\",\n\t\tc: \"1F9DB-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t14\n\t\t],\n\t\to: 10\n\t},\n\tpartly_sunny_rain: {\n\t\ta: \"Partly Sunny Rain\",\n\t\tb: \"1F326-FE0F\",\n\t\tc: \"1F326\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t28\n\t\t],\n\t\tn: [\n\t\t\t\"sun_behind_rain_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-pf\": {\n\t\ta: \"French Polynesia Flag\",\n\t\tb: \"1F1F5-1F1EB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t3\n\t\t]\n\t},\n\tblack_medium_square: {\n\t\ta: \"Black Medium Square\",\n\t\tb: \"25FC-FE0F\",\n\t\tc: \"25FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"button\",\n\t\t\t\"icon\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t13\n\t\t],\n\t\to: 3\n\t},\n\twhite_medium_small_square: {\n\t\ta: \"White Medium Small Square\",\n\t\tb: \"25FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"stone\",\n\t\t\t\"icon\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t14\n\t\t],\n\t\to: 3\n\t},\n\train_cloud: {\n\t\ta: \"Rain Cloud\",\n\t\tb: \"1F327-FE0F\",\n\t\tc: \"1F327\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t29\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-pg\": {\n\t\ta: \"Papua New Guinea Flag\",\n\t\tb: \"1F1F5-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t4\n\t\t]\n\t},\n\tmale_vampire: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DB-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DB-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DB-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DB-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DB-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DB-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9db-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Male Vampire\",\n\t\tb: \"1F9DB-200D-2642-FE0F\",\n\t\tc: \"1F9DB-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t20\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-ph\": {\n\t\ta: \"Philippines Flag\",\n\t\tb: \"1F1F5-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t5\n\t\t]\n\t},\n\tmerperson: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DC-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3fb.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FB-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DC-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3fc.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FC-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DC-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3fd.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FD-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DC-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3fe.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FE-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DC-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dc-1f3ff.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DC-1F3FF-200D-2642-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9DC-200D-2642-FE0F\",\n\t\ta: \"Merperson\",\n\t\tb: \"1F9DC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t44\n\t\t],\n\t\to: 10\n\t},\n\tblack_medium_small_square: {\n\t\ta: \"Black Medium Small Square\",\n\t\tb: \"25FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"icon\",\n\t\t\t\"shape\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t15\n\t\t],\n\t\to: 3\n\t},\n\tsnow_cloud: {\n\t\ta: \"Snow Cloud\",\n\t\tb: \"1F328-FE0F\",\n\t\tc: \"1F328\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t30\n\t\t],\n\t\to: 7\n\t},\n\tlightning: {\n\t\ta: \"Lightning\",\n\t\tb: \"1F329-FE0F\",\n\t\tc: \"1F329\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t31\n\t\t],\n\t\tn: [\n\t\t\t\"lightning_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\tblack_large_square: {\n\t\ta: \"Black Large Square\",\n\t\tb: \"2B1B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t20\n\t\t],\n\t\to: 5\n\t},\n\tmermaid: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DC-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DC-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DC-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DC-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DC-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9dc-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Mermaid\",\n\t\tb: \"1F9DC-200D-2640-FE0F\",\n\t\tc: \"1F9DC-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t32\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-pk\": {\n\t\ta: \"Pakistan Flag\",\n\t\tb: \"1F1F5-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t6\n\t\t]\n\t},\n\tmerman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DC-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DC-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DC-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DC-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DC-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DC-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9dc-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DC-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9DC\",\n\t\ta: \"Merman\",\n\t\tb: \"1F9DC-200D-2642-FE0F\",\n\t\tc: \"1F9DC-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t38\n\t\t],\n\t\to: 10\n\t},\n\twhite_large_square: {\n\t\ta: \"White Large Square\",\n\t\tb: \"2B1C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\",\n\t\t\t\"stone\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t21\n\t\t],\n\t\to: 5\n\t},\n\ttornado: {\n\t\ta: \"Tornado\",\n\t\tb: \"1F32A-FE0F\",\n\t\tc: \"1F32A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"cyclone\",\n\t\t\t\"twister\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t32\n\t\t],\n\t\tn: [\n\t\t\t\"tornado_cloud\"\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-pl\": {\n\t\ta: \"Poland Flag\",\n\t\tb: \"1F1F5-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t7\n\t\t]\n\t},\n\telf: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DD-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3fb.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FB-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DD-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3fc.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FC-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DD-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3fd.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FD-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DD-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3fe.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FE-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DD-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9dd-1f3ff.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9DD-1F3FF-200D-2642-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9DD-200D-2642-FE0F\",\n\t\ta: \"Elf\",\n\t\tb: \"1F9DD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t10\n\t\t],\n\t\to: 10\n\t},\n\tfog: {\n\t\ta: \"Fog\",\n\t\tb: \"1F32B-FE0F\",\n\t\tc: \"1F32B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"weather\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t33\n\t\t],\n\t\to: 7\n\t},\n\tlarge_orange_diamond: {\n\t\ta: \"Large Orange Diamond\",\n\t\tb: \"1F536\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"jewel\",\n\t\t\t\"gem\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-pm\": {\n\t\ta: \"St. Pierre & Miquelon Flag\",\n\t\tb: \"1F1F5-1F1F2\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t8\n\t\t]\n\t},\n\t\"flag-pn\": {\n\t\ta: \"Pitcairn Islands Flag\",\n\t\tb: \"1F1F5-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t9\n\t\t]\n\t},\n\twind_blowing_face: {\n\t\ta: \"Wind Blowing Face\",\n\t\tb: \"1F32C-FE0F\",\n\t\tc: \"1F32C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t6,\n\t\t\t34\n\t\t],\n\t\to: 7\n\t},\n\tfemale_elf: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DD-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 45,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DD-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DD-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DD-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DD-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9dd-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Female Elf\",\n\t\tb: \"1F9DD-200D-2640-FE0F\",\n\t\tc: \"1F9DD-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t45,\n\t\t\t50\n\t\t],\n\t\to: 10\n\t},\n\tlarge_blue_diamond: {\n\t\ta: \"Large Blue Diamond\",\n\t\tb: \"1F537\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"jewel\",\n\t\t\t\"gem\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t5\n\t\t]\n\t},\n\tmale_elf: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9DD-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9DD-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9DD-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9DD-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9DD-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9DD-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9dd-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 46,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9DD-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9DD\",\n\t\ta: \"Male Elf\",\n\t\tb: \"1F9DD-200D-2642-FE0F\",\n\t\tc: \"1F9DD-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t4\n\t\t],\n\t\to: 10\n\t},\n\tsmall_orange_diamond: {\n\t\ta: \"Small Orange Diamond\",\n\t\tb: \"1F538\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"jewel\",\n\t\t\t\"gem\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-pr\": {\n\t\ta: \"Puerto Rico Flag\",\n\t\tb: \"1F1F5-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t10\n\t\t]\n\t},\n\tcyclone: {\n\t\ta: \"Cyclone\",\n\t\tb: \"1F300\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"swirl\",\n\t\t\t\"blue\",\n\t\t\t\"cloud\",\n\t\t\t\"vortex\",\n\t\t\t\"spiral\",\n\t\t\t\"whirlpool\",\n\t\t\t\"spin\",\n\t\t\t\"tornado\",\n\t\t\t\"hurricane\",\n\t\t\t\"typhoon\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t44\n\t\t]\n\t},\n\trainbow: {\n\t\ta: \"Rainbow\",\n\t\tb: \"1F308\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"nature\",\n\t\t\t\"happy\",\n\t\t\t\"unicorn_face\",\n\t\t\t\"photo\",\n\t\t\t\"sky\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t0\n\t\t]\n\t},\n\tsmall_blue_diamond: {\n\t\ta: \"Small Blue Diamond\",\n\t\tb: \"1F539\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"jewel\",\n\t\t\t\"gem\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t7\n\t\t]\n\t},\n\tgenie: {\n\t\tobsoleted_by: \"1F9DE-200D-2642-FE0F\",\n\t\ta: \"Genie\",\n\t\tb: \"1F9DE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t18\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-ps\": {\n\t\ta: \"Palestinian Territories Flag\",\n\t\tb: \"1F1F5-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t11\n\t\t]\n\t},\n\tsmall_red_triangle: {\n\t\ta: \"Up-Pointing Red Triangle\",\n\t\tb: \"1F53A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"direction\",\n\t\t\t\"up\",\n\t\t\t\"top\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t8\n\t\t]\n\t},\n\tclosed_umbrella: {\n\t\ta: \"Closed Umbrella\",\n\t\tb: \"1F302\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"weather\",\n\t\t\t\"rain\",\n\t\t\t\"drizzle\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t46\n\t\t]\n\t},\n\tfemale_genie: {\n\t\ta: \"Female Genie\",\n\t\tb: \"1F9DE-200D-2640-FE0F\",\n\t\tc: \"1F9DE-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t16\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-pt\": {\n\t\ta: \"Portugal Flag\",\n\t\tb: \"1F1F5-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t12\n\t\t]\n\t},\n\t\"flag-pw\": {\n\t\ta: \"Palau Flag\",\n\t\tb: \"1F1F5-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t13\n\t\t]\n\t},\n\tsmall_red_triangle_down: {\n\t\ta: \"Down-Pointing Red Triangle\",\n\t\tb: \"1F53B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"direction\",\n\t\t\t\"bottom\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t9\n\t\t]\n\t},\n\tumbrella: {\n\t\ta: \"Umbrella\",\n\t\tb: \"2602-FE0F\",\n\t\tc: \"2602\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"rainy\",\n\t\t\t\"weather\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t18\n\t\t],\n\t\to: 1\n\t},\n\tmale_genie: {\n\t\tobsoletes: \"1F9DE\",\n\t\ta: \"Male Genie\",\n\t\tb: \"1F9DE-200D-2642-FE0F\",\n\t\tc: \"1F9DE-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t17\n\t\t],\n\t\to: 10\n\t},\n\tzombie: {\n\t\tobsoleted_by: \"1F9DF-200D-2642-FE0F\",\n\t\ta: \"Zombie\",\n\t\tb: \"1F9DF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t21\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-py\": {\n\t\ta: \"Paraguay Flag\",\n\t\tb: \"1F1F5-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t14\n\t\t]\n\t},\n\tdiamond_shape_with_a_dot_inside: {\n\t\ta: \"Diamond Shape with a Dot Inside\",\n\t\tb: \"1F4A0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"jewel\",\n\t\t\t\"blue\",\n\t\t\t\"gem\",\n\t\t\t\"crystal\",\n\t\t\t\"fancy\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t6\n\t\t]\n\t},\n\tumbrella_with_rain_drops: {\n\t\ta: \"Umbrella with Rain Drops\",\n\t\tb: \"2614\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t47,\n\t\t\t23\n\t\t],\n\t\to: 4\n\t},\n\tradio_button: {\n\t\ta: \"Radio Button\",\n\t\tb: \"1F518\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"input\",\n\t\t\t\"old\",\n\t\t\t\"music\",\n\t\t\t\"circle\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t26\n\t\t]\n\t},\n\tfemale_zombie: {\n\t\ta: \"Female Zombie\",\n\t\tb: \"1F9DF-200D-2640-FE0F\",\n\t\tc: \"1F9DF-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t19\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-qa\": {\n\t\ta: \"Qatar Flag\",\n\t\tb: \"1F1F6-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t15\n\t\t]\n\t},\n\tumbrella_on_ground: {\n\t\ta: \"Umbrella on Ground\",\n\t\tb: \"26F1-FE0F\",\n\t\tc: \"26F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t39\n\t\t],\n\t\to: 5\n\t},\n\tblack_square_button: {\n\t\ta: \"Black Square Button\",\n\t\tb: \"1F532\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"input\",\n\t\t\t\"frame\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t0\n\t\t]\n\t},\n\tzap: {\n\t\ta: \"High Voltage Sign\",\n\t\tb: \"26A1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"thunder\",\n\t\t\t\"weather\",\n\t\t\t\"lightning bolt\",\n\t\t\t\"fast\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t21\n\t\t],\n\t\to: 4\n\t},\n\tmale_zombie: {\n\t\tobsoletes: \"1F9DF\",\n\t\ta: \"Male Zombie\",\n\t\tb: \"1F9DF-200D-2642-FE0F\",\n\t\tc: \"1F9DF-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t20\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-re\": {\n\t\ta: \"Réunion Flag\",\n\t\tb: \"1F1F7-1F1EA\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t16\n\t\t]\n\t},\n\t\"flag-ro\": {\n\t\ta: \"Romania Flag\",\n\t\tb: \"1F1F7-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t17\n\t\t]\n\t},\n\tsnowflake: {\n\t\ta: \"Snowflake\",\n\t\tb: \"2744-FE0F\",\n\t\tc: \"2744\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"winter\",\n\t\t\t\"season\",\n\t\t\t\"cold\",\n\t\t\t\"weather\",\n\t\t\t\"christmas\",\n\t\t\t\"xmas\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t51\n\t\t],\n\t\to: 1\n\t},\n\twhite_square_button: {\n\t\ta: \"White Square Button\",\n\t\tb: \"1F533\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"input\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t1\n\t\t]\n\t},\n\tperson_frowning: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3fb.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3fc.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3fd.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3fe.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64d-1f3ff.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F64D-200D-2640-FE0F\",\n\t\ta: \"Person Frowning\",\n\t\tb: \"1F64D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t33,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-rs\": {\n\t\ta: \"Serbia Flag\",\n\t\tb: \"1F1F7-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t18\n\t\t]\n\t},\n\t\"man-frowning\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64D-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64D-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64D-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64D-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64D-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f64d-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Frowning\",\n\t\tb: \"1F64D-200D-2642-FE0F\",\n\t\tc: \"1F64D-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t24\n\t\t]\n\t},\n\twhite_circle: {\n\t\ta: \"Medium White Circle\",\n\t\tb: \"26AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"round\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t22\n\t\t],\n\t\to: 4\n\t},\n\tsnowman: {\n\t\ta: \"Snowman\",\n\t\tb: \"2603-FE0F\",\n\t\tc: \"2603\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"winter\",\n\t\t\t\"season\",\n\t\t\t\"cold\",\n\t\t\t\"weather\",\n\t\t\t\"christmas\",\n\t\t\t\"xmas\",\n\t\t\t\"frozen\",\n\t\t\t\"without_snow\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t19\n\t\t],\n\t\to: 1\n\t},\n\tsnowman_without_snow: {\n\t\ta: \"Snowman Without Snow\",\n\t\tb: \"26C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t48,\n\t\t\t28\n\t\t],\n\t\to: 5\n\t},\n\tru: {\n\t\ta: \"Russia Flag\",\n\t\tb: \"1F1F7-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"russian\",\n\t\t\t\"federation\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t4,\n\t\t\t19\n\t\t],\n\t\tn: [\n\t\t\t\"flag-ru\"\n\t\t]\n\t},\n\tblack_circle: {\n\t\ta: \"Medium Black Circle\",\n\t\tb: \"26AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"button\",\n\t\t\t\"round\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t23\n\t\t],\n\t\to: 4\n\t},\n\t\"woman-frowning\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64D-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64D-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64D-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64D-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64D-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64D-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f64d-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F64D\",\n\t\ta: \"Woman Frowning\",\n\t\tb: \"1F64D-200D-2640-FE0F\",\n\t\tc: \"1F64D-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t18\n\t\t]\n\t},\n\t\"flag-rw\": {\n\t\ta: \"Rwanda Flag\",\n\t\tb: \"1F1F7-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t20\n\t\t]\n\t},\n\tcomet: {\n\t\ta: \"Comet\",\n\t\tb: \"2604-FE0F\",\n\t\tc: \"2604\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"space\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t20\n\t\t],\n\t\to: 1\n\t},\n\tperson_with_pouting_face: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3fb.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3fc.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3fd.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3fe.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64e-1f3ff.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F64E-200D-2640-FE0F\",\n\t\ta: \"Person with Pouting Face\",\n\t\tb: \"1F64E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t33,\n\t\t\t48\n\t\t]\n\t},\n\tred_circle: {\n\t\ta: \"Large Red Circle\",\n\t\tb: \"1F534\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"error\",\n\t\t\t\"danger\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t2\n\t\t]\n\t},\n\tlarge_blue_circle: {\n\t\ta: \"Large Blue Circle\",\n\t\tb: \"1F535\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shape\",\n\t\t\t\"icon\",\n\t\t\t\"button\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t3\n\t\t]\n\t},\n\t\"man-pouting\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64E-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64E-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64E-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64E-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64E-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f64e-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Pouting\",\n\t\tb: \"1F64E-200D-2642-FE0F\",\n\t\tc: \"1F64E-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t42\n\t\t]\n\t},\n\t\"flag-sa\": {\n\t\ta: \"Saudi Arabia Flag\",\n\t\tb: \"1F1F8-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t21\n\t\t]\n\t},\n\tfire: {\n\t\ta: \"Fire\",\n\t\tb: \"1F525\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hot\",\n\t\t\t\"cook\",\n\t\t\t\"flame\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t39\n\t\t]\n\t},\n\t\"woman-pouting\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64E-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64E-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64E-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64E-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64E-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64E-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f64e-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F64E\",\n\t\ta: \"Woman Pouting\",\n\t\tb: \"1F64E-200D-2640-FE0F\",\n\t\tc: \"1F64E-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t36\n\t\t]\n\t},\n\t\"flag-sb\": {\n\t\ta: \"Solomon Islands Flag\",\n\t\tb: \"1F1F8-1F1E7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t22\n\t\t]\n\t},\n\tdroplet: {\n\t\ta: \"Droplet\",\n\t\tb: \"1F4A7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"water\",\n\t\t\t\"drip\",\n\t\t\t\"faucet\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t13\n\t\t]\n\t},\n\tno_good: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F645-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3fb.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F645-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3fc.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F645-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3fd.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F645-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3fe.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F645-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f645-1f3ff.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F645-200D-2640-FE0F\",\n\t\ta: \"Face with No Good Gesture\",\n\t\tb: \"1F645\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t32,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-sc\": {\n\t\ta: \"Seychelles Flag\",\n\t\tb: \"1F1F8-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t23\n\t\t]\n\t},\n\tocean: {\n\t\ta: \"Water Wave\",\n\t\tb: \"1F30A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sea\",\n\t\t\t\"water\",\n\t\t\t\"wave\",\n\t\t\t\"nature\",\n\t\t\t\"tsunami\",\n\t\t\t\"disaster\"\n\t\t],\n\t\tk: [\n\t\t\t6,\n\t\t\t2\n\t\t]\n\t},\n\t\"man-gesturing-no\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F645-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f645-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F645-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f645-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F645-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f645-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F645-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f645-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F645-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f645-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Gesturing No\",\n\t\tb: \"1F645-200D-2642-FE0F\",\n\t\tc: \"1F645-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t31,\n\t\t\t47\n\t\t]\n\t},\n\t\"flag-sd\": {\n\t\ta: \"Sudan Flag\",\n\t\tb: \"1F1F8-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t24\n\t\t]\n\t},\n\t\"woman-gesturing-no\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F645-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f645-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F645-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f645-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F645-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f645-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F645-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f645-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F645-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F645-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f645-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 31,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F645\",\n\t\ta: \"Woman Gesturing No\",\n\t\tb: \"1F645-200D-2640-FE0F\",\n\t\tc: \"1F645-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t31,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-se\": {\n\t\ta: \"Sweden Flag\",\n\t\tb: \"1F1F8-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t25\n\t\t]\n\t},\n\t\"flag-sg\": {\n\t\ta: \"Singapore Flag\",\n\t\tb: \"1F1F8-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t26\n\t\t]\n\t},\n\tok_woman: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F646-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3fb.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F646-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3fc.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F646-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3fd.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F646-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3fe.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F646-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f646-1f3ff.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F646-200D-2640-FE0F\",\n\t\ta: \"Face with Ok Gesture\",\n\t\tb: \"1F646\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"women\",\n\t\t\t\"girl\",\n\t\t\t\"female\",\n\t\t\t\"pink\",\n\t\t\t\"human\",\n\t\t\t\"woman\"\n\t\t],\n\t\tk: [\n\t\t\t32,\n\t\t\t19\n\t\t]\n\t},\n\t\"flag-sh\": {\n\t\ta: \"St. Helena Flag\",\n\t\tb: \"1F1F8-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t27\n\t\t]\n\t},\n\t\"man-gesturing-ok\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F646-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f646-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F646-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f646-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F646-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f646-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F646-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f646-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F646-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f646-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Gesturing Ok\",\n\t\tb: \"1F646-200D-2642-FE0F\",\n\t\tc: \"1F646-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t13\n\t\t]\n\t},\n\t\"flag-si\": {\n\t\ta: \"Slovenia Flag\",\n\t\tb: \"1F1F8-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t28\n\t\t]\n\t},\n\t\"woman-gesturing-ok\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F646-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f646-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F646-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f646-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F646-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f646-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F646-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f646-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F646-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F646-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f646-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F646\",\n\t\ta: \"Woman Gesturing Ok\",\n\t\tb: \"1F646-200D-2640-FE0F\",\n\t\tc: \"1F646-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t7\n\t\t]\n\t},\n\tinformation_desk_person: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F481-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3fb.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F481-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3fc.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F481-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3fd.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F481-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3fe.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F481-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f481-1f3ff.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F481-200D-2640-FE0F\",\n\t\ta: \"Information Desk Person\",\n\t\tb: \"1F481\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t23,\n\t\t\t13\n\t\t]\n\t},\n\t\"flag-sj\": {\n\t\ta: \"Svalbard & Jan Mayen Flag\",\n\t\tb: \"1F1F8-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t29\n\t\t]\n\t},\n\t\"man-tipping-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F481-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f481-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F481-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f481-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F481-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f481-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F481-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f481-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F481-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f481-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Tipping Hand\",\n\t\tb: \"1F481-200D-2642-FE0F\",\n\t\tc: \"1F481-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t7\n\t\t]\n\t},\n\t\"flag-sk\": {\n\t\ta: \"Slovakia Flag\",\n\t\tb: \"1F1F8-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t30\n\t\t]\n\t},\n\t\"flag-sl\": {\n\t\ta: \"Sierra Leone Flag\",\n\t\tb: \"1F1F8-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t31\n\t\t]\n\t},\n\t\"woman-tipping-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F481-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f481-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F481-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f481-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F481-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f481-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F481-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f481-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F481-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F481-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f481-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F481\",\n\t\ta: \"Woman Tipping Hand\",\n\t\tb: \"1F481-200D-2640-FE0F\",\n\t\tc: \"1F481-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-sm\": {\n\t\ta: \"San Marino Flag\",\n\t\tb: \"1F1F8-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t32\n\t\t]\n\t},\n\traising_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64B-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3fb.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64B-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3fc.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64B-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3fd.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64B-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3fe.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64B-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64b-1f3ff.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F64B-200D-2640-FE0F\",\n\t\ta: \"Happy Person Raising One Hand\",\n\t\tb: \"1F64B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t33,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-sn\": {\n\t\ta: \"Senegal Flag\",\n\t\tb: \"1F1F8-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t33\n\t\t]\n\t},\n\t\"man-raising-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64B-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64B-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64B-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64B-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64B-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f64b-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Raising Hand\",\n\t\tb: \"1F64B-200D-2642-FE0F\",\n\t\tc: \"1F64B-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t33,\n\t\t\t0\n\t\t]\n\t},\n\t\"flag-so\": {\n\t\ta: \"Somalia Flag\",\n\t\tb: \"1F1F8-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t34\n\t\t]\n\t},\n\t\"woman-raising-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64B-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64B-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64B-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64B-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64B-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F64B-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f64b-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F64B\",\n\t\ta: \"Woman Raising Hand\",\n\t\tb: \"1F64B-200D-2640-FE0F\",\n\t\tc: \"1F64B-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t46\n\t\t]\n\t},\n\t\"flag-sr\": {\n\t\ta: \"Suriname Flag\",\n\t\tb: \"1F1F8-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t35\n\t\t]\n\t},\n\tbow: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F647-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3fb.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F647-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3fc.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F647-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3fd.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F647-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3fe.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F647-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f647-1f3ff.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F647-200D-2642-FE0F\",\n\t\ta: \"Person Bowing Deeply\",\n\t\tb: \"1F647\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t32,\n\t\t\t37\n\t\t]\n\t},\n\t\"man-bowing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F647-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f647-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F647-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f647-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F647-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f647-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F647-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f647-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F647-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f647-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F647\",\n\t\ta: \"Man Bowing\",\n\t\tb: \"1F647-200D-2642-FE0F\",\n\t\tc: \"1F647-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t31\n\t\t]\n\t},\n\t\"flag-ss\": {\n\t\ta: \"South Sudan Flag\",\n\t\tb: \"1F1F8-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t36\n\t\t]\n\t},\n\t\"woman-bowing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F647-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f647-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F647-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f647-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F647-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f647-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F647-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f647-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F647-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F647-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f647-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 32,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Bowing\",\n\t\tb: \"1F647-200D-2640-FE0F\",\n\t\tc: \"1F647-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t32,\n\t\t\t25\n\t\t]\n\t},\n\t\"flag-st\": {\n\t\ta: \"São Tomé & Príncipe Flag\",\n\t\tb: \"1F1F8-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t37\n\t\t]\n\t},\n\tface_palm: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F926-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3fb.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F926-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F926-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F926-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F926-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f926-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Face Palm\",\n\t\tb: \"1F926\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t41\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-sv\": {\n\t\ta: \"El Salvador Flag\",\n\t\tb: \"1F1F8-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t38\n\t\t]\n\t},\n\t\"man-facepalming\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F926-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f926-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F926-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f926-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F926-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f926-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F926-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f926-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F926-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f926-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Facepalming\",\n\t\tb: \"1F926-200D-2642-FE0F\",\n\t\tc: \"1F926-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t35\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-sx\": {\n\t\ta: \"Sint Maarten Flag\",\n\t\tb: \"1F1F8-1F1FD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t39\n\t\t]\n\t},\n\t\"flag-sy\": {\n\t\ta: \"Syria Flag\",\n\t\tb: \"1F1F8-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t40\n\t\t]\n\t},\n\t\"woman-facepalming\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F926-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f926-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F926-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f926-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F926-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f926-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F926-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f926-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F926-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F926-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f926-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Facepalming\",\n\t\tb: \"1F926-200D-2640-FE0F\",\n\t\tc: \"1F926-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t29\n\t\t],\n\t\to: 9\n\t},\n\tshrug: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F937-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3fb.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F937-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3fc.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F937-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3fd.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F937-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3fe.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F937-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f937-1f3ff.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Shrug\",\n\t\tb: \"1F937\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t6\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-sz\": {\n\t\ta: \"Swaziland Flag\",\n\t\tb: \"1F1F8-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-ta\": {\n\t\ta: \"Tristan Da Cunha Flag\",\n\t\tb: \"1F1F9-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t42\n\t\t]\n\t},\n\t\"man-shrugging\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F937-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f937-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F937-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f937-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F937-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f937-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F937-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f937-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F937-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f937-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Shrugging\",\n\t\tb: \"1F937-200D-2642-FE0F\",\n\t\tc: \"1F937-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t0\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-shrugging\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F937-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f937-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F937-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f937-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F937-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f937-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F937-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f937-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F937-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F937-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f937-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Shrugging\",\n\t\tb: \"1F937-200D-2640-FE0F\",\n\t\tc: \"1F937-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t46\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-tc\": {\n\t\ta: \"Turks & Caicos Islands Flag\",\n\t\tb: \"1F1F9-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t43\n\t\t]\n\t},\n\tmassage: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F486-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3fb.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F486-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3fc.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F486-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3fd.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F486-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3fe.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F486-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f486-1f3ff.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F486-200D-2640-FE0F\",\n\t\ta: \"Face Massage\",\n\t\tb: \"1F486\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t24,\n\t\t\t10\n\t\t]\n\t},\n\t\"flag-td\": {\n\t\ta: \"Chad Flag\",\n\t\tb: \"1F1F9-1F1E9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t44\n\t\t]\n\t},\n\t\"man-getting-massage\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F486-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f486-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F486-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f486-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F486-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f486-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F486-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f486-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F486-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f486-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Getting Massage\",\n\t\tb: \"1F486-200D-2642-FE0F\",\n\t\tc: \"1F486-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t24,\n\t\t\t4\n\t\t]\n\t},\n\t\"flag-tf\": {\n\t\ta: \"French Southern Territories Flag\",\n\t\tb: \"1F1F9-1F1EB\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t45\n\t\t]\n\t},\n\t\"woman-getting-massage\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F486-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f486-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F486-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f486-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F486-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f486-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F486-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f486-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F486-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F486-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f486-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F486\",\n\t\ta: \"Woman Getting Massage\",\n\t\tb: \"1F486-200D-2640-FE0F\",\n\t\tc: \"1F486-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t23,\n\t\t\t50\n\t\t]\n\t},\n\t\"flag-tg\": {\n\t\ta: \"Togo Flag\",\n\t\tb: \"1F1F9-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t46\n\t\t]\n\t},\n\thaircut: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F487-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3fb.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F487-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3fc.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F487-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3fd.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F487-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3fe.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F487-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f487-1f3ff.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F487-200D-2640-FE0F\",\n\t\ta: \"Haircut\",\n\t\tb: \"1F487\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t24,\n\t\t\t28\n\t\t]\n\t},\n\t\"flag-th\": {\n\t\ta: \"Thailand Flag\",\n\t\tb: \"1F1F9-1F1ED\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t47\n\t\t]\n\t},\n\t\"man-getting-haircut\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F487-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f487-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F487-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f487-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F487-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f487-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F487-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f487-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F487-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f487-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Getting Haircut\",\n\t\tb: \"1F487-200D-2642-FE0F\",\n\t\tc: \"1F487-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t24,\n\t\t\t22\n\t\t]\n\t},\n\t\"flag-tj\": {\n\t\ta: \"Tajikistan Flag\",\n\t\tb: \"1F1F9-1F1EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t48\n\t\t]\n\t},\n\t\"flag-tk\": {\n\t\ta: \"Tokelau Flag\",\n\t\tb: \"1F1F9-1F1F0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t49\n\t\t]\n\t},\n\t\"woman-getting-haircut\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F487-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f487-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F487-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f487-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F487-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f487-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F487-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f487-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F487-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F487-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f487-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 24,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F487\",\n\t\ta: \"Woman Getting Haircut\",\n\t\tb: \"1F487-200D-2640-FE0F\",\n\t\tc: \"1F487-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t24,\n\t\t\t16\n\t\t]\n\t},\n\twalking: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B6-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3fb.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B6-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3fc.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B6-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3fd.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B6-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3fe.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B6-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b6-1f3ff.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F6B6-200D-2642-FE0F\",\n\t\ta: \"Pedestrian\",\n\t\tb: \"1F6B6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t36,\n\t\t\t21\n\t\t]\n\t},\n\t\"flag-tl\": {\n\t\ta: \"Timor-Leste Flag\",\n\t\tb: \"1F1F9-1F1F1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t50\n\t\t]\n\t},\n\t\"man-walking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B6-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B6-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B6-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B6-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B6-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f6b6-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F6B6\",\n\t\ta: \"Man Walking\",\n\t\tb: \"1F6B6-200D-2642-FE0F\",\n\t\tc: \"1F6B6-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t36,\n\t\t\t15\n\t\t]\n\t},\n\t\"flag-tm\": {\n\t\ta: \"Turkmenistan Flag\",\n\t\tb: \"1F1F9-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t4,\n\t\t\t51\n\t\t]\n\t},\n\t\"woman-walking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B6-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B6-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B6-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B6-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B6-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B6-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f6b6-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Walking\",\n\t\tb: \"1F6B6-200D-2640-FE0F\",\n\t\tc: \"1F6B6-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t36,\n\t\t\t9\n\t\t]\n\t},\n\t\"flag-tn\": {\n\t\ta: \"Tunisia Flag\",\n\t\tb: \"1F1F9-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t0\n\t\t]\n\t},\n\trunner: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C3-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3fb.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C3-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3fc.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C3-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3fd.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C3-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3fe.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C3-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c3-1f3ff.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3C3-200D-2642-FE0F\",\n\t\ta: \"Runner\",\n\t\tb: \"1F3C3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t9,\n\t\t\t46\n\t\t],\n\t\tn: [\n\t\t\t\"running\"\n\t\t]\n\t},\n\t\"flag-to\": {\n\t\ta: \"Tonga Flag\",\n\t\tb: \"1F1F9-1F1F4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t1\n\t\t]\n\t},\n\t\"man-running\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C3-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C3-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C3-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C3-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C3-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3c3-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3C3\",\n\t\ta: \"Man Running\",\n\t\tb: \"1F3C3-200D-2642-FE0F\",\n\t\tc: \"1F3C3-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t9,\n\t\t\t40\n\t\t]\n\t},\n\t\"flag-tr\": {\n\t\ta: \"Turkey Flag\",\n\t\tb: \"1F1F9-1F1F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t2\n\t\t]\n\t},\n\t\"flag-tt\": {\n\t\ta: \"Trinidad & Tobago Flag\",\n\t\tb: \"1F1F9-1F1F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t3\n\t\t]\n\t},\n\t\"woman-running\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C3-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C3-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C3-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C3-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C3-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C3-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3c3-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Running\",\n\t\tb: \"1F3C3-200D-2640-FE0F\",\n\t\tc: \"1F3C3-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t9,\n\t\t\t34\n\t\t]\n\t},\n\t\"flag-tv\": {\n\t\ta: \"Tuvalu Flag\",\n\t\tb: \"1F1F9-1F1FB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t4\n\t\t]\n\t},\n\tdancer: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F483-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3fb.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F483-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3fc.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F483-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3fd.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F483-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3fe.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F483-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f483-1f3ff.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Dancer\",\n\t\tb: \"1F483\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"female\",\n\t\t\t\"girl\",\n\t\t\t\"woman\",\n\t\t\t\"fun\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t37\n\t\t]\n\t},\n\t\"flag-tw\": {\n\t\ta: \"Taiwan Flag\",\n\t\tb: \"1F1F9-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t5\n\t\t]\n\t},\n\tman_dancing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F57A-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F57A-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F57A-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F57A-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F57A-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f57a-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Dancing\",\n\t\tb: \"1F57A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"male\",\n\t\t\t\"boy\",\n\t\t\t\"fun\",\n\t\t\t\"dancer\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t21\n\t\t],\n\t\to: 9\n\t},\n\tdancers: {\n\t\tobsoleted_by: \"1F46F-200D-2640-FE0F\",\n\t\ta: \"Woman with Bunny Ears\",\n\t\tb: \"1F46F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t21,\n\t\t\t1\n\t\t]\n\t},\n\t\"flag-tz\": {\n\t\ta: \"Tanzania Flag\",\n\t\tb: \"1F1F9-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t6\n\t\t]\n\t},\n\t\"flag-ua\": {\n\t\ta: \"Ukraine Flag\",\n\t\tb: \"1F1FA-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t7\n\t\t]\n\t},\n\t\"man-with-bunny-ears-partying\": {\n\t\ta: \"Man with Bunny Ears Partying\",\n\t\tb: \"1F46F-200D-2642-FE0F\",\n\t\tc: \"1F46F-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t21,\n\t\t\t0\n\t\t]\n\t},\n\t\"woman-with-bunny-ears-partying\": {\n\t\tobsoletes: \"1F46F\",\n\t\ta: \"Woman with Bunny Ears Partying\",\n\t\tb: \"1F46F-200D-2640-FE0F\",\n\t\tc: \"1F46F-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t51\n\t\t]\n\t},\n\t\"flag-ug\": {\n\t\ta: \"Uganda Flag\",\n\t\tb: \"1F1FA-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t8\n\t\t]\n\t},\n\t\"flag-um\": {\n\t\ta: \"U.s. Outlying Islands Flag\",\n\t\tb: \"1F1FA-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t9\n\t\t]\n\t},\n\tperson_in_steamy_room: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D6-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3fb.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FB-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D6-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3fc.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FC-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D6-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3fd.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FD-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D6-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3fe.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FE-200D-2642-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D6-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d6-1f3ff.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D6-1F3FF-200D-2642-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9D6-200D-2642-FE0F\",\n\t\ta: \"Person in Steamy Room\",\n\t\tb: \"1F9D6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t40\n\t\t],\n\t\to: 10\n\t},\n\twoman_in_steamy_room: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D6-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D6-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D6-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D6-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D6-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9d6-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman in Steamy Room\",\n\t\tb: \"1F9D6-200D-2640-FE0F\",\n\t\tc: \"1F9D6-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t28\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-un\": {\n\t\ta: \"United Nations Flag\",\n\t\tb: \"1F1FA-1F1F3\",\n\t\td: false,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t5,\n\t\t\t10\n\t\t]\n\t},\n\tus: {\n\t\ta: \"United States Flag\",\n\t\tb: \"1F1FA-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"united\",\n\t\t\t\"states\",\n\t\t\t\"america\",\n\t\t\t\"flag\",\n\t\t\t\"nation\",\n\t\t\t\"country\",\n\t\t\t\"banner\"\n\t\t],\n\t\tk: [\n\t\t\t5,\n\t\t\t11\n\t\t],\n\t\tn: [\n\t\t\t\"flag-us\"\n\t\t]\n\t},\n\tman_in_steamy_room: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D6-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D6-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D6-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D6-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D6-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D6-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9d6-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D6-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9D6\",\n\t\ta: \"Man in Steamy Room\",\n\t\tb: \"1F9D6-200D-2642-FE0F\",\n\t\tc: \"1F9D6-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t34\n\t\t],\n\t\to: 10\n\t},\n\tperson_climbing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D7-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3fb.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D7-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3fc.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D7-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3fd.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D7-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3fe.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D7-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d7-1f3ff.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D7-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9D7-200D-2640-FE0F\",\n\t\ta: \"Person Climbing\",\n\t\tb: \"1F9D7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t6\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-uy\": {\n\t\ta: \"Uruguay Flag\",\n\t\tb: \"1F1FA-1F1FE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t12\n\t\t]\n\t},\n\twoman_climbing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D7-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D7-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D7-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D7-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D7-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9d7-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 43,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D7-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9D7\",\n\t\ta: \"Woman Climbing\",\n\t\tb: \"1F9D7-200D-2640-FE0F\",\n\t\tc: \"1F9D7-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t43,\n\t\t\t46\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-uz\": {\n\t\ta: \"Uzbekistan Flag\",\n\t\tb: \"1F1FA-1F1FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t13\n\t\t]\n\t},\n\tman_climbing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D7-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D7-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D7-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D7-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D7-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D7-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9d7-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Climbing\",\n\t\tb: \"1F9D7-200D-2642-FE0F\",\n\t\tc: \"1F9D7-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t0\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-va\": {\n\t\ta: \"Vatican City Flag\",\n\t\tb: \"1F1FB-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t14\n\t\t]\n\t},\n\tperson_in_lotus_position: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D8-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3fb.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FB-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D8-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3fc.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FC-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D8-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3fd.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FD-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D8-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3fe.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FE-200D-2640-FE0F\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D8-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f9d8-1f3ff.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoleted_by: \"1F9D8-1F3FF-200D-2640-FE0F\"\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F9D8-200D-2640-FE0F\",\n\t\ta: \"Person in Lotus Position\",\n\t\tb: \"1F9D8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t24\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-vc\": {\n\t\ta: \"St. Vincent & Grenadines Flag\",\n\t\tb: \"1F1FB-1F1E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t15\n\t\t]\n\t},\n\t\"flag-ve\": {\n\t\ta: \"Venezuela Flag\",\n\t\tb: \"1F1FB-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t16\n\t\t]\n\t},\n\twoman_in_lotus_position: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D8-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FB\"\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D8-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FC\"\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D8-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FD\"\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D8-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FE\"\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D8-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f9d8-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false,\n\t\t\t\tobsoletes: \"1F9D8-1F3FF\"\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F9D8\",\n\t\ta: \"Woman in Lotus Position\",\n\t\tb: \"1F9D8-200D-2640-FE0F\",\n\t\tc: \"1F9D8-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t12\n\t\t],\n\t\to: 10\n\t},\n\tman_in_lotus_position: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F9D8-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F9D8-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F9D8-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F9D8-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F9D8-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F9D8-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f9d8-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 44,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man in Lotus Position\",\n\t\tb: \"1F9D8-200D-2642-FE0F\",\n\t\tc: \"1F9D8-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t44,\n\t\t\t18\n\t\t],\n\t\to: 10\n\t},\n\t\"flag-vg\": {\n\t\ta: \"British Virgin Islands Flag\",\n\t\tb: \"1F1FB-1F1EC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t17\n\t\t]\n\t},\n\t\"flag-vi\": {\n\t\ta: \"U.s. Virgin Islands Flag\",\n\t\tb: \"1F1FB-1F1EE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t18\n\t\t]\n\t},\n\tbath: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6C0-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3fb.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6C0-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3fc.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6C0-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3fd.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6C0-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3fe.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6C0-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6c0-1f3ff.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Bath\",\n\t\tb: \"1F6C0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"clean\",\n\t\t\t\"shower\",\n\t\t\t\"bathroom\"\n\t\t],\n\t\tk: [\n\t\t\t36,\n\t\t\t36\n\t\t]\n\t},\n\tsleeping_accommodation: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6CC-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3fb.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6CC-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3fc.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6CC-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3fd.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6CC-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3fe.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6CC-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6cc-1f3ff.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Sleeping Accommodation\",\n\t\tb: \"1F6CC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t36,\n\t\t\t48\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-vn\": {\n\t\ta: \"Vietnam Flag\",\n\t\tb: \"1F1FB-1F1F3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t19\n\t\t]\n\t},\n\tman_in_business_suit_levitating: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F574-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3fb.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F574-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3fc.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F574-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3fd.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F574-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3fe.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F574-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f574-1f3ff.png\",\n\t\t\t\tsheet_x: 28,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man in Business Suit Levitating\",\n\t\tb: \"1F574-FE0F\",\n\t\tc: \"1F574\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t28,\n\t\t\t45\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-vu\": {\n\t\ta: \"Vanuatu Flag\",\n\t\tb: \"1F1FB-1F1FA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t20\n\t\t]\n\t},\n\t\"flag-wf\": {\n\t\ta: \"Wallis & Futuna Flag\",\n\t\tb: \"1F1FC-1F1EB\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t21\n\t\t]\n\t},\n\tspeaking_head_in_silhouette: {\n\t\ta: \"Speaking Head in Silhouette\",\n\t\tb: \"1F5E3-FE0F\",\n\t\tc: \"1F5E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t30,\n\t\t\t14\n\t\t],\n\t\to: 7\n\t},\n\tbust_in_silhouette: {\n\t\ta: \"Bust in Silhouette\",\n\t\tb: \"1F464\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"user\",\n\t\t\t\"person\",\n\t\t\t\"human\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t40\n\t\t]\n\t},\n\t\"flag-ws\": {\n\t\ta: \"Samoa Flag\",\n\t\tb: \"1F1FC-1F1F8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t22\n\t\t]\n\t},\n\tbusts_in_silhouette: {\n\t\ta: \"Busts in Silhouette\",\n\t\tb: \"1F465\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"user\",\n\t\t\t\"person\",\n\t\t\t\"human\",\n\t\t\t\"group\",\n\t\t\t\"team\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t41\n\t\t]\n\t},\n\t\"flag-xk\": {\n\t\ta: \"Kosovo Flag\",\n\t\tb: \"1F1FD-1F1F0\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t23\n\t\t]\n\t},\n\tfencer: {\n\t\ta: \"Fencer\",\n\t\tb: \"1F93A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t48\n\t\t],\n\t\to: 9\n\t},\n\t\"flag-ye\": {\n\t\ta: \"Yemen Flag\",\n\t\tb: \"1F1FE-1F1EA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t24\n\t\t]\n\t},\n\t\"flag-yt\": {\n\t\ta: \"Mayotte Flag\",\n\t\tb: \"1F1FE-1F1F9\",\n\t\td: true,\n\t\te: false,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t25\n\t\t]\n\t},\n\thorse_racing: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C7-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3fb.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C7-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3fc.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C7-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3fd.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C7-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3fe.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C7-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c7-1f3ff.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Horse Racing\",\n\t\tb: \"1F3C7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"animal\",\n\t\t\t\"betting\",\n\t\t\t\"competition\",\n\t\t\t\"gambling\",\n\t\t\t\"luck\"\n\t\t],\n\t\tk: [\n\t\t\t10,\n\t\t\t20\n\t\t]\n\t},\n\t\"flag-za\": {\n\t\ta: \"South Africa Flag\",\n\t\tb: \"1F1FF-1F1E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t26\n\t\t]\n\t},\n\tskier: {\n\t\ta: \"Skier\",\n\t\tb: \"26F7-FE0F\",\n\t\tc: \"26F7\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"winter\",\n\t\t\t\"snow\"\n\t\t],\n\t\tk: [\n\t\t\t48,\n\t\t\t44\n\t\t],\n\t\to: 5\n\t},\n\t\"flag-zm\": {\n\t\ta: \"Zambia Flag\",\n\t\tb: \"1F1FF-1F1F2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t27\n\t\t]\n\t},\n\tsnowboarder: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C2-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3fb.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C2-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3fc.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C2-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3fd.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C2-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3fe.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C2-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c2-1f3ff.png\",\n\t\t\t\tsheet_x: 9,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Snowboarder\",\n\t\tb: \"1F3C2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"winter\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t28\n\t\t]\n\t},\n\tgolfer: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CC-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3fb.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CC-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3fc.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CC-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3fd.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CC-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3fe.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CC-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cc-1f3ff.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3CC-FE0F-200D-2642-FE0F\",\n\t\ta: \"Golfer\",\n\t\tb: \"1F3CC-FE0F\",\n\t\tc: \"1F3CC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t24\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-zw\": {\n\t\ta: \"Zimbabwe Flag\",\n\t\tb: \"1F1FF-1F1FC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t5,\n\t\t\t28\n\t\t]\n\t},\n\t\"man-golfing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CC-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CC-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CC-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CC-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CC-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3cc-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3CC-FE0F\",\n\t\ta: \"Man Golfing\",\n\t\tb: \"1F3CC-FE0F-200D-2642-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-england\": {\n\t\ta: \"England Flag\",\n\t\tb: \"1F3F4-E0067-E0062-E0065-E006E-E0067-E007F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t16\n\t\t],\n\t\to: 7\n\t},\n\t\"woman-golfing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CC-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CC-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CC-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CC-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CC-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CC-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3cc-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Golfing\",\n\t\tb: \"1F3CC-FE0F-200D-2640-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t12\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-scotland\": {\n\t\ta: \"Scotland Flag\",\n\t\tb: \"1F3F4-E0067-E0062-E0073-E0063-E0074-E007F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t17\n\t\t],\n\t\to: 7\n\t},\n\t\"flag-wales\": {\n\t\ta: \"Wales Flag\",\n\t\tb: \"1F3F4-E0067-E0062-E0077-E006C-E0073-E007F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t12,\n\t\t\t18\n\t\t],\n\t\to: 7\n\t},\n\tsurfer: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C4-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3fb.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C4-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3fc.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C4-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3fd.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C4-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3fe.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C4-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3c4-1f3ff.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3C4-200D-2642-FE0F\",\n\t\ta: \"Surfer\",\n\t\tb: \"1F3C4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t10,\n\t\t\t12\n\t\t]\n\t},\n\t\"man-surfing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C4-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C4-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C4-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C4-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C4-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3c4-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3C4\",\n\t\ta: \"Man Surfing\",\n\t\tb: \"1F3C4-200D-2642-FE0F\",\n\t\tc: \"1F3C4-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t6\n\t\t]\n\t},\n\t\"woman-surfing\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3C4-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3C4-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3C4-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3C4-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3C4-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3C4-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3c4-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Surfing\",\n\t\tb: \"1F3C4-200D-2640-FE0F\",\n\t\tc: \"1F3C4-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t0\n\t\t]\n\t},\n\trowboat: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6A3-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3fb.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6A3-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3fc.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6A3-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3fd.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6A3-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3fe.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6A3-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6a3-1f3ff.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F6A3-200D-2642-FE0F\",\n\t\ta: \"Rowboat\",\n\t\tb: \"1F6A3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t35,\n\t\t\t3\n\t\t]\n\t},\n\t\"man-rowing-boat\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6A3-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6A3-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6A3-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6A3-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6A3-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f6a3-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F6A3\",\n\t\ta: \"Man Rowing Boat\",\n\t\tb: \"1F6A3-200D-2642-FE0F\",\n\t\tc: \"1F6A3-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t34,\n\t\t\t49\n\t\t]\n\t},\n\t\"woman-rowing-boat\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6A3-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6A3-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6A3-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6A3-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6A3-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6A3-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f6a3-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Rowing Boat\",\n\t\tb: \"1F6A3-200D-2640-FE0F\",\n\t\tc: \"1F6A3-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t34,\n\t\t\t43\n\t\t]\n\t},\n\tswimmer: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CA-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3fb.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CA-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3fc.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CA-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3fd.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CA-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3fe.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CA-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3ca-1f3ff.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3CA-200D-2642-FE0F\",\n\t\ta: \"Swimmer\",\n\t\tb: \"1F3CA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t10,\n\t\t\t40\n\t\t]\n\t},\n\t\"man-swimming\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CA-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CA-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CA-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CA-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CA-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3ca-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3CA\",\n\t\ta: \"Man Swimming\",\n\t\tb: \"1F3CA-200D-2642-FE0F\",\n\t\tc: \"1F3CA-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t34\n\t\t]\n\t},\n\t\"woman-swimming\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CA-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CA-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CA-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CA-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CA-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CA-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3ca-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Swimming\",\n\t\tb: \"1F3CA-200D-2640-FE0F\",\n\t\tc: \"1F3CA-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t28\n\t\t]\n\t},\n\tperson_with_ball: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"26F9-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"26F9-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"26F9-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"26F9-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"26F9-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"26f9-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"26F9-FE0F-200D-2642-FE0F\",\n\t\ta: \"Person with Ball\",\n\t\tb: \"26F9-FE0F\",\n\t\tc: \"26F9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t49,\n\t\t\t6\n\t\t],\n\t\to: 5\n\t},\n\t\"man-bouncing-ball\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"26F9-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FB-200D-2642\",\n\t\t\t\timage: \"26f9-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"26F9-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FC-200D-2642\",\n\t\t\t\timage: \"26f9-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"26F9-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FD-200D-2642\",\n\t\t\t\timage: \"26f9-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"26F9-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FE-200D-2642\",\n\t\t\t\timage: \"26f9-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"26F9-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FF-200D-2642\",\n\t\t\t\timage: \"26f9-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"26F9-FE0F\",\n\t\ta: \"Man Bouncing Ball\",\n\t\tb: \"26F9-FE0F-200D-2642-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t49,\n\t\t\t0\n\t\t],\n\t\to: 5\n\t},\n\t\"woman-bouncing-ball\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"26F9-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FB-200D-2640\",\n\t\t\t\timage: \"26f9-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"26F9-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FC-200D-2640\",\n\t\t\t\timage: \"26f9-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"26F9-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FD-200D-2640\",\n\t\t\t\timage: \"26f9-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"26F9-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FE-200D-2640\",\n\t\t\t\timage: \"26f9-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"26F9-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"26F9-1F3FF-200D-2640\",\n\t\t\t\timage: \"26f9-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 48,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Bouncing Ball\",\n\t\tb: \"26F9-FE0F-200D-2640-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t46\n\t\t],\n\t\to: 5\n\t},\n\tweight_lifter: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CB-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3fb.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CB-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3fc.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CB-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3fd.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CB-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3fe.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CB-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f3cb-1f3ff.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F3CB-FE0F-200D-2642-FE0F\",\n\t\ta: \"Weight Lifter\",\n\t\tb: \"1F3CB-FE0F\",\n\t\tc: \"1F3CB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t6\n\t\t],\n\t\to: 7\n\t},\n\t\"man-lifting-weights\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CB-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CB-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CB-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CB-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CB-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f3cb-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 11,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F3CB-FE0F\",\n\t\ta: \"Man Lifting Weights\",\n\t\tb: \"1F3CB-FE0F-200D-2642-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t0\n\t\t],\n\t\to: 7\n\t},\n\t\"woman-lifting-weights\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F3CB-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F3CB-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F3CB-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F3CB-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F3CB-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F3CB-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f3cb-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 10,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Lifting Weights\",\n\t\tb: \"1F3CB-FE0F-200D-2640-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t10,\n\t\t\t46\n\t\t],\n\t\to: 7\n\t},\n\tbicyclist: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B4-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3fb.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B4-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3fc.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B4-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3fd.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B4-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3fe.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B4-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b4-1f3ff.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F6B4-200D-2642-FE0F\",\n\t\ta: \"Bicyclist\",\n\t\tb: \"1F6B4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t35,\n\t\t\t37\n\t\t]\n\t},\n\t\"man-biking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B4-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B4-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B4-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B4-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B4-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f6b4-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F6B4\",\n\t\ta: \"Man Biking\",\n\t\tb: \"1F6B4-200D-2642-FE0F\",\n\t\tc: \"1F6B4-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t35,\n\t\t\t31\n\t\t]\n\t},\n\t\"woman-biking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B4-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B4-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B4-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B4-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B4-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B4-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f6b4-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Biking\",\n\t\tb: \"1F6B4-200D-2640-FE0F\",\n\t\tc: \"1F6B4-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t35,\n\t\t\t25\n\t\t]\n\t},\n\tmountain_bicyclist: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B5-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3fb.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B5-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3fc.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B5-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3fd.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B5-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3fe.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B5-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f6b5-1f3ff.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\tobsoleted_by: \"1F6B5-200D-2642-FE0F\",\n\t\ta: \"Mountain Bicyclist\",\n\t\tb: \"1F6B5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t36,\n\t\t\t3\n\t\t]\n\t},\n\t\"man-mountain-biking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B5-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B5-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B5-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B5-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B5-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f6b5-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 36,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\tobsoletes: \"1F6B5\",\n\t\ta: \"Man Mountain Biking\",\n\t\tb: \"1F6B5-200D-2642-FE0F\",\n\t\tc: \"1F6B5-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t35,\n\t\t\t49\n\t\t]\n\t},\n\t\"woman-mountain-biking\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F6B5-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F6B5-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F6B5-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F6B5-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F6B5-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F6B5-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f6b5-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 35,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Mountain Biking\",\n\t\tb: \"1F6B5-200D-2640-FE0F\",\n\t\tc: \"1F6B5-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t35,\n\t\t\t43\n\t\t]\n\t},\n\tracing_car: {\n\t\ta: \"Racing Car\",\n\t\tb: \"1F3CE-FE0F\",\n\t\tc: \"1F3CE\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"sports\",\n\t\t\t\"race\",\n\t\t\t\"fast\",\n\t\t\t\"formula\",\n\t\t\t\"f1\"\n\t\t],\n\t\tk: [\n\t\t\t11,\n\t\t\t31\n\t\t],\n\t\to: 7\n\t},\n\tracing_motorcycle: {\n\t\ta: \"Racing Motorcycle\",\n\t\tb: \"1F3CD-FE0F\",\n\t\tc: \"1F3CD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t11,\n\t\t\t30\n\t\t],\n\t\to: 7\n\t},\n\tperson_doing_cartwheel: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F938-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3fb.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F938-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3fc.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F938-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3fd.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F938-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3fe.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F938-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f938-1f3ff.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Person Doing Cartwheel\",\n\t\tb: \"1F938\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t24\n\t\t],\n\t\to: 9\n\t},\n\t\"man-cartwheeling\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F938-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f938-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F938-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f938-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F938-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f938-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F938-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f938-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F938-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f938-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Cartwheeling\",\n\t\tb: \"1F938-200D-2642-FE0F\",\n\t\tc: \"1F938-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t18\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-cartwheeling\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F938-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f938-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F938-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f938-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F938-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f938-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F938-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f938-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F938-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F938-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f938-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Cartwheeling\",\n\t\tb: \"1F938-200D-2640-FE0F\",\n\t\tc: \"1F938-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t12\n\t\t],\n\t\to: 9\n\t},\n\twrestlers: {\n\t\ta: \"Wrestlers\",\n\t\tb: \"1F93C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t51\n\t\t],\n\t\to: 9\n\t},\n\t\"man-wrestling\": {\n\t\ta: \"Man Wrestling\",\n\t\tb: \"1F93C-200D-2642-FE0F\",\n\t\tc: \"1F93C-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t50\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-wrestling\": {\n\t\ta: \"Woman Wrestling\",\n\t\tb: \"1F93C-200D-2640-FE0F\",\n\t\tc: \"1F93C-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t49\n\t\t],\n\t\to: 9\n\t},\n\twater_polo: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3fb.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3fc.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3fd.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3fe.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93d-1f3ff.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Water Polo\",\n\t\tb: \"1F93D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t12\n\t\t],\n\t\to: 9\n\t},\n\t\"man-playing-water-polo\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93D-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93D-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93D-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93D-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93D-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f93d-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Playing Water Polo\",\n\t\tb: \"1F93D-200D-2642-FE0F\",\n\t\tc: \"1F93D-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t6\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-playing-water-polo\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93D-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93D-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93D-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93D-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93D-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93D-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f93d-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Playing Water Polo\",\n\t\tb: \"1F93D-200D-2640-FE0F\",\n\t\tc: \"1F93D-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t0\n\t\t],\n\t\to: 9\n\t},\n\thandball: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3fb.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3fc.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3fd.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3fe.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f93e-1f3ff.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Handball\",\n\t\tb: \"1F93E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t30\n\t\t],\n\t\to: 9\n\t},\n\t\"man-playing-handball\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93E-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93E-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93E-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93E-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93E-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f93e-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Playing Handball\",\n\t\tb: \"1F93E-200D-2642-FE0F\",\n\t\tc: \"1F93E-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t24\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-playing-handball\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F93E-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F93E-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F93E-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F93E-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F93E-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F93E-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f93e-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 41,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Playing Handball\",\n\t\tb: \"1F93E-200D-2640-FE0F\",\n\t\tc: \"1F93E-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t41,\n\t\t\t18\n\t\t],\n\t\to: 9\n\t},\n\tjuggling: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F939-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3fb.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F939-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3fc.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F939-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3fd.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F939-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3fe.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F939-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f939-1f3ff.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Juggling\",\n\t\tb: \"1F939\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t42\n\t\t],\n\t\to: 9\n\t},\n\t\"man-juggling\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F939-1F3FB-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FB-200D-2642\",\n\t\t\t\timage: \"1f939-1f3fb-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F939-1F3FC-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FC-200D-2642\",\n\t\t\t\timage: \"1f939-1f3fc-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F939-1F3FD-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FD-200D-2642\",\n\t\t\t\timage: \"1f939-1f3fd-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F939-1F3FE-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FE-200D-2642\",\n\t\t\t\timage: \"1f939-1f3fe-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F939-1F3FF-200D-2642-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FF-200D-2642\",\n\t\t\t\timage: \"1f939-1f3ff-200d-2642-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Man Juggling\",\n\t\tb: \"1F939-200D-2642-FE0F\",\n\t\tc: \"1F939-200D-2642\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t36\n\t\t],\n\t\to: 9\n\t},\n\t\"woman-juggling\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F939-1F3FB-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FB-200D-2640\",\n\t\t\t\timage: \"1f939-1f3fb-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F939-1F3FC-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FC-200D-2640\",\n\t\t\t\timage: \"1f939-1f3fc-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F939-1F3FD-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FD-200D-2640\",\n\t\t\t\timage: \"1f939-1f3fd-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F939-1F3FE-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FE-200D-2640\",\n\t\t\t\timage: \"1f939-1f3fe-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F939-1F3FF-200D-2640-FE0F\",\n\t\t\t\tnon_qualified: \"1F939-1F3FF-200D-2640\",\n\t\t\t\timage: \"1f939-1f3ff-200d-2640-fe0f.png\",\n\t\t\t\tsheet_x: 40,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: false,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Woman Juggling\",\n\t\tb: \"1F939-200D-2640-FE0F\",\n\t\tc: \"1F939-200D-2640\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t40,\n\t\t\t30\n\t\t],\n\t\to: 9\n\t},\n\tcouple: {\n\t\ta: \"Man and Woman Holding Hands\",\n\t\tb: \"1F46B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pair\",\n\t\t\t\"people\",\n\t\t\t\"human\",\n\t\t\t\"love\",\n\t\t\t\"date\",\n\t\t\t\"dating\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"marriage\"\n\t\t],\n\t\tk: [\n\t\t\t20,\n\t\t\t30\n\t\t],\n\t\tn: [\n\t\t\t\"man_and_woman_holding_hands\"\n\t\t]\n\t},\n\ttwo_men_holding_hands: {\n\t\ta: \"Two Men Holding Hands\",\n\t\tb: \"1F46C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pair\",\n\t\t\t\"couple\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"bromance\",\n\t\t\t\"friendship\",\n\t\t\t\"people\",\n\t\t\t\"human\"\n\t\t],\n\t\tk: [\n\t\t\t20,\n\t\t\t31\n\t\t]\n\t},\n\ttwo_women_holding_hands: {\n\t\ta: \"Two Women Holding Hands\",\n\t\tb: \"1F46D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"pair\",\n\t\t\t\"friendship\",\n\t\t\t\"couple\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"female\",\n\t\t\t\"people\",\n\t\t\t\"human\"\n\t\t],\n\t\tk: [\n\t\t\t20,\n\t\t\t32\n\t\t]\n\t},\n\tcouplekiss: {\n\t\tobsoleted_by: \"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468\",\n\t\ta: \"Kiss\",\n\t\tb: \"1F48F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t24,\n\t\t\t41\n\t\t]\n\t},\n\t\"woman-kiss-man\": {\n\t\tobsoletes: \"1F48F\",\n\t\ta: \"Woman Kiss Man\",\n\t\tb: \"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468\",\n\t\tc: \"1F469-200D-2764-200D-1F48B-200D-1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t21\n\t\t]\n\t},\n\t\"man-kiss-man\": {\n\t\ta: \"Man Kiss Man\",\n\t\tb: \"1F468-200D-2764-FE0F-200D-1F48B-200D-1F468\",\n\t\tc: \"1F468-200D-2764-200D-1F48B-200D-1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t18,\n\t\t\t10\n\t\t]\n\t},\n\t\"woman-kiss-woman\": {\n\t\ta: \"Woman Kiss Woman\",\n\t\tb: \"1F469-200D-2764-FE0F-200D-1F48B-200D-1F469\",\n\t\tc: \"1F469-200D-2764-200D-1F48B-200D-1F469\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t20,\n\t\t\t22\n\t\t]\n\t},\n\tcouple_with_heart: {\n\t\tobsoleted_by: \"1F469-200D-2764-FE0F-200D-1F468\",\n\t\ta: \"Couple with Heart\",\n\t\tb: \"1F491\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t24,\n\t\t\t43\n\t\t]\n\t},\n\t\"woman-heart-man\": {\n\t\tobsoletes: \"1F491\",\n\t\ta: \"Woman Heart Man\",\n\t\tb: \"1F469-200D-2764-FE0F-200D-1F468\",\n\t\tc: \"1F469-200D-2764-200D-1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t20,\n\t\t\t19\n\t\t]\n\t},\n\t\"man-heart-man\": {\n\t\ta: \"Man Heart Man\",\n\t\tb: \"1F468-200D-2764-FE0F-200D-1F468\",\n\t\tc: \"1F468-200D-2764-200D-1F468\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t18,\n\t\t\t9\n\t\t]\n\t},\n\t\"woman-heart-woman\": {\n\t\ta: \"Woman Heart Woman\",\n\t\tb: \"1F469-200D-2764-FE0F-200D-1F469\",\n\t\tc: \"1F469-200D-2764-200D-1F469\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t20,\n\t\t\t20\n\t\t]\n\t},\n\tfamily: {\n\t\tobsoleted_by: \"1F468-200D-1F469-200D-1F466\",\n\t\ta: \"Family\",\n\t\tb: \"1F46A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: false,\n\t\ti: true,\n\t\tk: [\n\t\t\t20,\n\t\t\t29\n\t\t],\n\t\tn: [\n\t\t\t\"man-woman-boy\"\n\t\t]\n\t},\n\t\"man-woman-boy\": {\n\t\tobsoletes: \"1F46A\",\n\t\ta: \"Man Woman Boy\",\n\t\tb: \"1F468-200D-1F469-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t2\n\t\t],\n\t\tn: [\n\t\t\t\"family\"\n\t\t]\n\t},\n\t\"man-woman-girl\": {\n\t\ta: \"Man Woman Girl\",\n\t\tb: \"1F468-200D-1F469-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t4\n\t\t]\n\t},\n\t\"man-woman-girl-boy\": {\n\t\ta: \"Man Woman Girl Boy\",\n\t\tb: \"1F468-200D-1F469-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t5\n\t\t]\n\t},\n\t\"man-woman-boy-boy\": {\n\t\ta: \"Man Woman Boy Boy\",\n\t\tb: \"1F468-200D-1F469-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t3\n\t\t]\n\t},\n\t\"man-woman-girl-girl\": {\n\t\ta: \"Man Woman Girl Girl\",\n\t\tb: \"1F468-200D-1F469-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t6\n\t\t]\n\t},\n\t\"man-man-boy\": {\n\t\ta: \"Man Man Boy\",\n\t\tb: \"1F468-200D-1F468-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t16,\n\t\t\t49\n\t\t]\n\t},\n\t\"man-man-girl\": {\n\t\ta: \"Man Man Girl\",\n\t\tb: \"1F468-200D-1F468-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t16,\n\t\t\t51\n\t\t]\n\t},\n\t\"man-man-girl-boy\": {\n\t\ta: \"Man Man Girl Boy\",\n\t\tb: \"1F468-200D-1F468-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t0\n\t\t]\n\t},\n\t\"man-man-boy-boy\": {\n\t\ta: \"Man Man Boy Boy\",\n\t\tb: \"1F468-200D-1F468-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t16,\n\t\t\t50\n\t\t]\n\t},\n\t\"man-man-girl-girl\": {\n\t\ta: \"Man Man Girl Girl\",\n\t\tb: \"1F468-200D-1F468-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t17,\n\t\t\t1\n\t\t]\n\t},\n\t\"woman-woman-boy\": {\n\t\ta: \"Woman Woman Boy\",\n\t\tb: \"1F469-200D-1F469-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t12\n\t\t]\n\t},\n\t\"woman-woman-girl\": {\n\t\ta: \"Woman Woman Girl\",\n\t\tb: \"1F469-200D-1F469-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t14\n\t\t]\n\t},\n\t\"woman-woman-girl-boy\": {\n\t\ta: \"Woman Woman Girl Boy\",\n\t\tb: \"1F469-200D-1F469-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t15\n\t\t]\n\t},\n\t\"woman-woman-boy-boy\": {\n\t\ta: \"Woman Woman Boy Boy\",\n\t\tb: \"1F469-200D-1F469-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t13\n\t\t]\n\t},\n\t\"woman-woman-girl-girl\": {\n\t\ta: \"Woman Woman Girl Girl\",\n\t\tb: \"1F469-200D-1F469-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t19,\n\t\t\t16\n\t\t]\n\t},\n\t\"man-boy\": {\n\t\ta: \"Man Boy\",\n\t\tb: \"1F468-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t45\n\t\t]\n\t},\n\t\"man-boy-boy\": {\n\t\ta: \"Man Boy Boy\",\n\t\tb: \"1F468-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t44\n\t\t]\n\t},\n\t\"man-girl\": {\n\t\ta: \"Man Girl\",\n\t\tb: \"1F468-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t48\n\t\t]\n\t},\n\t\"man-girl-boy\": {\n\t\ta: \"Man Girl Boy\",\n\t\tb: \"1F468-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t46\n\t\t]\n\t},\n\t\"man-girl-girl\": {\n\t\ta: \"Man Girl Girl\",\n\t\tb: \"1F468-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t16,\n\t\t\t47\n\t\t]\n\t},\n\t\"woman-boy\": {\n\t\ta: \"Woman Boy\",\n\t\tb: \"1F469-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t8\n\t\t]\n\t},\n\t\"woman-boy-boy\": {\n\t\ta: \"Woman Boy Boy\",\n\t\tb: \"1F469-200D-1F466-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t7\n\t\t]\n\t},\n\t\"woman-girl\": {\n\t\ta: \"Woman Girl\",\n\t\tb: \"1F469-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t11\n\t\t]\n\t},\n\t\"woman-girl-boy\": {\n\t\ta: \"Woman Girl Boy\",\n\t\tb: \"1F469-200D-1F467-200D-1F466\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t9\n\t\t]\n\t},\n\t\"woman-girl-girl\": {\n\t\ta: \"Woman Girl Girl\",\n\t\tb: \"1F469-200D-1F467-200D-1F467\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t19,\n\t\t\t10\n\t\t]\n\t},\n\tselfie: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F933-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F933-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F933-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F933-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F933-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f933-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Selfie\",\n\t\tb: \"1F933\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"camera\",\n\t\t\t\"phone\"\n\t\t],\n\t\tk: [\n\t\t\t39,\n\t\t\t22\n\t\t],\n\t\to: 9\n\t},\n\tmuscle: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F4AA-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3fb.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F4AA-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3fc.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F4AA-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3fd.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F4AA-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3fe.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F4AA-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f4aa-1f3ff.png\",\n\t\t\t\tsheet_x: 25,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Flexed Biceps\",\n\t\tb: \"1F4AA\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"arm\",\n\t\t\t\"flex\",\n\t\t\t\"hand\",\n\t\t\t\"summer\",\n\t\t\t\"strong\",\n\t\t\t\"biceps\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t16\n\t\t]\n\t},\n\tpoint_left: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F448-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F448-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F448-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F448-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F448-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f448-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 24,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Left Pointing Backhand Index\",\n\t\tb: \"1F448\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"direction\",\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"left\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t19\n\t\t]\n\t},\n\tpoint_right: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F449-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F449-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F449-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F449-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F449-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f449-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Right Pointing Backhand Index\",\n\t\tb: \"1F449\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"direction\",\n\t\t\t\"right\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t25\n\t\t]\n\t},\n\tpoint_up: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"261D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3fb.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"261D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3fc.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"261D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3fd.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"261D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3fe.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 30,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"261D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"261d-1f3ff.png\",\n\t\t\t\tsheet_x: 47,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Up Pointing Index\",\n\t\tb: \"261D-FE0F\",\n\t\tc: \"261D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hand\",\n\t\t\t\"fingers\",\n\t\t\t\"direction\",\n\t\t\t\"up\"\n\t\t],\n\t\tk: [\n\t\t\t47,\n\t\t\t26\n\t\t],\n\t\to: 1\n\t},\n\tpoint_up_2: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F446-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F446-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F446-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F446-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F446-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f446-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Up Pointing Backhand Index\",\n\t\tb: \"1F446\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"direction\",\n\t\t\t\"up\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t7\n\t\t]\n\t},\n\tmiddle_finger: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F595-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F595-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F595-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F595-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F595-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f595-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Reversed Hand with Middle Finger Extended\",\n\t\tb: \"1F595\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t38\n\t\t],\n\t\tn: [\n\t\t\t\"reversed_hand_with_middle_finger_extended\"\n\t\t],\n\t\to: 7\n\t},\n\tpoint_down: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F447-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F447-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F447-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F447-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F447-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f447-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"White Down Pointing Backhand Index\",\n\t\tb: \"1F447\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"direction\",\n\t\t\t\"down\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t13\n\t\t]\n\t},\n\tv: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"270C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 31,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"270C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"270C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"270C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"270C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270c-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Victory Hand\",\n\t\tb: \"270C-FE0F\",\n\t\tc: \"270C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"ohyeah\",\n\t\t\t\"hand\",\n\t\t\t\"peace\",\n\t\t\t\"victory\",\n\t\t\t\"two\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t30\n\t\t],\n\t\to: 1\n\t},\n\tcrossed_fingers: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3fb.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91e-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Hand with Index and Middle Fingers Crossed\",\n\t\tb: \"1F91E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"good\",\n\t\t\t\"lucky\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t11\n\t\t],\n\t\tn: [\n\t\t\t\"hand_with_index_and_middle_fingers_crossed\"\n\t\t],\n\t\to: 9\n\t},\n\t\"spock-hand\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F596-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F596-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F596-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F596-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F596-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f596-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Hand with Part Between Middle and Ring Fingers\",\n\t\tb: \"1F596\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t29,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\tthe_horns: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F918-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3fb.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F918-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3fc.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F918-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3fd.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F918-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3fe.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F918-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f918-1f3ff.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Sign of the Horns\",\n\t\tb: \"1F918\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t32\n\t\t],\n\t\tn: [\n\t\t\t\"sign_of_the_horns\"\n\t\t],\n\t\to: 8\n\t},\n\tcall_me_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F919-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3fb.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F919-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3fc.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F919-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3fd.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F919-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3fe.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F919-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f919-1f3ff.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 43,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Call Me Hand\",\n\t\tb: \"1F919\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"hands\",\n\t\t\t\"gesture\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t38\n\t\t],\n\t\to: 9\n\t},\n\traised_hand_with_fingers_splayed: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F590-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3fb.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F590-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3fc.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F590-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3fd.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F590-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3fe.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F590-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f590-1f3ff.png\",\n\t\t\t\tsheet_x: 29,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Hand with Fingers Splayed\",\n\t\tb: \"1F590-FE0F\",\n\t\tc: \"1F590\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"hand\",\n\t\t\t\"fingers\",\n\t\t\t\"palm\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t32\n\t\t],\n\t\to: 7\n\t},\n\thand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"270B-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 25,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"270B-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 26,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"270B-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 27,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"270B-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 28,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"270B-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270b-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 29,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Hand\",\n\t\tb: \"270B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t49,\n\t\t\t24\n\t\t],\n\t\tn: [\n\t\t\t\"raised_hand\"\n\t\t]\n\t},\n\tok_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 44,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44c-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Ok Hand Sign\",\n\t\tb: \"1F44C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"limbs\",\n\t\t\t\"perfect\",\n\t\t\t\"ok\",\n\t\t\t\"okay\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t43\n\t\t]\n\t},\n\t\"+1\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44d-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Thumbs Up Sign\",\n\t\tb: \"1F44D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"thumbsup\",\n\t\t\t\"yes\",\n\t\t\t\"awesome\",\n\t\t\t\"good\",\n\t\t\t\"agree\",\n\t\t\t\"accept\",\n\t\t\t\"cool\",\n\t\t\t\"hand\",\n\t\t\t\"like\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t49\n\t\t],\n\t\tn: [\n\t\t\t\"thumbsup\"\n\t\t]\n\t},\n\t\"-1\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44E-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44E-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44E-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44E-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44E-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44e-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Thumbs Down Sign\",\n\t\tb: \"1F44E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"thumbsdown\",\n\t\t\t\"no\",\n\t\t\t\"dislike\",\n\t\t\t\"hand\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t3\n\t\t],\n\t\tn: [\n\t\t\t\"thumbsdown\"\n\t\t]\n\t},\n\tfist: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"270A-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"270A-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"270A-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"270A-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"270A-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270a-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 23,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Fist\",\n\t\tb: \"270A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"hand\",\n\t\t\t\"grasp\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t18\n\t\t]\n\t},\n\tfacepunch: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44A-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 32,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44A-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 33,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44A-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 34,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44A-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 35,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44A-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44a-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 36,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Fisted Hand Sign\",\n\t\tb: \"1F44A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"angry\",\n\t\t\t\"violence\",\n\t\t\t\"fist\",\n\t\t\t\"hit\",\n\t\t\t\"attack\",\n\t\t\t\"hand\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t31\n\t\t],\n\t\tn: [\n\t\t\t\"punch\"\n\t\t]\n\t},\n\t\"left-facing_fist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91B-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3fb.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 51,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91B-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91B-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91B-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91B-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91b-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Left-Facing Fist\",\n\t\tb: \"1F91B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t50\n\t\t],\n\t\to: 9\n\t},\n\t\"right-facing_fist\": {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3fb.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 8,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91c-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 9,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Right-Facing Fist\",\n\t\tb: \"1F91C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t4\n\t\t],\n\t\to: 9\n\t},\n\traised_back_of_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91A-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3fb.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91A-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3fc.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91A-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3fd.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91A-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3fe.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91A-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91a-1f3ff.png\",\n\t\t\t\tsheet_x: 37,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"9.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Raised Back of Hand\",\n\t\tb: \"1F91A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"raised\",\n\t\t\t\"backhand\"\n\t\t],\n\t\tk: [\n\t\t\t37,\n\t\t\t44\n\t\t],\n\t\to: 9\n\t},\n\twave: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44B-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44B-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44B-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44B-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44B-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44b-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 42,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Waving Hand Sign\",\n\t\tb: \"1F44B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hands\",\n\t\t\t\"gesture\",\n\t\t\t\"goodbye\",\n\t\t\t\"solong\",\n\t\t\t\"farewell\",\n\t\t\t\"hello\",\n\t\t\t\"hi\",\n\t\t\t\"palm\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t37\n\t\t]\n\t},\n\ti_love_you_hand_sign: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F91F-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3fb.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F91F-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3fc.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F91F-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3fd.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F91F-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3fe.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F91F-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f91f-1f3ff.png\",\n\t\t\t\tsheet_x: 38,\n\t\t\t\tsheet_y: 22,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"I Love You Hand Sign\",\n\t\tb: \"1F91F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t38,\n\t\t\t17\n\t\t],\n\t\to: 10\n\t},\n\twriting_hand: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"270D-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3fb.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 37,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"270D-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3fc.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 38,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"270D-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3fd.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 39,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"270D-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3fe.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 40,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"270D-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"270d-1f3ff.png\",\n\t\t\t\tsheet_x: 49,\n\t\t\t\tsheet_y: 41,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Writing Hand\",\n\t\tb: \"270D-FE0F\",\n\t\tc: \"270D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"lower_left_ballpoint_pen\",\n\t\t\t\"stationery\",\n\t\t\t\"write\",\n\t\t\t\"compose\"\n\t\t],\n\t\tk: [\n\t\t\t49,\n\t\t\t36\n\t\t],\n\t\to: 1\n\t},\n\tclap: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F44F-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 10,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F44F-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 11,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F44F-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 12,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F44F-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F44F-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f44f-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Clapping Hands Sign\",\n\t\tb: \"1F44F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"hands\",\n\t\t\t\"praise\",\n\t\t\t\"applause\",\n\t\t\t\"congrats\",\n\t\t\t\"yay\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t9\n\t\t]\n\t},\n\topen_hands: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F450-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3fb.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F450-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3fc.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F450-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3fd.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F450-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3fe.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F450-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f450-1f3ff.png\",\n\t\t\t\tsheet_x: 15,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Open Hands Sign\",\n\t\tb: \"1F450\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fingers\",\n\t\t\t\"butterfly\",\n\t\t\t\"hands\",\n\t\t\t\"open\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t15\n\t\t]\n\t},\n\traised_hands: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64C-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3fb.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 13,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64C-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3fc.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 14,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64C-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3fd.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 15,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64C-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3fe.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 16,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64C-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64c-1f3ff.png\",\n\t\t\t\tsheet_x: 33,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Person Raising Both Hands in Celebration\",\n\t\tb: \"1F64C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"gesture\",\n\t\t\t\"hooray\",\n\t\t\t\"yea\",\n\t\t\t\"celebration\",\n\t\t\t\"hands\"\n\t\t],\n\t\tk: [\n\t\t\t33,\n\t\t\t12\n\t\t]\n\t},\n\tpalms_up_together: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F932-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3fb.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 17,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F932-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3fc.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 18,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F932-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3fd.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 19,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F932-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3fe.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 20,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F932-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f932-1f3ff.png\",\n\t\t\t\tsheet_x: 39,\n\t\t\t\tsheet_y: 21,\n\t\t\t\tadded_in: \"10.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: false\n\t\t\t}\n\t\t},\n\t\ta: \"Palms Up Together\",\n\t\tb: \"1F932\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t39,\n\t\t\t16\n\t\t],\n\t\to: 10\n\t},\n\tpray: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F64F-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3fb.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F64F-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3fc.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F64F-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3fd.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 5,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F64F-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3fe.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 6,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F64F-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f64f-1f3ff.png\",\n\t\t\t\tsheet_x: 34,\n\t\t\t\tsheet_y: 7,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Person with Folded Hands\",\n\t\tb: \"1F64F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"please\",\n\t\t\t\"hope\",\n\t\t\t\"wish\",\n\t\t\t\"namaste\",\n\t\t\t\"highfive\"\n\t\t],\n\t\tk: [\n\t\t\t34,\n\t\t\t2\n\t\t]\n\t},\n\thandshake: {\n\t\ta: \"Handshake\",\n\t\tb: \"1F91D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"agreement\",\n\t\t\t\"shake\"\n\t\t],\n\t\tk: [\n\t\t\t38,\n\t\t\t10\n\t\t],\n\t\to: 9\n\t},\n\tnail_care: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F485-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3fb.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 45,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F485-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3fc.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F485-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3fd.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F485-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3fe.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F485-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f485-1f3ff.png\",\n\t\t\t\tsheet_x: 23,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Nail Polish\",\n\t\tb: \"1F485\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"beauty\",\n\t\t\t\"manicure\",\n\t\t\t\"finger\",\n\t\t\t\"fashion\",\n\t\t\t\"nail\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t44\n\t\t]\n\t},\n\tear: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F442-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3fb.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 46,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F442-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3fc.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 47,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F442-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3fd.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 48,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F442-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3fe.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 49,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F442-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f442-1f3ff.png\",\n\t\t\t\tsheet_x: 13,\n\t\t\t\tsheet_y: 50,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Ear\",\n\t\tb: \"1F442\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"hear\",\n\t\t\t\"sound\",\n\t\t\t\"listen\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t45\n\t\t]\n\t},\n\tnose: {\n\t\tskin_variations: {\n\t\t\t\"1F3FB\": {\n\t\t\t\tunified: \"1F443-1F3FB\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3fb.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 0,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FC\": {\n\t\t\t\tunified: \"1F443-1F3FC\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3fc.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 1,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FD\": {\n\t\t\t\tunified: \"1F443-1F3FD\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3fd.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 2,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FE\": {\n\t\t\t\tunified: \"1F443-1F3FE\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3fe.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 3,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t},\n\t\t\t\"1F3FF\": {\n\t\t\t\tunified: \"1F443-1F3FF\",\n\t\t\t\tnon_qualified: null,\n\t\t\t\timage: \"1f443-1f3ff.png\",\n\t\t\t\tsheet_x: 14,\n\t\t\t\tsheet_y: 4,\n\t\t\t\tadded_in: \"8.0\",\n\t\t\t\thas_img_apple: true,\n\t\t\t\thas_img_google: true,\n\t\t\t\thas_img_twitter: true,\n\t\t\t\thas_img_emojione: true,\n\t\t\t\thas_img_facebook: true,\n\t\t\t\thas_img_messenger: true\n\t\t\t}\n\t\t},\n\t\ta: \"Nose\",\n\t\tb: \"1F443\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"smell\",\n\t\t\t\"sniff\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t51\n\t\t]\n\t},\n\tfootprints: {\n\t\ta: \"Footprints\",\n\t\tb: \"1F463\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"feet\",\n\t\t\t\"tracking\",\n\t\t\t\"walking\",\n\t\t\t\"beach\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t39\n\t\t]\n\t},\n\teyes: {\n\t\ta: \"Eyes\",\n\t\tb: \"1F440\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"look\",\n\t\t\t\"watch\",\n\t\t\t\"stalk\",\n\t\t\t\"peek\",\n\t\t\t\"see\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t42\n\t\t]\n\t},\n\teye: {\n\t\ta: \"Eye\",\n\t\tb: \"1F441-FE0F\",\n\t\tc: \"1F441\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"look\",\n\t\t\t\"see\",\n\t\t\t\"watch\",\n\t\t\t\"stare\"\n\t\t],\n\t\tk: [\n\t\t\t13,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\t\"eye-in-speech-bubble\": {\n\t\ta: \"Eye in Speech Bubble\",\n\t\tb: \"1F441-FE0F-200D-1F5E8-FE0F\",\n\t\td: true,\n\t\te: true,\n\t\tf: false,\n\t\tg: true,\n\t\th: false,\n\t\ti: false,\n\t\tk: [\n\t\t\t13,\n\t\t\t43\n\t\t],\n\t\to: 7\n\t},\n\tbrain: {\n\t\ta: \"Brain\",\n\t\tb: \"1F9E0\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t22\n\t\t],\n\t\to: 10\n\t},\n\ttongue: {\n\t\ta: \"Tongue\",\n\t\tb: \"1F445\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mouth\",\n\t\t\t\"playful\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t6\n\t\t]\n\t},\n\tlips: {\n\t\ta: \"Mouth\",\n\t\tb: \"1F444\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"mouth\",\n\t\t\t\"kiss\"\n\t\t],\n\t\tk: [\n\t\t\t14,\n\t\t\t5\n\t\t]\n\t},\n\tkiss: {\n\t\ta: \"Kiss Mark\",\n\t\tb: \"1F48B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"lips\",\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t37\n\t\t]\n\t},\n\tcupid: {\n\t\ta: \"Heart with Arrow\",\n\t\tb: \"1F498\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"heart\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t50\n\t\t]\n\t},\n\theart: {\n\t\ta: \"Heavy Black Heart\",\n\t\tb: \"2764-FE0F\",\n\t\tc: \"2764\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t50,\n\t\t\t8\n\t\t],\n\t\tl: [\n\t\t\t\"<3\"\n\t\t],\n\t\tm: \"<3\",\n\t\to: 1\n\t},\n\theartbeat: {\n\t\ta: \"Beating Heart\",\n\t\tb: \"1F493\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"pink\",\n\t\t\t\"heart\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t45\n\t\t]\n\t},\n\tbroken_heart: {\n\t\ta: \"Broken Heart\",\n\t\tb: \"1F494\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sad\",\n\t\t\t\"sorry\",\n\t\t\t\"break\",\n\t\t\t\"heart\",\n\t\t\t\"heartbreak\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t46\n\t\t],\n\t\tl: [\n\t\t\t\"</3\"\n\t\t],\n\t\tm: \"</3\"\n\t},\n\ttwo_hearts: {\n\t\ta: \"Two Hearts\",\n\t\tb: \"1F495\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"heart\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t47\n\t\t]\n\t},\n\tsparkling_heart: {\n\t\ta: \"Sparkling Heart\",\n\t\tb: \"1F496\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t48\n\t\t]\n\t},\n\theartpulse: {\n\t\ta: \"Growing Heart\",\n\t\tb: \"1F497\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"like\",\n\t\t\t\"love\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\",\n\t\t\t\"pink\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t49\n\t\t]\n\t},\n\tblue_heart: {\n\t\ta: \"Blue Heart\",\n\t\tb: \"1F499\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t51\n\t\t],\n\t\tm: \"<3\"\n\t},\n\tgreen_heart: {\n\t\ta: \"Green Heart\",\n\t\tb: \"1F49A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t0\n\t\t],\n\t\tm: \"<3\"\n\t},\n\tyellow_heart: {\n\t\ta: \"Yellow Heart\",\n\t\tb: \"1F49B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t1\n\t\t],\n\t\tm: \"<3\"\n\t},\n\torange_heart: {\n\t\ta: \"Orange Heart\",\n\t\tb: \"1F9E1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t23\n\t\t],\n\t\to: 10\n\t},\n\tpurple_heart: {\n\t\ta: \"Purple Heart\",\n\t\tb: \"1F49C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t2\n\t\t],\n\t\tm: \"<3\"\n\t},\n\tblack_heart: {\n\t\ta: \"Black Heart\",\n\t\tb: \"1F5A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"evil\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t50\n\t\t],\n\t\to: 9\n\t},\n\tgift_heart: {\n\t\ta: \"Heart with Ribbon\",\n\t\tb: \"1F49D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t3\n\t\t]\n\t},\n\trevolving_hearts: {\n\t\ta: \"Revolving Hearts\",\n\t\tb: \"1F49E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"love\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t4\n\t\t]\n\t},\n\theart_decoration: {\n\t\ta: \"Heart Decoration\",\n\t\tb: \"1F49F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"purple-square\",\n\t\t\t\"love\",\n\t\t\t\"like\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t5\n\t\t]\n\t},\n\theavy_heart_exclamation_mark_ornament: {\n\t\ta: \"Heavy Heart Exclamation Mark Ornament\",\n\t\tb: \"2763-FE0F\",\n\t\tc: \"2763\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t50,\n\t\t\t7\n\t\t],\n\t\to: 1\n\t},\n\tlove_letter: {\n\t\ta: \"Love Letter\",\n\t\tb: \"1F48C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"email\",\n\t\t\t\"like\",\n\t\t\t\"affection\",\n\t\t\t\"envelope\",\n\t\t\t\"valentines\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t38\n\t\t]\n\t},\n\tzzz: {\n\t\ta: \"Sleeping Symbol\",\n\t\tb: \"1F4A4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"sleepy\",\n\t\t\t\"tired\",\n\t\t\t\"dream\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t10\n\t\t]\n\t},\n\tanger: {\n\t\ta: \"Anger Symbol\",\n\t\tb: \"1F4A2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"angry\",\n\t\t\t\"mad\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t8\n\t\t]\n\t},\n\tbomb: {\n\t\ta: \"Bomb\",\n\t\tb: \"1F4A3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"boom\",\n\t\t\t\"explode\",\n\t\t\t\"explosion\",\n\t\t\t\"terrorism\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t9\n\t\t]\n\t},\n\tboom: {\n\t\ta: \"Collision Symbol\",\n\t\tb: \"1F4A5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bomb\",\n\t\t\t\"explode\",\n\t\t\t\"explosion\",\n\t\t\t\"collision\",\n\t\t\t\"blown\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t11\n\t\t],\n\t\tn: [\n\t\t\t\"collision\"\n\t\t]\n\t},\n\tsweat_drops: {\n\t\ta: \"Splashing Sweat Symbol\",\n\t\tb: \"1F4A6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"water\",\n\t\t\t\"drip\",\n\t\t\t\"oops\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t12\n\t\t]\n\t},\n\tdash: {\n\t\ta: \"Dash Symbol\",\n\t\tb: \"1F4A8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wind\",\n\t\t\t\"air\",\n\t\t\t\"fast\",\n\t\t\t\"shoo\",\n\t\t\t\"fart\",\n\t\t\t\"smoke\",\n\t\t\t\"puff\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t14\n\t\t]\n\t},\n\tdizzy: {\n\t\ta: \"Dizzy Symbol\",\n\t\tb: \"1F4AB\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"star\",\n\t\t\t\"sparkle\",\n\t\t\t\"shoot\",\n\t\t\t\"magic\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t22\n\t\t]\n\t},\n\tspeech_balloon: {\n\t\ta: \"Speech Balloon\",\n\t\tb: \"1F4AC\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bubble\",\n\t\t\t\"words\",\n\t\t\t\"message\",\n\t\t\t\"talk\",\n\t\t\t\"chatting\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t23\n\t\t]\n\t},\n\tleft_speech_bubble: {\n\t\ta: \"Left Speech Bubble\",\n\t\tb: \"1F5E8-FE0F\",\n\t\tc: \"1F5E8\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"words\",\n\t\t\t\"message\",\n\t\t\t\"talk\",\n\t\t\t\"chatting\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t15\n\t\t],\n\t\to: 7\n\t},\n\tright_anger_bubble: {\n\t\ta: \"Right Anger Bubble\",\n\t\tb: \"1F5EF-FE0F\",\n\t\tc: \"1F5EF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"caption\",\n\t\t\t\"speech\",\n\t\t\t\"thinking\",\n\t\t\t\"mad\"\n\t\t],\n\t\tk: [\n\t\t\t30,\n\t\t\t16\n\t\t],\n\t\to: 7\n\t},\n\tthought_balloon: {\n\t\ta: \"Thought Balloon\",\n\t\tb: \"1F4AD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bubble\",\n\t\t\t\"cloud\",\n\t\t\t\"speech\",\n\t\t\t\"thinking\",\n\t\t\t\"dream\"\n\t\t],\n\t\tk: [\n\t\t\t25,\n\t\t\t24\n\t\t]\n\t},\n\thole: {\n\t\ta: \"Hole\",\n\t\tb: \"1F573-FE0F\",\n\t\tc: \"1F573\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"embarrassing\"\n\t\t],\n\t\tk: [\n\t\t\t28,\n\t\t\t44\n\t\t],\n\t\to: 7\n\t},\n\teyeglasses: {\n\t\ta: \"Eyeglasses\",\n\t\tb: \"1F453\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"accessories\",\n\t\t\t\"eyesight\",\n\t\t\t\"nerdy\",\n\t\t\t\"dork\",\n\t\t\t\"geek\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t23\n\t\t]\n\t},\n\tdark_sunglasses: {\n\t\ta: \"Dark Sunglasses\",\n\t\tb: \"1F576-FE0F\",\n\t\tc: \"1F576\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"face\",\n\t\t\t\"cool\",\n\t\t\t\"accessories\"\n\t\t],\n\t\tk: [\n\t\t\t29,\n\t\t\t17\n\t\t],\n\t\to: 7\n\t},\n\tnecktie: {\n\t\ta: \"Necktie\",\n\t\tb: \"1F454\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shirt\",\n\t\t\t\"suitup\",\n\t\t\t\"formal\",\n\t\t\t\"fashion\",\n\t\t\t\"cloth\",\n\t\t\t\"business\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t24\n\t\t]\n\t},\n\tshirt: {\n\t\ta: \"T-Shirt\",\n\t\tb: \"1F455\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tk: [\n\t\t\t15,\n\t\t\t25\n\t\t],\n\t\tn: [\n\t\t\t\"tshirt\"\n\t\t]\n\t},\n\tjeans: {\n\t\ta: \"Jeans\",\n\t\tb: \"1F456\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t26\n\t\t]\n\t},\n\tscarf: {\n\t\ta: \"Scarf\",\n\t\tb: \"1F9E3\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t25\n\t\t],\n\t\to: 10\n\t},\n\tgloves: {\n\t\ta: \"Gloves\",\n\t\tb: \"1F9E4\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t26\n\t\t],\n\t\to: 10\n\t},\n\tcoat: {\n\t\ta: \"Coat\",\n\t\tb: \"1F9E5\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t27\n\t\t],\n\t\to: 10\n\t},\n\tsocks: {\n\t\ta: \"Socks\",\n\t\tb: \"1F9E6\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t28\n\t\t],\n\t\to: 10\n\t},\n\tdress: {\n\t\ta: \"Dress\",\n\t\tb: \"1F457\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"clothes\",\n\t\t\t\"fashion\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t27\n\t\t]\n\t},\n\tkimono: {\n\t\ta: \"Kimono\",\n\t\tb: \"1F458\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"dress\",\n\t\t\t\"fashion\",\n\t\t\t\"women\",\n\t\t\t\"female\",\n\t\t\t\"japanese\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t28\n\t\t]\n\t},\n\tbikini: {\n\t\ta: \"Bikini\",\n\t\tb: \"1F459\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"swimming\",\n\t\t\t\"female\",\n\t\t\t\"woman\",\n\t\t\t\"girl\",\n\t\t\t\"fashion\",\n\t\t\t\"beach\",\n\t\t\t\"summer\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t29\n\t\t]\n\t},\n\twomans_clothes: {\n\t\ta: \"Womans Clothes\",\n\t\tb: \"1F45A\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"shopping_bags\",\n\t\t\t\"female\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t30\n\t\t]\n\t},\n\tpurse: {\n\t\ta: \"Purse\",\n\t\tb: \"1F45B\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"accessories\",\n\t\t\t\"money\",\n\t\t\t\"sales\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t31\n\t\t]\n\t},\n\thandbag: {\n\t\ta: \"Handbag\",\n\t\tb: \"1F45C\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"accessory\",\n\t\t\t\"accessories\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t32\n\t\t]\n\t},\n\tpouch: {\n\t\ta: \"Pouch\",\n\t\tb: \"1F45D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"bag\",\n\t\t\t\"accessories\",\n\t\t\t\"shopping\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t33\n\t\t]\n\t},\n\tshopping_bags: {\n\t\ta: \"Shopping Bags\",\n\t\tb: \"1F6CD-FE0F\",\n\t\tc: \"1F6CD\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t37,\n\t\t\t2\n\t\t],\n\t\to: 7\n\t},\n\tschool_satchel: {\n\t\ta: \"School Satchel\",\n\t\tb: \"1F392\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"student\",\n\t\t\t\"education\",\n\t\t\t\"bag\",\n\t\t\t\"backpack\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t37\n\t\t]\n\t},\n\tmans_shoe: {\n\t\ta: \"Mans Shoe\",\n\t\tb: \"1F45E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"male\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t34\n\t\t],\n\t\tn: [\n\t\t\t\"shoe\"\n\t\t]\n\t},\n\tathletic_shoe: {\n\t\ta: \"Athletic Shoe\",\n\t\tb: \"1F45F\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shoes\",\n\t\t\t\"sports\",\n\t\t\t\"sneakers\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t35\n\t\t]\n\t},\n\thigh_heel: {\n\t\ta: \"High-Heeled Shoe\",\n\t\tb: \"1F460\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"shoes\",\n\t\t\t\"female\",\n\t\t\t\"pumps\",\n\t\t\t\"stiletto\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t36\n\t\t]\n\t},\n\tsandal: {\n\t\ta: \"Womans Sandal\",\n\t\tb: \"1F461\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shoes\",\n\t\t\t\"fashion\",\n\t\t\t\"flip flops\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t37\n\t\t]\n\t},\n\tboot: {\n\t\ta: \"Womans Boots\",\n\t\tb: \"1F462\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"shoes\",\n\t\t\t\"fashion\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t38\n\t\t]\n\t},\n\tcrown: {\n\t\ta: \"Crown\",\n\t\tb: \"1F451\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"king\",\n\t\t\t\"kod\",\n\t\t\t\"leader\",\n\t\t\t\"royalty\",\n\t\t\t\"lord\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t21\n\t\t]\n\t},\n\twomans_hat: {\n\t\ta: \"Womans Hat\",\n\t\tb: \"1F452\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"fashion\",\n\t\t\t\"accessories\",\n\t\t\t\"female\",\n\t\t\t\"lady\",\n\t\t\t\"spring\"\n\t\t],\n\t\tk: [\n\t\t\t15,\n\t\t\t22\n\t\t]\n\t},\n\ttophat: {\n\t\ta: \"Top Hat\",\n\t\tb: \"1F3A9\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"magic\",\n\t\t\t\"gentleman\",\n\t\t\t\"classy\",\n\t\t\t\"circus\"\n\t\t],\n\t\tk: [\n\t\t\t9,\n\t\t\t3\n\t\t]\n\t},\n\tmortar_board: {\n\t\ta: \"Graduation Cap\",\n\t\tb: \"1F393\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"school\",\n\t\t\t\"college\",\n\t\t\t\"degree\",\n\t\t\t\"university\",\n\t\t\t\"graduation\",\n\t\t\t\"cap\",\n\t\t\t\"hat\",\n\t\t\t\"legal\",\n\t\t\t\"learn\",\n\t\t\t\"education\"\n\t\t],\n\t\tk: [\n\t\t\t8,\n\t\t\t38\n\t\t]\n\t},\n\tbilled_cap: {\n\t\ta: \"Billed Cap\",\n\t\tb: \"1F9E2\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t46,\n\t\t\t24\n\t\t],\n\t\to: 10\n\t},\n\thelmet_with_white_cross: {\n\t\ta: \"Helmet with White Cross\",\n\t\tb: \"26D1-FE0F\",\n\t\tc: \"26D1\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tk: [\n\t\t\t48,\n\t\t\t33\n\t\t],\n\t\to: 5\n\t},\n\tprayer_beads: {\n\t\ta: \"Prayer Beads\",\n\t\tb: \"1F4FF\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: false,\n\t\tj: [\n\t\t\t\"dhikr\",\n\t\t\t\"religious\"\n\t\t],\n\t\tk: [\n\t\t\t27,\n\t\t\t1\n\t\t],\n\t\to: 8\n\t},\n\tlipstick: {\n\t\ta: \"Lipstick\",\n\t\tb: \"1F484\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"female\",\n\t\t\t\"girl\",\n\t\t\t\"fashion\",\n\t\t\t\"woman\"\n\t\t],\n\t\tk: [\n\t\t\t23,\n\t\t\t43\n\t\t]\n\t},\n\tring: {\n\t\ta: \"Ring\",\n\t\tb: \"1F48D\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"wedding\",\n\t\t\t\"propose\",\n\t\t\t\"marriage\",\n\t\t\t\"valentines\",\n\t\t\t\"diamond\",\n\t\t\t\"fashion\",\n\t\t\t\"jewelry\",\n\t\t\t\"gem\",\n\t\t\t\"engagement\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t39\n\t\t]\n\t},\n\tgem: {\n\t\ta: \"Gem Stone\",\n\t\tb: \"1F48E\",\n\t\td: true,\n\t\te: true,\n\t\tf: true,\n\t\tg: true,\n\t\th: true,\n\t\ti: true,\n\t\tj: [\n\t\t\t\"blue\",\n\t\t\t\"ruby\",\n\t\t\t\"diamond\",\n\t\t\t\"jewelry\"\n\t\t],\n\t\tk: [\n\t\t\t24,\n\t\t\t40\n\t\t]\n\t}\n};\nvar aliases = {\n\tsatisfied: \"laughing\",\n\tgrinning_face_with_star_eyes: \"star-struck\",\n\tface_with_one_eyebrow_raised: \"face_with_raised_eyebrow\",\n\ttelephone: \"phone\",\n\tcooking: \"fried_egg\",\n\tpaw_prints: \"feet\",\n\t\"flag-cn\": \"cn\",\n\tlantern: \"izakaya_lantern\",\n\tshocked_face_with_exploding_head: \"exploding_head\",\n\topen_book: \"book\",\n\t\"flag-de\": \"de\",\n\tgrinning_face_with_one_large_and_one_small_eye: \"zany_face\",\n\tserious_face_with_symbols_covering_mouth: \"face_with_symbols_on_mouth\",\n\tflipper: \"dolphin\",\n\tface_with_open_mouth_vomiting: \"face_vomiting\",\n\t\"flag-es\": \"es\",\n\tface_with_finger_covering_closed_lips: \"shushing_face\",\n\tsmiling_face_with_smiling_eyes_and_hand_covering_mouth: \"face_with_hand_over_mouth\",\n\t\"flag-fr\": \"fr\",\n\thoneybee: \"bee\",\n\tred_car: \"car\",\n\tenvelope: \"email\",\n\tuk: \"gb\",\n\t\"flag-gb\": \"gb\",\n\tpoop: \"hankey\",\n\tshit: \"hankey\",\n\tstaff_of_aesculapius: \"medical_symbol\",\n\tknife: \"hocho\",\n\tsailboat: \"boat\",\n\tpencil: \"memo\",\n\t\"flag-it\": \"it\",\n\t\"flag-jp\": \"jp\",\n\theavy_exclamation_mark: \"exclamation\",\n\t\"flag-kr\": \"kr\",\n\twaxing_gibbous_moon: \"moon\",\n\tmother_christmas: \"mrs_claus\",\n\tsun_small_cloud: \"mostly_sunny\",\n\tsun_behind_cloud: \"barely_sunny\",\n\tsun_behind_rain_cloud: \"partly_sunny_rain\",\n\tlightning_cloud: \"lightning\",\n\ttornado_cloud: \"tornado\",\n\t\"flag-ru\": \"ru\",\n\trunning: \"runner\",\n\t\"flag-us\": \"us\",\n\tman_and_woman_holding_hands: \"couple\",\n\t\"man-woman-boy\": \"family\",\n\tfamily: \"man-woman-boy\",\n\treversed_hand_with_middle_finger_extended: \"middle_finger\",\n\thand_with_index_and_middle_fingers_crossed: \"crossed_fingers\",\n\tsign_of_the_horns: \"the_horns\",\n\traised_hand: \"hand\",\n\tthumbsup: \"+1\",\n\tthumbsdown: \"-1\",\n\tpunch: \"facepunch\",\n\tcollision: \"boom\",\n\ttshirt: \"shirt\",\n\tshoe: \"mans_shoe\"\n};\nvar data = {\n\tcompressed: compressed,\n\tcategories: categories,\n\temojis: emojis,\n\taliases: aliases\n};\n\nfunction _classCallCheck (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError('Cannot call a class as a function');\n  }\n}\n\nvar _Object = Object;\n\nvar _createClass = (function createClass() {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if ('value' in descriptor) descriptor.writable = true;\n      _Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n})();\n\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n    hasDontEnumBug = !{ toString: null }.propertyIsEnumerable('toString'),\n    dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n    dontEnumsLength = dontEnums.length;\n\nfunction _Object$keys (obj) {\n  if (typeof obj !== 'function' && (typeof obj !== 'object' || obj === null)) {\n    throw new TypeError('Object.keys called on non-object');\n  }\n\n  var result = [],\n      prop,\n      i;\n\n  for (prop in obj) {\n    if (hasOwnProperty.call(obj, prop)) {\n      result.push(prop);\n    }\n  }\n\n  if (hasDontEnumBug) {\n    for (i = 0; i < dontEnumsLength; i++) {\n      if (hasOwnProperty.call(obj, dontEnums[i])) {\n        result.push(dontEnums[i]);\n      }\n    }\n  }\n  return result;\n}\n\nvar mapping = {\n  name: 'a',\n  unified: 'b',\n  non_qualified: 'c',\n  has_img_apple: 'd',\n  has_img_google: 'e',\n  has_img_twitter: 'f',\n  has_img_emojione: 'g',\n  has_img_facebook: 'h',\n  has_img_messenger: 'i',\n  keywords: 'j',\n  sheet: 'k',\n  emoticons: 'l',\n  text: 'm',\n  short_names: 'n',\n  added_in: 'o'\n};\n\nvar buildSearch = function buildSearch(emoji) {\n  var search = [];\n\n  var addToSearch = function addToSearch(strings, split) {\n    if (!strings) {\n      return;\n    }\n(Array.isArray(strings) ? strings : [strings]).forEach(function (string) {\n(split ? string.split(/[-|_|\\s]+/) : [string]).forEach(function (s) {\n        s = s.toLowerCase();\n\n        if (search.indexOf(s) == -1) {\n          search.push(s);\n        }\n      });\n    });\n  };\n\n  addToSearch(emoji.short_names, true);\n  addToSearch(emoji.name, true);\n  addToSearch(emoji.keywords, false);\n  addToSearch(emoji.emoticons, false);\n\n  return search.join(',');\n};\n\nvar uncompress = function uncompress(data) {\n  data.compressed = false;\n\n  for (var id in data.emojis) {\n    var emoji = data.emojis[id];\n\n    for (var key in mapping) {\n      emoji[key] = emoji[mapping[key]];\n      delete emoji[mapping[key]];\n    }\n\n    if (!emoji.short_names) emoji.short_names = [];\n    emoji.short_names.unshift(id);\n\n    emoji.sheet_x = emoji.sheet[0];\n    emoji.sheet_y = emoji.sheet[1];\n    delete emoji.sheet;\n\n    if (!emoji.text) emoji.text = '';\n\n    if (!emoji.added_in) emoji.added_in = 6;\n    emoji.added_in = emoji.added_in.toFixed(1);\n\n    emoji.search = buildSearch(emoji);\n  }\n};\n\nvar _String = String;\n\nvar stringFromCodePoint = _String.fromCodePoint || function stringFromCodePoint() {\n  var MAX_SIZE = 0x4000;\n  var codeUnits = [];\n  var highSurrogate;\n  var lowSurrogate;\n  var index = -1;\n  var length = arguments.length;\n  if (!length) {\n    return '';\n  }\n  var result = '';\n  while (++index < length) {\n    var codePoint = Number(arguments[index]);\n    if (!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n    codePoint < 0 || // not a valid Unicode code point\n    codePoint > 0x10ffff || // not a valid Unicode code point\n    Math.floor(codePoint) != codePoint // not an integer\n    ) {\n        throw RangeError('Invalid code point: ' + codePoint);\n      }\n    if (codePoint <= 0xffff) {\n      // BMP code point\n      codeUnits.push(codePoint);\n    } else {\n      // Astral code point; split in surrogate halves\n      // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n      codePoint -= 0x10000;\n      highSurrogate = (codePoint >> 10) + 0xd800;\n      lowSurrogate = codePoint % 0x400 + 0xdc00;\n      codeUnits.push(highSurrogate, lowSurrogate);\n    }\n    if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n      result += String.fromCharCode.apply(null, codeUnits);\n      codeUnits.length = 0;\n    }\n  }\n  return result;\n};\n\nvar _JSON = JSON;\n\nvar COLONS_REGEX = /^(?:\\:([^\\:]+)\\:)(?:\\:skin-tone-(\\d)\\:)?$/;\nvar SKINS = ['1F3FA', '1F3FB', '1F3FC', '1F3FD', '1F3FE', '1F3FF'];\n\nfunction unifiedToNative(unified) {\n  var unicodes = unified.split('-'),\n      codePoints = unicodes.map(function (u) {\n    return '0x' + u;\n  });\n\n  return stringFromCodePoint.apply(null, codePoints);\n}\n\nfunction sanitize(emoji) {\n  var name = emoji.name;\n  var short_names = emoji.short_names;\n  var skin_tone = emoji.skin_tone;\n  var skin_variations = emoji.skin_variations;\n  var emoticons = emoji.emoticons;\n  var unified = emoji.unified;\n  var custom = emoji.custom;\n  var imageUrl = emoji.imageUrl;\n  var id = emoji.id || short_names[0];\n  var colons = ':' + id + ':';\n\n  if (custom) {\n    return {\n      id: id,\n      name: name,\n      short_names: short_names,\n      colons: colons,\n      emoticons: emoticons,\n      custom: custom,\n      imageUrl: imageUrl\n    };\n  }\n\n  if (skin_tone) {\n    colons += ':skin-tone-' + skin_tone + ':';\n  }\n\n  return {\n    id: id,\n    name: name,\n    short_names: short_names,\n    colons: colons,\n    emoticons: emoticons,\n    unified: unified.toLowerCase(),\n    skin: skin_tone || (skin_variations ? 1 : null),\n    native: unifiedToNative(unified)\n  };\n}\n\nfunction getSanitizedData() {\n  return sanitize(getData.apply(undefined, arguments));\n}\n\nfunction getData(emoji, skin, set, data) {\n  var emojiData = {};\n\n  if (typeof emoji == 'string') {\n    var matches = emoji.match(COLONS_REGEX);\n\n    if (matches) {\n      emoji = matches[1];\n\n      if (matches[2]) {\n        skin = parseInt(matches[2], 10);\n      }\n    }\n\n    if (data.aliases.hasOwnProperty(emoji)) {\n      emoji = data.aliases[emoji];\n    }\n\n    if (data.emojis.hasOwnProperty(emoji)) {\n      emojiData = data.emojis[emoji];\n    } else {\n      return null;\n    }\n  } else if (emoji.id) {\n    if (data.aliases.hasOwnProperty(emoji.id)) {\n      emoji.id = data.aliases[emoji.id];\n    }\n\n    if (data.emojis.hasOwnProperty(emoji.id)) {\n      emojiData = data.emojis[emoji.id];\n      skin || (skin = emoji.skin);\n    }\n  }\n\n  if (!_Object$keys(emojiData).length) {\n    emojiData = emoji;\n    emojiData.custom = true;\n\n    if (!emojiData.search) {\n      emojiData.search = buildSearch(emoji);\n    }\n  }\n\n  emojiData.emoticons || (emojiData.emoticons = []);\n  emojiData.variations || (emojiData.variations = []);\n\n  if (emojiData.skin_variations && skin > 1) {\n    emojiData = JSON.parse(_JSON.stringify(emojiData));\n\n    var skinKey = SKINS[skin - 1],\n        variationData = emojiData.skin_variations[skinKey];\n\n    if (!variationData.variations && emojiData.variations) {\n      delete emojiData.variations;\n    }\n\n    if (set && (variationData['has_img_' + set] == undefined || variationData['has_img_' + set]) || !set) {\n      emojiData.skin_tone = skin;\n\n      for (var k in variationData) {\n        var v = variationData[k];\n        emojiData[k] = v;\n      }\n    }\n  }\n\n  if (emojiData.variations && emojiData.variations.length) {\n    emojiData = JSON.parse(_JSON.stringify(emojiData));\n    emojiData.unified = emojiData.variations.shift();\n  }\n\n  return emojiData;\n}\n\nfunction uniq(arr) {\n  return arr.reduce(function (acc, item) {\n    if (acc.indexOf(item) === -1) {\n      acc.push(item);\n    }\n    return acc;\n  }, []);\n}\n\nfunction intersect(a, b) {\n  var uniqA = uniq(a);\n  var uniqB = uniq(b);\n\n  return uniqA.filter(function (item) {\n    return uniqB.indexOf(item) >= 0;\n  });\n}\n\nfunction deepMerge(a, b) {\n  var o = {};\n\n  for (var key in a) {\n    var originalValue = a[key],\n        value = originalValue;\n\n    if (b.hasOwnProperty(key)) {\n      value = b[key];\n    }\n\n    if (typeof value === 'object') {\n      value = deepMerge(originalValue, value);\n    }\n\n    o[key] = value;\n  }\n\n  return o;\n}\n\n// https://github.com/sonicdoe/measure-scrollbar\nfunction measureScrollbar() {\n  if (typeof document == 'undefined') return 0;\n  var div = document.createElement('div');\n\n  div.style.width = '100px';\n  div.style.height = '100px';\n  div.style.overflow = 'scroll';\n  div.style.position = 'absolute';\n  div.style.top = '-9999px';\n\n  document.body.appendChild(div);\n  var scrollbarWidth = div.offsetWidth - div.clientWidth;\n  document.body.removeChild(div);\n\n  return scrollbarWidth;\n}\n\n// Use requestIdleCallback() if available, else fall back to setTimeout().\n// Throttle so as not to run too frequently.\nfunction throttleIdleTask(func) {\n  var doIdleTask = typeof requestIdleCallback === 'function' ? requestIdleCallback : setTimeout;\n\n  var running = false;\n\n  return function throttled() {\n    if (running) {\n      return;\n    }\n    running = true;\n    doIdleTask(function () {\n      running = false;\n      func();\n    });\n  };\n}\n\nvar NAMESPACE = 'emoji-mart';\n\nvar _JSON$1 = JSON;\n\nvar isLocalStorageSupported = typeof window !== 'undefined' && 'localStorage' in window;\n\nvar getter = void 0;\nvar setter = void 0;\n\nfunction setHandlers(handlers) {\n  handlers || (handlers = {});\n\n  getter = handlers.getter;\n  setter = handlers.setter;\n}\n\nfunction setNamespace(namespace) {\n  NAMESPACE = namespace;\n}\n\nfunction update(state) {\n  for (var key in state) {\n    var value = state[key];\n    set(key, value);\n  }\n}\n\nfunction set(key, value) {\n  if (setter) {\n    setter(key, value);\n  } else {\n    if (!isLocalStorageSupported) return;\n    try {\n      window.localStorage[NAMESPACE + '.' + key] = _JSON$1.stringify(value);\n    } catch (e) {}\n  }\n}\n\nfunction get(key) {\n  if (getter) {\n    return getter(key);\n  } else {\n    if (!isLocalStorageSupported) return;\n    try {\n      var value = window.localStorage[NAMESPACE + '.' + key];\n    } catch (e) {\n      return;\n    }\n\n    if (value) {\n      return JSON.parse(value);\n    }\n  }\n}\n\nvar store = { update: update, set: set, get: get, setNamespace: setNamespace, setHandlers: setHandlers };\n\nvar NimbleEmojiIndex = function () {\n  function NimbleEmojiIndex(data, set) {\n    _classCallCheck(this, NimbleEmojiIndex);\n\n    if (data.compressed) {\n      uncompress(data);\n    }\n\n    this.data = data || {};\n    this.set = set || null;\n    this.originalPool = {};\n    this.index = {};\n    this.emojis = {};\n    this.emoticons = {};\n    this.customEmojisList = [];\n\n    this.buildIndex();\n  }\n\n  _createClass(NimbleEmojiIndex, [{\n    key: 'buildIndex',\n    value: function buildIndex() {\n      var _this = this;\n\n      var _loop = function _loop(emoji) {\n        var emojiData = _this.data.emojis[emoji];\n        var short_names = emojiData.short_names;\n        var emoticons = emojiData.emoticons;\n        var skin_variations = emojiData.skin_variations;\n        var id = short_names[0];\n\n        if (emoticons) {\n          emoticons.forEach(function (emoticon) {\n            if (_this.emoticons[emoticon]) {\n              return;\n            }\n\n            _this.emoticons[emoticon] = id;\n          });\n        }\n\n        // If skin variations include them\n        if (skin_variations) {\n          _this.emojis[id] = {};\n          for (var skinTone = 1; skinTone <= 6; skinTone++) {\n            _this.emojis[id][skinTone] = getSanitizedData({ id: id, skin: skinTone }, skinTone, _this.set, _this.data);\n          }\n        } else {\n          _this.emojis[id] = getSanitizedData(id, null, _this.set, _this.data);\n        }\n\n        _this.originalPool[id] = emojiData;\n      };\n\n      for (var emoji in this.data.emojis) {\n        _loop(emoji);\n      }\n    }\n  }, {\n    key: 'clearCustomEmojis',\n    value: function clearCustomEmojis(pool) {\n      var _this2 = this;\n\n      this.customEmojisList.forEach(function (emoji) {\n        var emojiId = emoji.id || emoji.short_names[0];\n\n        delete pool[emojiId];\n        delete _this2.emojis[emojiId];\n      });\n    }\n  }, {\n    key: 'addCustomToPool',\n    value: function addCustomToPool(custom, pool) {\n      var _this3 = this;\n\n      if (this.customEmojisList.length) this.clearCustomEmojis(pool);\n\n      custom.forEach(function (emoji) {\n        var emojiId = emoji.id || emoji.short_names[0];\n\n        if (emojiId && !pool[emojiId]) {\n          pool[emojiId] = getData(emoji, null, null, _this3.data);\n          _this3.emojis[emojiId] = getSanitizedData(emoji, null, null, _this3.data);\n        }\n      });\n\n      this.customEmojisList = custom;\n      this.index = {};\n    }\n  }, {\n    key: 'search',\n    value: function search(value) {\n      var _this4 = this;\n\n      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var emojisToShowFilter = _ref.emojisToShowFilter;\n      var maxResults = _ref.maxResults;\n      var include = _ref.include;\n      var exclude = _ref.exclude;\n      var _ref$custom = _ref.custom;\n      var custom = _ref$custom === undefined ? [] : _ref$custom;\n\n      if (this.customEmojisList != custom) this.addCustomToPool(custom, this.originalPool);\n\n      var skinTone = store.get('skin') || 1;\n\n      maxResults || (maxResults = 75);\n      include || (include = []);\n      exclude || (exclude = []);\n\n      var results = null,\n          pool = this.originalPool;\n\n      if (value.length) {\n        if (value == '-' || value == '-1') {\n          return [this.emojis['-1'][skinTone]];\n        }\n\n        var values = value.toLowerCase().split(/[\\s|,|\\-|_]+/),\n            allResults = [];\n\n        if (values.length > 2) {\n          values = [values[0], values[1]];\n        }\n\n        if (include.length || exclude.length) {\n          pool = {};\n\n          this.data.categories.forEach(function (category) {\n            var isIncluded = include && include.length ? include.indexOf(category.id) > -1 : true;\n            var isExcluded = exclude && exclude.length ? exclude.indexOf(category.id) > -1 : false;\n            if (!isIncluded || isExcluded) {\n              return;\n            }\n\n            category.emojis.forEach(function (emojiId) {\n              return pool[emojiId] = _this4.data.emojis[emojiId];\n            });\n          });\n\n          if (custom.length) {\n            var customIsIncluded = include && include.length ? include.indexOf('custom') > -1 : true;\n            var customIsExcluded = exclude && exclude.length ? exclude.indexOf('custom') > -1 : false;\n            if (customIsIncluded && !customIsExcluded) {\n              this.addCustomToPool(custom, pool);\n            }\n          }\n        }\n\n        allResults = values.map(function (value) {\n          var aPool = pool,\n              aIndex = _this4.index,\n              length = 0;\n\n          for (var charIndex = 0; charIndex < value.length; charIndex++) {\n            var char = value[charIndex];\n            length++;\n\n            aIndex[char] || (aIndex[char] = {});\n            aIndex = aIndex[char];\n\n            if (!aIndex.results) {\n              (function () {\n                var scores = {};\n\n                aIndex.results = [];\n                aIndex.pool = {};\n\n                for (var _id in aPool) {\n                  var emoji = aPool[_id];\n                  var search = emoji.search;\n                  var sub = value.substr(0, length);\n                  var subIndex = search.indexOf(sub);\n\n                  if (subIndex != -1) {\n                    var score = subIndex + 1;\n                    if (sub == _id) score = 0;\n\n                    if (_this4.emojis[_id] && _this4.emojis[_id][skinTone]) {\n                      aIndex.results.push(_this4.emojis[_id][skinTone]);\n                    } else {\n                      aIndex.results.push(_this4.emojis[_id]);\n                    }\n                    aIndex.pool[_id] = emoji;\n\n                    scores[_id] = score;\n                  }\n                }\n\n                aIndex.results.sort(function (a, b) {\n                  var aScore = scores[a.id],\n                      bScore = scores[b.id];\n\n                  return aScore - bScore;\n                });\n              })();\n            }\n\n            aPool = aIndex.pool;\n          }\n\n          return aIndex.results;\n        }).filter(function (a) {\n          return a;\n        });\n\n        if (allResults.length > 1) {\n          results = intersect.apply(null, allResults);\n        } else if (allResults.length) {\n          results = allResults[0];\n        } else {\n          results = [];\n        }\n      }\n\n      if (results) {\n        if (emojisToShowFilter) {\n          results = results.filter(function (result) {\n            return emojisToShowFilter(pool[result.id]);\n          });\n        }\n\n        if (results && results.length > maxResults) {\n          results = results.slice(0, maxResults);\n        }\n      }\n\n      return results;\n    }\n  }]);\n\n  return NimbleEmojiIndex;\n}();\n\nvar emojiIndex = new NimbleEmojiIndex(data);\n\nvar DEFAULTS = ['+1', 'grinning', 'kissing_heart', 'heart_eyes', 'laughing', 'stuck_out_tongue_winking_eye', 'sweat_smile', 'joy', 'scream', 'disappointed', 'unamused', 'weary', 'sob', 'sunglasses', 'heart', 'poop'];\n\nvar frequently = void 0,\n    initialized = void 0;\nvar defaults = {};\n\nfunction init() {\n  initialized = true;\n  frequently = store.get('frequently');\n}\n\nfunction add(emoji) {\n  if (!initialized) init();\n  var id = emoji.id;\n\n\n  frequently || (frequently = defaults);\n  frequently[id] || (frequently[id] = 0);\n  frequently[id] += 1;\n\n  store.set('last', id);\n  store.set('frequently', frequently);\n}\n\nfunction get$1(perLine) {\n  if (!initialized) init();\n  if (!frequently) {\n    defaults = {};\n\n    var result = [];\n\n    for (var i = 0; i < perLine; i++) {\n      defaults[DEFAULTS[i]] = perLine - i;\n      result.push(DEFAULTS[i]);\n    }\n\n    return result;\n  }\n\n  var quantity = perLine * 4;\n  var frequentlyKeys = [];\n\n  for (var key in frequently) {\n    if (frequently.hasOwnProperty(key)) {\n      frequentlyKeys.push(key);\n    }\n  }\n\n  var sorted = frequentlyKeys.sort(function (a, b) {\n    return frequently[a] - frequently[b];\n  }).reverse();\n  var sliced = sorted.slice(0, quantity);\n\n  var last = store.get('last');\n\n  if (last && sliced.indexOf(last) == -1) {\n    sliced.pop();\n    sliced.push(last);\n  }\n\n  return sliced;\n}\n\nvar frequently$1 = { add: add, get: get$1 };\n\nvar _Object$1 = Object;\n\nvar _extends = _Object$1.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _Object$2 = Object;\n\nvar _Object$getPrototypeOf = _Object$2.getPrototypeOf || function (O) {\n  O = Object(O);\n\n  if (typeof O.constructor === 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  }\n\n  return O instanceof Object ? Object.prototype : null;\n};\n\nfunction possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === 'object' || typeof call === 'function') ? call : self;\n}\n\nvar _Object$3 = Object;\n\nfunction inherits(subClass, superClass) {\n  if (typeof superClass !== 'function' && superClass !== null) {\n    throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n  }\n\n  subClass.prototype = _Object$3.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) {\n    _Object$3.setPrototypeOf ? _Object$3.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n}\n\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n// MIT license\n\nvar isWindowAvailable = typeof window !== 'undefined';\n\nisWindowAvailable && function () {\n  var lastTime = 0;\n  var vendors = ['ms', 'moz', 'webkit', 'o'];\n\n  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n  }\n\n  if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n    var currTime = new Date().getTime();\n    var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n    var id = window.setTimeout(function () {\n      callback(currTime + timeToCall);\n    }, timeToCall);\n\n    lastTime = currTime + timeToCall;\n    return id;\n  };\n\n  if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n    clearTimeout(id);\n  };\n}();\n\nvar categories$1 = {\n  activity: function activity() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12 0C5.373 0 0 5.372 0 12c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.628-5.372-12-12-12m9.949 11H17.05c.224-2.527 1.232-4.773 1.968-6.113A9.966 9.966 0 0 1 21.949 11M13 11V2.051a9.945 9.945 0 0 1 4.432 1.564c-.858 1.491-2.156 4.22-2.392 7.385H13zm-2 0H8.961c-.238-3.165-1.536-5.894-2.393-7.385A9.95 9.95 0 0 1 11 2.051V11zm0 2v8.949a9.937 9.937 0 0 1-4.432-1.564c.857-1.492 2.155-4.221 2.393-7.385H11zm4.04 0c.236 3.164 1.534 5.893 2.392 7.385A9.92 9.92 0 0 1 13 21.949V13h2.04zM4.982 4.887C5.718 6.227 6.726 8.473 6.951 11h-4.9a9.977 9.977 0 0 1 2.931-6.113M2.051 13h4.9c-.226 2.527-1.233 4.771-1.969 6.113A9.972 9.972 0 0 1 2.051 13m16.967 6.113c-.735-1.342-1.744-3.586-1.968-6.113h4.899a9.961 9.961 0 0 1-2.931 6.113\" })\n    );\n  },\n\n  custom: function custom() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        \"g\",\n        { transform: \"translate(2.000000, 1.000000)\" },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"rect\", { id: \"Rectangle\", x: \"8\", y: \"0\", width: \"3\", height: \"21\", rx: \"1.5\" }),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"rect\", {\n          id: \"Rectangle\",\n          transform: \"translate(9.843, 10.549) rotate(60) translate(-9.843, -10.549) \",\n          x: \"8.343\",\n          y: \"0.049\",\n          width: \"3\",\n          height: \"21\",\n          rx: \"1.5\"\n        }),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"rect\", {\n          id: \"Rectangle\",\n          transform: \"translate(9.843, 10.549) rotate(-60) translate(-9.843, -10.549) \",\n          x: \"8.343\",\n          y: \"0.049\",\n          width: \"3\",\n          height: \"21\",\n          rx: \"1.5\"\n        })\n      )\n    );\n  },\n\n  flags: function flags() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M0 0l6.084 24H8L1.916 0zM21 5h-4l-1-4H4l3 12h3l1 4h13L21 5zM6.563 3h7.875l2 8H8.563l-2-8zm8.832 10l-2.856 1.904L12.063 13h3.332zM19 13l-1.5-6h1.938l2 8H16l3-2z\" })\n    );\n  },\n\n  foods: function foods() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M17 4.978c-1.838 0-2.876.396-3.68.934.513-1.172 1.768-2.934 4.68-2.934a1 1 0 0 0 0-2c-2.921 0-4.629 1.365-5.547 2.512-.064.078-.119.162-.18.244C11.73 1.838 10.798.023 9.207.023 8.579.022 7.85.306 7 .978 5.027 2.54 5.329 3.902 6.492 4.999 3.609 5.222 0 7.352 0 12.969c0 4.582 4.961 11.009 9 11.009 1.975 0 2.371-.486 3-1 .629.514 1.025 1 3 1 4.039 0 9-6.418 9-11 0-5.953-4.055-8-7-8M8.242 2.546c.641-.508.943-.523.965-.523.426.169.975 1.405 1.357 3.055-1.527-.629-2.741-1.352-2.98-1.846.059-.112.241-.356.658-.686M15 21.978c-1.08 0-1.21-.109-1.559-.402l-.176-.146c-.367-.302-.816-.452-1.266-.452s-.898.15-1.266.452l-.176.146c-.347.292-.477.402-1.557.402-2.813 0-7-5.389-7-9.009 0-5.823 4.488-5.991 5-5.991 1.939 0 2.484.471 3.387 1.251l.323.276a1.995 1.995 0 0 0 2.58 0l.323-.276c.902-.78 1.447-1.251 3.387-1.251.512 0 5 .168 5 6 0 3.617-4.187 9-7 9\" })\n    );\n  },\n\n  nature: function nature() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M15.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 15.5 8M8.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 8.5 8\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M18.933 0h-.027c-.97 0-2.138.787-3.018 1.497-1.274-.374-2.612-.51-3.887-.51-1.285 0-2.616.133-3.874.517C7.245.79 6.069 0 5.093 0h-.027C3.352 0 .07 2.67.002 7.026c-.039 2.479.276 4.238 1.04 5.013.254.258.882.677 1.295.882.191 3.177.922 5.238 2.536 6.38.897.637 2.187.949 3.2 1.102C8.04 20.6 8 20.795 8 21c0 1.773 2.35 3 4 3 1.648 0 4-1.227 4-3 0-.201-.038-.393-.072-.586 2.573-.385 5.435-1.877 5.925-7.587.396-.22.887-.568 1.104-.788.763-.774 1.079-2.534 1.04-5.013C23.929 2.67 20.646 0 18.933 0M3.223 9.135c-.237.281-.837 1.155-.884 1.238-.15-.41-.368-1.349-.337-3.291.051-3.281 2.478-4.972 3.091-5.031.256.015.731.27 1.265.646-1.11 1.171-2.275 2.915-2.352 5.125-.133.546-.398.858-.783 1.313M12 22c-.901 0-1.954-.693-2-1 0-.654.475-1.236 1-1.602V20a1 1 0 1 0 2 0v-.602c.524.365 1 .947 1 1.602-.046.307-1.099 1-2 1m3-3.48v.02a4.752 4.752 0 0 0-1.262-1.02c1.092-.516 2.239-1.334 2.239-2.217 0-1.842-1.781-2.195-3.977-2.195-2.196 0-3.978.354-3.978 2.195 0 .883 1.148 1.701 2.238 2.217A4.8 4.8 0 0 0 9 18.539v-.025c-1-.076-2.182-.281-2.973-.842-1.301-.92-1.838-3.045-1.853-6.478l.023-.041c.496-.826 1.49-1.45 1.804-3.102 0-2.047 1.357-3.631 2.362-4.522C9.37 3.178 10.555 3 11.948 3c1.447 0 2.685.192 3.733.57 1 .9 2.316 2.465 2.316 4.48.313 1.651 1.307 2.275 1.803 3.102.035.058.068.117.102.178-.059 5.967-1.949 7.01-4.902 7.19m6.628-8.202c-.037-.065-.074-.13-.113-.195a7.587 7.587 0 0 0-.739-.987c-.385-.455-.648-.768-.782-1.313-.076-2.209-1.241-3.954-2.353-5.124.531-.376 1.004-.63 1.261-.647.636.071 3.044 1.764 3.096 5.031.027 1.81-.347 3.218-.37 3.235\" })\n    );\n  },\n\n  objects: function objects() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12 0a9 9 0 0 0-5 16.482V21s2.035 3 5 3 5-3 5-3v-4.518A9 9 0 0 0 12 0zm0 2c3.86 0 7 3.141 7 7s-3.14 7-7 7-7-3.141-7-7 3.14-7 7-7zM9 17.477c.94.332 1.946.523 3 .523s2.06-.19 3-.523v.834c-.91.436-1.925.689-3 .689a6.924 6.924 0 0 1-3-.69v-.833zm.236 3.07A8.854 8.854 0 0 0 12 21c.965 0 1.888-.167 2.758-.451C14.155 21.173 13.153 22 12 22c-1.102 0-2.117-.789-2.764-1.453z\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M14.745 12.449h-.004c-.852-.024-1.188-.858-1.577-1.824-.421-1.061-.703-1.561-1.182-1.566h-.009c-.481 0-.783.497-1.235 1.537-.436.982-.801 1.811-1.636 1.791l-.276-.043c-.565-.171-.853-.691-1.284-1.794-.125-.313-.202-.632-.27-.913-.051-.213-.127-.53-.195-.634C7.067 9.004 7.039 9 6.99 9A1 1 0 0 1 7 7h.01c1.662.017 2.015 1.373 2.198 2.134.486-.981 1.304-2.058 2.797-2.075 1.531.018 2.28 1.153 2.731 2.141l.002-.008C14.944 8.424 15.327 7 16.979 7h.032A1 1 0 1 1 17 9h-.011c-.149.076-.256.474-.319.709a6.484 6.484 0 0 1-.311.951c-.429.973-.79 1.789-1.614 1.789\" })\n    );\n  },\n\n  people: function people() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M8 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 8 7M16 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 16 7M15.232 15c-.693 1.195-1.87 2-3.349 2-1.477 0-2.655-.805-3.347-2H15m3-2H6a6 6 0 1 0 12 0\" })\n    );\n  },\n\n  places: function places() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M6.5 12C5.122 12 4 13.121 4 14.5S5.122 17 6.5 17 9 15.879 9 14.5 7.878 12 6.5 12m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5M17.5 12c-1.378 0-2.5 1.121-2.5 2.5s1.122 2.5 2.5 2.5 2.5-1.121 2.5-2.5-1.122-2.5-2.5-2.5m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M22.482 9.494l-1.039-.346L21.4 9h.6c.552 0 1-.439 1-.992 0-.006-.003-.008-.003-.008H23c0-1-.889-2-1.984-2h-.642l-.731-1.717C19.262 3.012 18.091 2 16.764 2H7.236C5.909 2 4.738 3.012 4.357 4.283L3.626 6h-.642C1.889 6 1 7 1 8h.003S1 8.002 1 8.008C1 8.561 1.448 9 2 9h.6l-.043.148-1.039.346a2.001 2.001 0 0 0-1.359 2.097l.751 7.508a1 1 0 0 0 .994.901H3v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h6v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h1.096a.999.999 0 0 0 .994-.901l.751-7.508a2.001 2.001 0 0 0-1.359-2.097M6.273 4.857C6.402 4.43 6.788 4 7.236 4h9.527c.448 0 .834.43.963.857L19.313 9H4.688l1.585-4.143zM7 21H5v-1h2v1zm12 0h-2v-1h2v1zm2.189-3H2.811l-.662-6.607L3 11h18l.852.393L21.189 18z\" })\n    );\n  },\n\n  recent: function recent() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M13 4h-2l-.001 7H9v2h2v2h2v-2h4v-2h-4z\" }),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" })\n    );\n  },\n\n  symbols: function symbols() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        viewBox: \"0 0 24 24\",\n        width: \"24\",\n        height: \"24\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M0 0h11v2H0zM4 11h3V6h4V4H0v2h4zM15.5 17c1.381 0 2.5-1.116 2.5-2.493s-1.119-2.493-2.5-2.493S13 13.13 13 14.507 14.119 17 15.5 17m0-2.986c.276 0 .5.222.5.493 0 .272-.224.493-.5.493s-.5-.221-.5-.493.224-.493.5-.493M21.5 19.014c-1.381 0-2.5 1.116-2.5 2.493S20.119 24 21.5 24s2.5-1.116 2.5-2.493-1.119-2.493-2.5-2.493m0 2.986a.497.497 0 0 1-.5-.493c0-.271.224-.493.5-.493s.5.222.5.493a.497.497 0 0 1-.5.493M22 13l-9 9 1.513 1.5 8.99-9.009zM17 11c2.209 0 4-1.119 4-2.5V2s.985-.161 1.498.949C23.01 4.055 23 6 23 6s1-1.119 1-3.135C24-.02 21 0 21 0h-2v6.347A5.853 5.853 0 0 0 17 6c-2.209 0-4 1.119-4 2.5s1.791 2.5 4 2.5M10.297 20.482l-1.475-1.585a47.54 47.54 0 0 1-1.442 1.129c-.307-.288-.989-1.016-2.045-2.183.902-.836 1.479-1.466 1.729-1.892s.376-.871.376-1.336c0-.592-.273-1.178-.818-1.759-.546-.581-1.329-.871-2.349-.871-1.008 0-1.79.293-2.344.879-.556.587-.832 1.181-.832 1.784 0 .813.419 1.748 1.256 2.805-.847.614-1.444 1.208-1.794 1.784a3.465 3.465 0 0 0-.523 1.833c0 .857.308 1.56.924 2.107.616.549 1.423.823 2.42.823 1.173 0 2.444-.379 3.813-1.137L8.235 24h2.819l-2.09-2.383 1.333-1.135zm-6.736-6.389a1.02 1.02 0 0 1 .73-.286c.31 0 .559.085.747.254a.849.849 0 0 1 .283.659c0 .518-.419 1.112-1.257 1.784-.536-.651-.805-1.231-.805-1.742a.901.901 0 0 1 .302-.669M3.74 22c-.427 0-.778-.116-1.057-.349-.279-.232-.418-.487-.418-.766 0-.594.509-1.288 1.527-2.083.968 1.134 1.717 1.946 2.248 2.438-.921.507-1.686.76-2.3.76\" })\n    );\n  }\n};\n\nvar search$1 = {\n  search: function search() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        width: \"13\",\n        height: \"13\",\n        viewBox: \"0 0 20 20\",\n        opacity: \"0.5\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" })\n    );\n  },\n\n  delete: function _delete() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      \"svg\",\n      {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        width: \"13\",\n        height: \"13\",\n        viewBox: \"0 0 20 20\",\n        opacity: \"0.5\"\n      },\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", { d: \"M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z\" })\n    );\n  }\n};\n\nvar icons = /*#__PURE__*/Object.freeze({\n  categories: categories$1,\n  search: search$1\n});\n\nvar EmojiPropTypes = {\n  data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n  onOver: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  fallback: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  backgroundImageFn: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  native: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  forceSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  tooltip: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  skin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([1, 2, 3, 4, 5, 6]),\n  sheetSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([16, 20, 32, 64]),\n  sheetColumns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  sheetRows: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  set: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['apple', 'google', 'twitter', 'emojione', 'messenger', 'facebook']),\n  size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n  emoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]).isRequired\n};\n\nvar PickerPropTypes = {\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onSkinChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  perLine: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  emojiSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  i18n: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object,\n  style: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object,\n  title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  emoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  color: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  set: EmojiPropTypes.set,\n  skin: EmojiPropTypes.skin,\n  native: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  backgroundImageFn: EmojiPropTypes.backgroundImageFn,\n  sheetSize: EmojiPropTypes.sheetSize,\n  emojisToShowFilter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  showPreview: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  showSkinTones: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  emojiTooltip: EmojiPropTypes.tooltip,\n  include: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n  exclude: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n  recent: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  custom: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n    name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n    short_names: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string).isRequired,\n    emoticons: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n    keywords: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n    imageUrl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n    spriteUrl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n    sheet_x: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n    sheet_y: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n    size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n    sheetColumns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n    sheetRows: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number\n  })),\n  skinEmoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  notFound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  notFoundEmoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  icons: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nvar Anchors = function (_React$PureComponent) {\n  inherits(Anchors, _React$PureComponent);\n\n  function Anchors(props) {\n    _classCallCheck(this, Anchors);\n\n    var _this = possibleConstructorReturn(this, (Anchors.__proto__ || _Object$getPrototypeOf(Anchors)).call(this, props));\n\n    var defaultCategory = props.categories.filter(function (category) {\n      return category.first;\n    })[0];\n\n    _this.state = {\n      selected: defaultCategory.name\n    };\n\n    _this.handleClick = _this.handleClick.bind(_this);\n    return _this;\n  }\n\n  _createClass(Anchors, [{\n    key: 'handleClick',\n    value: function handleClick(e) {\n      var index = e.currentTarget.getAttribute('data-index');\n      var _props = this.props;\n      var categories = _props.categories;\n      var onAnchorClick = _props.onAnchorClick;\n\n\n      onAnchorClick(categories[index], index);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var _props2 = this.props;\n      var categories = _props2.categories;\n      var color = _props2.color;\n      var i18n = _props2.i18n;\n      var icons = _props2.icons;\n      var selected = this.state.selected;\n\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'nav',\n        { className: 'emoji-mart-anchors', 'aria-label': i18n.categorieslabel },\n        categories.map(function (category, i) {\n          var id = category.id;\n          var name = category.name;\n          var anchor = category.anchor;\n          var isSelected = name == selected;\n\n          if (anchor === false) {\n            return null;\n          }\n\n          return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'button',\n            {\n              key: id,\n              'aria-label': i18n.categories[id],\n              title: i18n.categories[id],\n              'data-index': i,\n              type: 'button',\n              onClick: _this2.handleClick,\n              className: 'emoji-mart-anchor ' + (isSelected ? 'emoji-mart-anchor-selected' : ''),\n              style: { color: isSelected ? color : null }\n            },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              { className: 'emoji-mart-anchor-icon' },\n              icons.categories[id]()\n            ),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('span', {\n              className: 'emoji-mart-anchor-bar',\n              style: { backgroundColor: color }\n            })\n          );\n        })\n      );\n    }\n  }]);\n\n  return Anchors;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nAnchors.propTypes /* remove-proptypes */ = {\n  categories: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array,\n  onAnchorClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  icons: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nAnchors.defaultProps = {\n  categories: [],\n  onAnchorClick: function onAnchorClick() {},\n  icons: {}\n};\n\nvar EmojiDefaultProps = {\n  skin: 1,\n  set: 'apple',\n  sheetSize: 64,\n  sheetColumns: 52,\n  sheetRows: 52,\n  native: false,\n  forceSize: false,\n  tooltip: false,\n  backgroundImageFn: function backgroundImageFn(set, sheetSize) {\n    return 'https://unpkg.com/emoji-datasource-' + set + '@' + '4.0.4' + '/img/' + set + '/sheets-256/' + sheetSize + '.png';\n  }\n};\n\nvar PickerDefaultProps = {\n  onClick: function onClick() {},\n  onSelect: function onSelect() {},\n  onSkinChange: function onSkinChange() {},\n  emojiSize: 24,\n  perLine: 9,\n  i18n: {},\n  style: {},\n  title: 'Emoji Mart™',\n  emoji: 'department_store',\n  color: '#ae65c5',\n  set: EmojiDefaultProps.set,\n  skin: null,\n  defaultSkin: EmojiDefaultProps.skin,\n  native: EmojiDefaultProps.native,\n  sheetSize: EmojiDefaultProps.sheetSize,\n  backgroundImageFn: EmojiDefaultProps.backgroundImageFn,\n  emojisToShowFilter: null,\n  showPreview: true,\n  showSkinTones: true,\n  emojiTooltip: EmojiDefaultProps.tooltip,\n  autoFocus: false,\n  custom: [],\n  skinEmoji: '',\n  notFound: function notFound() {},\n  notFoundEmoji: 'sleuth_or_spy',\n  icons: {}\n};\n\nvar _getData = function _getData(props) {\n  var emoji = props.emoji;\n  var skin = props.skin;\n  var set = props.set;\n  var data = props.data;\n\n  return getData(emoji, skin, set, data);\n};\n\nvar _getPosition = function _getPosition(props) {\n  var _getData2 = _getData(props);\n\n  var sheet_x = _getData2.sheet_x;\n  var sheet_y = _getData2.sheet_y;\n  var multiplyX = 100 / (props.sheetColumns - 1);\n  var multiplyY = 100 / (props.sheetRows - 1);\n\n  return multiplyX * sheet_x + '% ' + multiplyY * sheet_y + '%';\n};\n\nvar _getSanitizedData = function _getSanitizedData(props) {\n  var emoji = props.emoji;\n  var skin = props.skin;\n  var set = props.set;\n  var data = props.data;\n\n  return getSanitizedData(emoji, skin, set, data);\n};\n\nvar _handleClick = function _handleClick(e, props) {\n  if (!props.onClick) {\n    return;\n  }\n  var onClick = props.onClick;\n  var emoji = _getSanitizedData(props);\n\n  onClick(emoji, e);\n};\n\nvar _handleOver = function _handleOver(e, props) {\n  if (!props.onOver) {\n    return;\n  }\n  var onOver = props.onOver;\n  var emoji = _getSanitizedData(props);\n\n  onOver(emoji, e);\n};\n\nvar _handleLeave = function _handleLeave(e, props) {\n  if (!props.onLeave) {\n    return;\n  }\n  var onLeave = props.onLeave;\n  var emoji = _getSanitizedData(props);\n\n  onLeave(emoji, e);\n};\n\nvar _isNumeric = function _isNumeric(value) {\n  return !isNaN(value - parseFloat(value));\n};\n\nvar _convertStyleToCSS = function _convertStyleToCSS(style) {\n  var div = document.createElement('div');\n\n  for (var key in style) {\n    var value = style[key];\n\n    if (_isNumeric(value)) {\n      value += 'px';\n    }\n\n    div.style[key] = value;\n  }\n\n  return div.getAttribute('style');\n};\n\nvar NimbleEmoji = function NimbleEmoji(props) {\n  if (props.data.compressed) {\n    uncompress(props.data);\n  }\n\n  for (var k in NimbleEmoji.defaultProps) {\n    if (props[k] == undefined && NimbleEmoji.defaultProps[k] != undefined) {\n      props[k] = NimbleEmoji.defaultProps[k];\n    }\n  }\n\n  var data = _getData(props);\n  if (!data) {\n    if (props.fallback) {\n      return props.fallback(null, props);\n    } else {\n      return null;\n    }\n  }\n\n  var unified = data.unified;\n  var custom = data.custom;\n  var short_names = data.short_names;\n  var imageUrl = data.imageUrl;\n  var style = {};\n  var children = props.children;\n  var className = 'emoji-mart-emoji';\n  var nativeEmoji = unified && unifiedToNative(unified);\n  // combine the emoji itself and all shortcodes into an accessible label\n  var label = [nativeEmoji].concat(short_names).filter(Boolean).join(', ');\n  var title = null;\n\n  if (!unified && !custom) {\n    if (props.fallback) {\n      return props.fallback(data, props);\n    } else {\n      return null;\n    }\n  }\n\n  if (props.tooltip) {\n    title = short_names[0];\n  }\n\n  if (props.native && unified) {\n    className += ' emoji-mart-emoji-native';\n    style = { fontSize: props.size };\n    children = nativeEmoji;\n\n    if (props.forceSize) {\n      style.display = 'inline-block';\n      style.width = props.size;\n      style.height = props.size;\n      style.wordBreak = 'keep-all';\n    }\n  } else if (custom) {\n    className += ' emoji-mart-emoji-custom';\n    style = {\n      width: props.size,\n      height: props.size,\n      display: 'inline-block'\n    };\n    if (data.spriteUrl) {\n      style = _extends({}, style, {\n        backgroundImage: 'url(' + data.spriteUrl + ')',\n        backgroundSize: 100 * props.sheetColumns + '% ' + 100 * props.sheetRows + '%',\n        backgroundPosition: _getPosition(props)\n      });\n    } else {\n      style = _extends({}, style, {\n        backgroundImage: 'url(' + imageUrl + ')',\n        backgroundSize: 'contain'\n      });\n    }\n  } else {\n    var setHasEmoji = data['has_img_' + props.set] == undefined || data['has_img_' + props.set];\n\n    if (!setHasEmoji) {\n      if (props.fallback) {\n        return props.fallback(data, props);\n      } else {\n        return null;\n      }\n    } else {\n      style = {\n        width: props.size,\n        height: props.size,\n        display: 'inline-block',\n        backgroundImage: 'url(' + props.backgroundImageFn(props.set, props.sheetSize) + ')',\n        backgroundSize: 100 * props.sheetColumns + '% ' + 100 * props.sheetRows + '%',\n        backgroundPosition: _getPosition(props)\n      };\n    }\n  }\n\n  var Tag = {\n    name: 'span',\n    props: {}\n  };\n\n  if (props.onClick) {\n    Tag.name = 'button';\n    Tag.props = {\n      type: 'button'\n    };\n  }\n\n  if (props.html) {\n    style = _convertStyleToCSS(style);\n    return '<' + Tag.name + ' style=\\'' + style + '\\' aria-label=\\'' + label + '\\' ' + (title ? 'title=\\'' + title + '\\'' : '') + ' class=\\'' + className + '\\'>' + (children || '') + '</' + Tag.name + '>';\n  } else {\n    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n      Tag.name,\n      _extends({\n        onClick: function onClick(e) {\n          return _handleClick(e, props);\n        },\n        onMouseEnter: function onMouseEnter(e) {\n          return _handleOver(e, props);\n        },\n        onMouseLeave: function onMouseLeave(e) {\n          return _handleLeave(e, props);\n        },\n        'aria-label': label,\n        title: title,\n        className: className\n      }, Tag.props),\n      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'span',\n        { style: style },\n        children\n      )\n    );\n  }\n};\n\nNimbleEmoji.propTypes /* remove-proptypes */ = _extends({}, EmojiPropTypes, {\n  data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired\n});\nNimbleEmoji.defaultProps = EmojiDefaultProps;\n\nvar NotFound = function (_React$PureComponent) {\n  inherits(NotFound, _React$PureComponent);\n\n  function NotFound() {\n    _classCallCheck(this, NotFound);\n\n    return possibleConstructorReturn(this, (NotFound.__proto__ || _Object$getPrototypeOf(NotFound)).apply(this, arguments));\n  }\n\n  _createClass(NotFound, [{\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var data = _props.data;\n      var emojiProps = _props.emojiProps;\n      var i18n = _props.i18n;\n      var notFound = _props.notFound;\n      var notFoundEmoji = _props.notFoundEmoji;\n\n\n      var component = notFound && notFound() || react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'div',\n        { className: 'emoji-mart-no-results' },\n        NimbleEmoji(_extends({\n          data: data\n        }, emojiProps, {\n          size: 38,\n          emoji: notFoundEmoji,\n          onOver: null,\n          onLeave: null,\n          onClick: null\n        })),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-no-results-label' },\n          i18n.notfound\n        )\n      );\n\n      return component;\n    }\n  }]);\n\n  return NotFound;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nNotFound.propTypes /* remove-proptypes */ = {\n  notFound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n  emojiProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired\n};\n\nvar Category = function (_React$Component) {\n  inherits(Category, _React$Component);\n\n  function Category(props) {\n    _classCallCheck(this, Category);\n\n    var _this = possibleConstructorReturn(this, (Category.__proto__ || _Object$getPrototypeOf(Category)).call(this, props));\n\n    _this.data = props.data;\n    _this.setContainerRef = _this.setContainerRef.bind(_this);\n    _this.setLabelRef = _this.setLabelRef.bind(_this);\n    return _this;\n  }\n\n  _createClass(Category, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.margin = 0;\n      this.minMargin = 0;\n\n      this.memoizeSize();\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps, nextState) {\n      var _props = this.props;\n      var name = _props.name;\n      var perLine = _props.perLine;\n      var native = _props.native;\n      var hasStickyPosition = _props.hasStickyPosition;\n      var emojis = _props.emojis;\n      var emojiProps = _props.emojiProps;\n      var skin = emojiProps.skin;\n      var size = emojiProps.size;\n      var set = emojiProps.set;\n      var nextPerLine = nextProps.perLine;\n      var nextNative = nextProps.native;\n      var nextHasStickyPosition = nextProps.hasStickyPosition;\n      var nextEmojis = nextProps.emojis;\n      var nextEmojiProps = nextProps.emojiProps;\n      var nextSkin = nextEmojiProps.skin;\n      var nextSize = nextEmojiProps.size;\n      var nextSet = nextEmojiProps.set;\n      var shouldUpdate = false;\n\n      if (name == 'Recent' && perLine != nextPerLine) {\n        shouldUpdate = true;\n      }\n\n      if (name == 'Search') {\n        shouldUpdate = !(emojis == nextEmojis);\n      }\n\n      if (skin != nextSkin || size != nextSize || native != nextNative || set != nextSet || hasStickyPosition != nextHasStickyPosition) {\n        shouldUpdate = true;\n      }\n\n      return shouldUpdate;\n    }\n  }, {\n    key: 'memoizeSize',\n    value: function memoizeSize() {\n      if (!this.container) {\n        // probably this is a test environment, e.g. jest\n        this.top = 0;\n        this.maxMargin = 0;\n        return;\n      }\n      var parent = this.container.parentElement;\n\n      var _container$getBoundin = this.container.getBoundingClientRect();\n\n      var top = _container$getBoundin.top;\n      var height = _container$getBoundin.height;\n\n      var _parent$getBoundingCl = parent.getBoundingClientRect();\n\n      var parentTop = _parent$getBoundingCl.top;\n\n      var _label$getBoundingCli = this.label.getBoundingClientRect();\n\n      var labelHeight = _label$getBoundingCli.height;\n\n\n      this.top = top - parentTop + parent.scrollTop;\n\n      if (height == 0) {\n        this.maxMargin = 0;\n      } else {\n        this.maxMargin = height - labelHeight;\n      }\n    }\n  }, {\n    key: 'handleScroll',\n    value: function handleScroll(scrollTop) {\n      var margin = scrollTop - this.top;\n      margin = margin < this.minMargin ? this.minMargin : margin;\n      margin = margin > this.maxMargin ? this.maxMargin : margin;\n\n      if (margin == this.margin) return;\n\n      if (!this.props.hasStickyPosition) {\n        this.label.style.top = margin + 'px';\n      }\n\n      this.margin = margin;\n      return true;\n    }\n  }, {\n    key: 'getEmojis',\n    value: function getEmojis() {\n      var _this2 = this;\n\n      var _props2 = this.props;\n      var name = _props2.name;\n      var emojis = _props2.emojis;\n      var recent = _props2.recent;\n      var perLine = _props2.perLine;\n\n\n      if (name == 'Recent') {\n        var custom = this.props.custom;\n\n        var frequentlyUsed = recent || frequently$1.get(perLine);\n\n        if (frequentlyUsed.length) {\n          emojis = frequentlyUsed.map(function (id) {\n            var emoji = custom.filter(function (e) {\n              return e.id === id;\n            })[0];\n            if (emoji) {\n              return emoji;\n            }\n\n            return id;\n          }).filter(function (id) {\n            return !!getData(id, null, null, _this2.data);\n          });\n        }\n\n        if (emojis.length === 0 && frequentlyUsed.length > 0) {\n          return null;\n        }\n      }\n\n      if (emojis) {\n        emojis = emojis.slice(0);\n      }\n\n      return emojis;\n    }\n  }, {\n    key: 'updateDisplay',\n    value: function updateDisplay(display) {\n      var emojis = this.getEmojis();\n\n      if (!emojis || !this.container) {\n        return;\n      }\n\n      this.container.style.display = display;\n    }\n  }, {\n    key: 'setContainerRef',\n    value: function setContainerRef(c) {\n      this.container = c;\n    }\n  }, {\n    key: 'setLabelRef',\n    value: function setLabelRef(c) {\n      this.label = c;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this3 = this;\n\n      var _props3 = this.props;\n      var id = _props3.id;\n      var name = _props3.name;\n      var hasStickyPosition = _props3.hasStickyPosition;\n      var emojiProps = _props3.emojiProps;\n      var i18n = _props3.i18n;\n      var notFound = _props3.notFound;\n      var notFoundEmoji = _props3.notFoundEmoji;\n      var emojis = this.getEmojis();\n      var labelStyles = {};\n      var labelSpanStyles = {};\n      var containerStyles = {};\n\n      if (!emojis) {\n        containerStyles = {\n          display: 'none'\n        };\n      }\n\n      if (!hasStickyPosition) {\n        labelStyles = {\n          height: 28\n        };\n\n        labelSpanStyles = {\n          position: 'absolute'\n        };\n      }\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'section',\n        {\n          ref: this.setContainerRef,\n          className: 'emoji-mart-category',\n          'aria-label': i18n.categories[id],\n          style: containerStyles\n        },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          {\n            style: labelStyles,\n            'data-name': name,\n            className: 'emoji-mart-category-label'\n          },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'span',\n            {\n              style: labelSpanStyles,\n              ref: this.setLabelRef,\n              'aria-hidden': true /* already labeled by the section aria-label */\n            },\n            i18n.categories[id]\n          )\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'ul',\n          { className: 'emoji-mart-category-list' },\n          emojis && emojis.map(function (emoji) {\n            return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'li',\n              { key: emoji.id || emoji },\n              NimbleEmoji(_extends({ emoji: emoji, data: _this3.data }, emojiProps))\n            );\n          })\n        ),\n        emojis && !emojis.length && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(NotFound, {\n          i18n: i18n,\n          notFound: notFound,\n          notFoundEmoji: notFoundEmoji,\n          data: this.data,\n          emojiProps: emojiProps\n        })\n      );\n    }\n  }]);\n\n  return Category;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n\nCategory.propTypes /* remove-proptypes */ = {\n  emojis: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array,\n  hasStickyPosition: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n  native: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired,\n  perLine: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n  emojiProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n  recent: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),\n  notFound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  notFoundEmoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired\n};\n\nCategory.defaultProps = {\n  emojis: [],\n  hasStickyPosition: true\n};\n\nvar Skins = function (_React$PureComponent) {\n  inherits(Skins, _React$PureComponent);\n\n  function Skins(props) {\n    _classCallCheck(this, Skins);\n\n    var _this = possibleConstructorReturn(this, (Skins.__proto__ || _Object$getPrototypeOf(Skins)).call(this, props));\n\n    _this.state = {\n      opened: false\n    };\n    return _this;\n  }\n\n  _createClass(Skins, [{\n    key: 'handleClick',\n    value: function handleClick(e) {\n      var skin = parseInt(e.currentTarget.getAttribute('data-skin'));\n      var onChange = this.props.onChange;\n\n\n      if (!this.state.opened) {\n        this.setState({ opened: true });\n      } else {\n        this.setState({ opened: false });\n        if (skin != this.props.skin) {\n          onChange(skin);\n        }\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return null;\n    }\n  }]);\n\n  return Skins;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nSkins.propTypes /* remove-proptypes */ = {\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  skin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired\n};\n\nSkins.defaultProps = {\n  onChange: function onChange() {}\n};\n\nvar SkinsEmoji = function (_Skins) {\n  inherits(SkinsEmoji, _Skins);\n\n  function SkinsEmoji(props) {\n    _classCallCheck(this, SkinsEmoji);\n\n    var _this = possibleConstructorReturn(this, (SkinsEmoji.__proto__ || _Object$getPrototypeOf(SkinsEmoji)).call(this, props));\n\n    _this.handleClick = _this.handleClick.bind(_this);\n    return _this;\n  }\n\n  _createClass(SkinsEmoji, [{\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var skin = _props.skin;\n      var emojiProps = _props.emojiProps;\n      var data = _props.data;\n      var skinEmoji = _props.skinEmoji;\n      var i18n = _props.i18n;\n      var opened = this.state.opened;\n\n      var skinToneNodes = [];\n\n      for (var skinTone = 1; skinTone <= 6; skinTone++) {\n        var selected = skinTone === skin;\n        skinToneNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'span',\n          {\n            key: 'skin-tone-' + skinTone,\n            className: 'emoji-mart-skin-swatch custom' + (selected ? ' selected' : '')\n          },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'span',\n            {\n              onClick: this.handleClick,\n              'data-skin': skinTone,\n              className: 'emoji-mart-skin-tone-' + skinTone\n            },\n            NimbleEmoji({\n              emoji: skinEmoji,\n              data: data,\n              skin: skinTone,\n              backgroundImageFn: emojiProps.backgroundImageFn,\n              native: emojiProps.native,\n              set: emojiProps.set,\n              sheetSize: emojiProps.sheetSize,\n              size: 23\n            })\n          )\n        ));\n      }\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'div',\n        {\n          className: 'emoji-mart-skin-swatches custom' + (opened ? ' opened' : '')\n        },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-skin-text' + (opened ? ' opened' : '') },\n          i18n.skintext\n        ),\n        skinToneNodes\n      );\n    }\n  }]);\n\n  return SkinsEmoji;\n}(Skins);\n\n\nSkinsEmoji.propTypes /* remove-proptypes */ = {\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  skin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n  emojiProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n  skinTone: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  skinEmoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n  i18n: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nSkinsEmoji.defaultProps = {\n  onChange: function onChange() {},\n  skinTone: null\n};\n\nvar SkinsDot = function (_Skins) {\n  inherits(SkinsDot, _Skins);\n\n  function SkinsDot(props) {\n    _classCallCheck(this, SkinsDot);\n\n    var _this = possibleConstructorReturn(this, (SkinsDot.__proto__ || _Object$getPrototypeOf(SkinsDot)).call(this, props));\n\n    _this.handleClick = _this.handleClick.bind(_this);\n    _this.handleKeyDown = _this.handleKeyDown.bind(_this);\n    return _this;\n  }\n\n  _createClass(SkinsDot, [{\n    key: 'handleKeyDown',\n    value: function handleKeyDown(event) {\n      // if either enter or space is pressed, then execute\n      if (event.keyCode === 13 || event.keyCode === 32) {\n        this.handleClick(event);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var skin = _props.skin;\n      var i18n = _props.i18n;\n      var opened = this.state.opened;\n\n      var skinToneNodes = [];\n\n      for (var skinTone = 1; skinTone <= 6; skinTone++) {\n        var selected = skinTone === skin;\n        var visible = opened || selected;\n        skinToneNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'span',\n          _extends({\n            key: 'skin-tone-' + skinTone,\n            className: 'emoji-mart-skin-swatch' + (selected ? ' selected' : ''),\n            'aria-label': i18n.skintones[skinTone],\n            'aria-hidden': !visible\n          }, opened ? { role: 'menuitem' } : {}),\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('span', _extends({\n            onClick: this.handleClick,\n            onKeyDown: this.handleKeyDown,\n            role: 'button'\n          }, selected ? {\n            'aria-haspopup': true,\n            'aria-expanded': !!opened\n          } : {}, opened ? { 'aria-pressed': !!selected } : {}, {\n            tabIndex: visible ? '0' : '',\n            'aria-label': i18n.skintones[skinTone],\n            title: i18n.skintones[skinTone],\n            'data-skin': skinTone,\n            className: 'emoji-mart-skin emoji-mart-skin-tone-' + skinTone\n          }))\n        ));\n      }\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'section',\n        {\n          className: 'emoji-mart-skin-swatches' + (opened ? ' opened' : ''),\n          'aria-label': i18n.skintext\n        },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          opened ? { role: 'menubar' } : {},\n          skinToneNodes\n        )\n      );\n    }\n  }]);\n\n  return SkinsDot;\n}(Skins);\n\n\nSkinsDot.propTypes /* remove-proptypes */ = {\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  skin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n  i18n: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nSkinsDot.defaultProps = {\n  onChange: function onChange() {}\n};\n\nvar Preview = function (_React$PureComponent) {\n  inherits(Preview, _React$PureComponent);\n\n  function Preview(props) {\n    _classCallCheck(this, Preview);\n\n    var _this = possibleConstructorReturn(this, (Preview.__proto__ || _Object$getPrototypeOf(Preview)).call(this, props));\n\n    _this.data = props.data;\n    _this.state = { emoji: null };\n    return _this;\n  }\n\n  _createClass(Preview, [{\n    key: 'render',\n    value: function render() {\n      var emoji = this.state.emoji;\n      var _props = this.props;\n      var emojiProps = _props.emojiProps;\n      var skinsProps = _props.skinsProps;\n      var showSkinTones = _props.showSkinTones;\n      var title = _props.title;\n      var idleEmoji = _props.emoji;\n      var i18n = _props.i18n;\n      var showPreview = _props.showPreview;\n\n\n      if (emoji && showPreview) {\n        var emojiData = getData(emoji, null, null, this.data);\n        var _emojiData$emoticons = emojiData.emoticons;\n        var emoticons = _emojiData$emoticons === undefined ? [] : _emojiData$emoticons;\n        var knownEmoticons = [];\n        var listedEmoticons = [];\n\n        emoticons.forEach(function (emoticon) {\n          if (knownEmoticons.indexOf(emoticon.toLowerCase()) >= 0) {\n            return;\n          }\n\n          knownEmoticons.push(emoticon.toLowerCase());\n          listedEmoticons.push(emoticon);\n        });\n\n        return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-preview' },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'emoji-mart-preview-emoji', 'aria-hidden': 'true' },\n            NimbleEmoji(_extends({\n              key: emoji.id,\n              emoji: emoji,\n              data: this.data\n            }, emojiProps))\n          ),\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'emoji-mart-preview-data', 'aria-hidden': 'true' },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              { className: 'emoji-mart-preview-name' },\n              emoji.name\n            ),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              { className: 'emoji-mart-preview-shortnames' },\n              emojiData.short_names.map(function (short_name) {\n                return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n                  'span',\n                  { key: short_name, className: 'emoji-mart-preview-shortname' },\n                  ':',\n                  short_name,\n                  ':'\n                );\n              })\n            ),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              { className: 'emoji-mart-preview-emoticons' },\n              listedEmoticons.map(function (emoticon) {\n                return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n                  'span',\n                  { key: emoticon, className: 'emoji-mart-preview-emoticon' },\n                  emoticon\n                );\n              })\n            )\n          )\n        );\n      } else {\n        return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-preview' },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'emoji-mart-preview-emoji', 'aria-hidden': 'true' },\n            idleEmoji && idleEmoji.length && NimbleEmoji(_extends({ emoji: idleEmoji, data: this.data }, emojiProps))\n          ),\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'emoji-mart-preview-data', 'aria-hidden': 'true' },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'span',\n              { className: 'emoji-mart-title-label' },\n              title\n            )\n          ),\n          showSkinTones && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            {\n              className: 'emoji-mart-preview-skins' + (skinsProps.skinEmoji ? ' custom' : '')\n            },\n            skinsProps.skinEmoji ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(SkinsEmoji, {\n              skin: skinsProps.skin,\n              emojiProps: emojiProps,\n              data: this.data,\n              skinEmoji: skinsProps.skinEmoji,\n              i18n: i18n,\n              onChange: skinsProps.onChange\n            }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(SkinsDot, {\n              skin: skinsProps.skin,\n              i18n: i18n,\n              onChange: skinsProps.onChange\n            })\n          )\n        );\n      }\n    }\n  }]);\n\n  return Preview;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nPreview.propTypes /* remove-proptypes */ = {\n  showSkinTones: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n  emoji: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n  emojiProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n  skinsProps: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired\n};\n\nPreview.defaultProps = {\n  showSkinTones: true,\n  onChange: function onChange() {}\n};\n\nvar id = 0;\n\nvar Search = function (_React$PureComponent) {\n  inherits(Search, _React$PureComponent);\n\n  function Search(props) {\n    _classCallCheck(this, Search);\n\n    var _this = possibleConstructorReturn(this, (Search.__proto__ || _Object$getPrototypeOf(Search)).call(this, props));\n\n    _this.state = {\n      icon: search$1.search,\n      isSearching: false,\n      id: ++id\n    };\n\n    _this.data = props.data;\n    _this.emojiIndex = new NimbleEmojiIndex(_this.data);\n    _this.setRef = _this.setRef.bind(_this);\n    _this.clear = _this.clear.bind(_this);\n    _this.handleKeyUp = _this.handleKeyUp.bind(_this);\n\n    // throttle keyboard input so that typing isn't delayed\n    _this.handleChange = throttleIdleTask(_this.handleChange.bind(_this));\n    return _this;\n  }\n\n  _createClass(Search, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      // in some cases (e.g. preact) the input may already be pre-populated\n      // this.input is undefined in Jest tests\n      if (this.input && this.input.value) {\n        this.search(this.input.value);\n      }\n    }\n  }, {\n    key: 'search',\n    value: function search$$1(value) {\n      if (value == '') this.setState({\n        icon: search$1.search,\n        isSearching: false\n      });else this.setState({\n        icon: search$1.delete,\n        isSearching: true\n      });\n\n      this.props.onSearch(this.emojiIndex.search(value, {\n        emojisToShowFilter: this.props.emojisToShowFilter,\n        maxResults: this.props.maxResults,\n        include: this.props.include,\n        exclude: this.props.exclude,\n        custom: this.props.custom\n      }));\n    }\n  }, {\n    key: 'clear',\n    value: function clear() {\n      if (this.input.value == '') return;\n      this.input.value = '';\n      this.input.focus();\n      this.search('');\n    }\n  }, {\n    key: 'handleChange',\n    value: function handleChange() {\n      this.search(this.input.value);\n    }\n  }, {\n    key: 'handleKeyUp',\n    value: function handleKeyUp(e) {\n      if (e.keyCode === 13) {\n        this.clear();\n      }\n    }\n  }, {\n    key: 'setRef',\n    value: function setRef(c) {\n      this.input = c;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var i18n = _props.i18n;\n      var autoFocus = _props.autoFocus;\n      var _state = this.state;\n      var icon = _state.icon;\n      var isSearching = _state.isSearching;\n      var id = _state.id;\n\n      var inputId = 'emoji-mart-search-' + id;\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'section',\n        { className: 'emoji-mart-search', 'aria-label': i18n.search },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('input', {\n          id: inputId,\n          ref: this.setRef,\n          type: 'search',\n          onChange: this.handleChange,\n          placeholder: i18n.search,\n          autoFocus: autoFocus\n        }),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'label',\n          { className: 'emoji-mart-sr-only', htmlFor: inputId },\n          i18n.search\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'button',\n          {\n            className: 'emoji-mart-search-icon',\n            onClick: this.clear,\n            onKeyUp: this.handleKeyUp,\n            'aria-label': i18n.clear,\n            disabled: !isSearching\n          },\n          icon()\n        )\n      );\n    }\n  }]);\n\n  return Search;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nSearch.propTypes /* remove-proptypes */ = {\n  onSearch: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  maxResults: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  emojisToShowFilter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  autoFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nSearch.defaultProps = {\n  onSearch: function onSearch() {},\n  maxResults: 75,\n  emojisToShowFilter: null,\n  autoFocus: false\n};\n\nvar I18N = {\n  search: 'Search',\n  clear: 'Clear', // Accessible label on \"clear\" button\n  notfound: 'No Emoji Found',\n  skintext: 'Choose your default skin tone',\n  categories: {\n    search: 'Search Results',\n    recent: 'Frequently Used',\n    people: 'Smileys & People',\n    nature: 'Animals & Nature',\n    foods: 'Food & Drink',\n    activity: 'Activity',\n    places: 'Travel & Places',\n    objects: 'Objects',\n    symbols: 'Symbols',\n    flags: 'Flags',\n    custom: 'Custom'\n  },\n  categorieslabel: 'Emoji categories', // Accessible title for the list of categories\n  skintones: {\n    1: 'Default Skin Tone',\n    2: 'Light Skin Tone',\n    3: 'Medium-Light Skin Tone',\n    4: 'Medium Skin Tone',\n    5: 'Medium-Dark Skin Tone',\n    6: 'Dark Skin Tone'\n  }\n};\n\nvar NimblePicker = function (_React$PureComponent) {\n  inherits(NimblePicker, _React$PureComponent);\n\n  function NimblePicker(props) {\n    _classCallCheck(this, NimblePicker);\n\n    var _this = possibleConstructorReturn(this, (NimblePicker.__proto__ || _Object$getPrototypeOf(NimblePicker)).call(this, props));\n\n    _this.RECENT_CATEGORY = { id: 'recent', name: 'Recent', emojis: null };\n    _this.CUSTOM_CATEGORY = { id: 'custom', name: 'Custom', emojis: [] };\n    _this.SEARCH_CATEGORY = {\n      id: 'search',\n      name: 'Search',\n      emojis: null,\n      anchor: false\n    };\n\n    if (props.data.compressed) {\n      uncompress(props.data);\n    }\n\n    _this.data = props.data;\n    _this.i18n = deepMerge(I18N, props.i18n);\n    _this.icons = deepMerge(icons, props.icons);\n    _this.state = {\n      skin: props.skin || store.get('skin') || props.defaultSkin,\n      firstRender: true\n    };\n\n    _this.categories = [];\n    var allCategories = [].concat(_this.data.categories);\n\n    if (props.custom.length > 0) {\n      _this.CUSTOM_CATEGORY.emojis = props.custom.map(function (emoji) {\n        return _extends({}, emoji, {\n          // `<Category />` expects emoji to have an `id`.\n          id: emoji.short_names[0],\n          custom: true\n        });\n      });\n\n      allCategories.push(_this.CUSTOM_CATEGORY);\n    }\n\n    _this.hideRecent = true;\n\n    if (props.include != undefined) {\n      allCategories.sort(function (a, b) {\n        if (props.include.indexOf(a.id) > props.include.indexOf(b.id)) {\n          return 1;\n        }\n\n        return -1;\n      });\n    }\n\n    for (var categoryIndex = 0; categoryIndex < allCategories.length; categoryIndex++) {\n      var category = allCategories[categoryIndex];\n      var isIncluded = props.include && props.include.length ? props.include.indexOf(category.id) > -1 : true;\n      var isExcluded = props.exclude && props.exclude.length ? props.exclude.indexOf(category.id) > -1 : false;\n      if (!isIncluded || isExcluded) {\n        continue;\n      }\n\n      if (props.emojisToShowFilter) {\n        var newEmojis = [];\n\n        var emojis = category.emojis;\n\n        for (var emojiIndex = 0; emojiIndex < emojis.length; emojiIndex++) {\n          var emoji = emojis[emojiIndex];\n          if (props.emojisToShowFilter(_this.data.emojis[emoji] || emoji)) {\n            newEmojis.push(emoji);\n          }\n        }\n\n        if (newEmojis.length) {\n          var newCategory = {\n            emojis: newEmojis,\n            name: category.name,\n            id: category.id\n          };\n\n          _this.categories.push(newCategory);\n        }\n      } else {\n        _this.categories.push(category);\n      }\n    }\n\n    var includeRecent = props.include && props.include.length ? props.include.indexOf(_this.RECENT_CATEGORY.id) > -1 : true;\n    var excludeRecent = props.exclude && props.exclude.length ? props.exclude.indexOf(_this.RECENT_CATEGORY.id) > -1 : false;\n    if (includeRecent && !excludeRecent) {\n      _this.hideRecent = false;\n      _this.categories.unshift(_this.RECENT_CATEGORY);\n    }\n\n    if (_this.categories[0]) {\n      _this.categories[0].first = true;\n    }\n\n    _this.categories.unshift(_this.SEARCH_CATEGORY);\n\n    _this.setAnchorsRef = _this.setAnchorsRef.bind(_this);\n    _this.handleAnchorClick = _this.handleAnchorClick.bind(_this);\n    _this.setSearchRef = _this.setSearchRef.bind(_this);\n    _this.handleSearch = _this.handleSearch.bind(_this);\n    _this.setScrollRef = _this.setScrollRef.bind(_this);\n    _this.handleScroll = _this.handleScroll.bind(_this);\n    _this.handleScrollPaint = _this.handleScrollPaint.bind(_this);\n    _this.handleEmojiOver = _this.handleEmojiOver.bind(_this);\n    _this.handleEmojiLeave = _this.handleEmojiLeave.bind(_this);\n    _this.handleEmojiClick = _this.handleEmojiClick.bind(_this);\n    _this.handleEmojiSelect = _this.handleEmojiSelect.bind(_this);\n    _this.setPreviewRef = _this.setPreviewRef.bind(_this);\n    _this.handleSkinChange = _this.handleSkinChange.bind(_this);\n    _this.handleKeyDown = _this.handleKeyDown.bind(_this);\n    return _this;\n  }\n\n  _createClass(NimblePicker, [{\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(props) {\n      if (props.skin) {\n        this.setState({ skin: props.skin });\n      } else if (props.defaultSkin && !store.get('skin')) {\n        this.setState({ skin: props.defaultSkin });\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      if (this.state.firstRender) {\n        this.testStickyPosition();\n        this.firstRenderTimeout = setTimeout(function () {\n          _this2.setState({ firstRender: false });\n        }, 60);\n      }\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      this.updateCategoriesSize();\n      this.handleScroll();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.SEARCH_CATEGORY.emojis = null;\n\n      clearTimeout(this.leaveTimeout);\n      clearTimeout(this.firstRenderTimeout);\n    }\n  }, {\n    key: 'testStickyPosition',\n    value: function testStickyPosition() {\n      var stickyTestElement = document.createElement('div');\n\n      var prefixes = ['', '-webkit-', '-ms-', '-moz-', '-o-'];\n\n      prefixes.forEach(function (prefix) {\n        return stickyTestElement.style.position = prefix + 'sticky';\n      });\n\n      this.hasStickyPosition = !!stickyTestElement.style.position.length;\n    }\n  }, {\n    key: 'handleEmojiOver',\n    value: function handleEmojiOver(emoji) {\n      var preview = this.preview;\n\n      if (!preview) {\n        return;\n      }\n\n      // Use Array.prototype.find() when it is more widely supported.\n      var emojiData = this.CUSTOM_CATEGORY.emojis.filter(function (customEmoji) {\n        return customEmoji.id === emoji.id;\n      })[0];\n      for (var key in emojiData) {\n        if (emojiData.hasOwnProperty(key)) {\n          emoji[key] = emojiData[key];\n        }\n      }\n\n      preview.setState({ emoji: emoji });\n      clearTimeout(this.leaveTimeout);\n    }\n  }, {\n    key: 'handleEmojiLeave',\n    value: function handleEmojiLeave(emoji) {\n      var preview = this.preview;\n\n      if (!preview) {\n        return;\n      }\n\n      this.leaveTimeout = setTimeout(function () {\n        preview.setState({ emoji: null });\n      }, 16);\n    }\n  }, {\n    key: 'handleEmojiClick',\n    value: function handleEmojiClick(emoji, e) {\n      this.props.onClick(emoji, e);\n      this.handleEmojiSelect(emoji);\n    }\n  }, {\n    key: 'handleEmojiSelect',\n    value: function handleEmojiSelect(emoji) {\n      var _this3 = this;\n\n      this.props.onSelect(emoji);\n      if (!this.hideRecent && !this.props.recent) frequently$1.add(emoji);\n\n      var component = this.categoryRefs['category-1'];\n      if (component) {\n        var maxMargin = component.maxMargin;\n        component.forceUpdate();\n\n        window.requestAnimationFrame(function () {\n          if (!_this3.scroll) return;\n          component.memoizeSize();\n          if (maxMargin == component.maxMargin) return;\n\n          _this3.updateCategoriesSize();\n          _this3.handleScrollPaint();\n\n          if (_this3.SEARCH_CATEGORY.emojis) {\n            component.updateDisplay('none');\n          }\n        });\n      }\n    }\n  }, {\n    key: 'handleScroll',\n    value: function handleScroll() {\n      if (!this.waitingForPaint) {\n        this.waitingForPaint = true;\n        window.requestAnimationFrame(this.handleScrollPaint);\n      }\n    }\n  }, {\n    key: 'handleScrollPaint',\n    value: function handleScrollPaint() {\n      this.waitingForPaint = false;\n\n      if (!this.scroll) {\n        return;\n      }\n\n      var activeCategory = null;\n\n      if (this.SEARCH_CATEGORY.emojis) {\n        activeCategory = this.SEARCH_CATEGORY;\n      } else {\n        var target = this.scroll,\n            scrollTop = target.scrollTop,\n            scrollingDown = scrollTop > (this.scrollTop || 0),\n            minTop = 0;\n\n        for (var i = 0, l = this.categories.length; i < l; i++) {\n          var ii = scrollingDown ? this.categories.length - 1 - i : i,\n              category = this.categories[ii],\n              component = this.categoryRefs['category-' + ii];\n\n          if (component) {\n            var active = component.handleScroll(scrollTop);\n\n            if (!minTop || component.top < minTop) {\n              if (component.top > 0) {\n                minTop = component.top;\n              }\n            }\n\n            if (active && !activeCategory) {\n              activeCategory = category;\n            }\n          }\n        }\n\n        if (scrollTop < minTop) {\n          activeCategory = this.categories.filter(function (category) {\n            return !(category.anchor === false);\n          })[0];\n        } else if (scrollTop + this.clientHeight >= this.scrollHeight) {\n          activeCategory = this.categories[this.categories.length - 1];\n        }\n      }\n\n      if (activeCategory) {\n        var anchors = this.anchors;\n        var _activeCategory = activeCategory;\n        var categoryName = _activeCategory.name;\n\n\n        if (anchors.state.selected != categoryName) {\n          anchors.setState({ selected: categoryName });\n        }\n      }\n\n      this.scrollTop = scrollTop;\n    }\n  }, {\n    key: 'handleSearch',\n    value: function handleSearch(emojis) {\n      this.SEARCH_CATEGORY.emojis = emojis;\n\n      for (var i = 0, l = this.categories.length; i < l; i++) {\n        var component = this.categoryRefs['category-' + i];\n\n        if (component && component.props.name != 'Search') {\n          var display = emojis ? 'none' : 'inherit';\n          component.updateDisplay(display);\n        }\n      }\n\n      this.forceUpdate();\n      if (this.scroll) {\n        this.scroll.scrollTop = 0;\n      }\n      this.handleScroll();\n    }\n  }, {\n    key: 'handleAnchorClick',\n    value: function handleAnchorClick(category, i) {\n      var component = this.categoryRefs['category-' + i];\n      var scroll = this.scroll;\n      var anchors = this.anchors;\n      var scrollToComponent = null;\n\n      scrollToComponent = function scrollToComponent() {\n        if (component) {\n          var top = component.top;\n\n\n          if (category.first) {\n            top = 0;\n          } else {\n            top += 1;\n          }\n\n          scroll.scrollTop = top;\n        }\n      };\n\n      if (this.SEARCH_CATEGORY.emojis) {\n        this.handleSearch(null);\n        this.search.clear();\n\n        window.requestAnimationFrame(scrollToComponent);\n      } else {\n        scrollToComponent();\n      }\n    }\n  }, {\n    key: 'handleSkinChange',\n    value: function handleSkinChange(skin) {\n      var newState = { skin: skin };\n      var onSkinChange = this.props.onSkinChange;\n\n\n      this.setState(newState);\n      store.update(newState);\n\n      onSkinChange(skin);\n    }\n  }, {\n    key: 'handleKeyDown',\n    value: function handleKeyDown(e) {\n      var handled = false;\n\n      switch (e.keyCode) {\n        case 13:\n          var emoji = void 0;\n\n          if (this.SEARCH_CATEGORY.emojis && this.SEARCH_CATEGORY.emojis.length && (emoji = getSanitizedData(this.SEARCH_CATEGORY.emojis[0], this.state.skin, this.props.set, this.props.data))) {\n            this.handleEmojiSelect(emoji);\n          }\n\n          handled = true;\n          break;\n      }\n\n      if (handled) {\n        e.preventDefault();\n      }\n    }\n  }, {\n    key: 'updateCategoriesSize',\n    value: function updateCategoriesSize() {\n      for (var i = 0, l = this.categories.length; i < l; i++) {\n        var component = this.categoryRefs['category-' + i];\n        if (component) component.memoizeSize();\n      }\n\n      if (this.scroll) {\n        var target = this.scroll;\n        this.scrollHeight = target.scrollHeight;\n        this.clientHeight = target.clientHeight;\n      }\n    }\n  }, {\n    key: 'getCategories',\n    value: function getCategories() {\n      return this.state.firstRender ? this.categories.slice(0, 3) : this.categories;\n    }\n  }, {\n    key: 'setAnchorsRef',\n    value: function setAnchorsRef(c) {\n      this.anchors = c;\n    }\n  }, {\n    key: 'setSearchRef',\n    value: function setSearchRef(c) {\n      this.search = c;\n    }\n  }, {\n    key: 'setPreviewRef',\n    value: function setPreviewRef(c) {\n      this.preview = c;\n    }\n  }, {\n    key: 'setScrollRef',\n    value: function setScrollRef(c) {\n      this.scroll = c;\n    }\n  }, {\n    key: 'setCategoryRef',\n    value: function setCategoryRef(name, c) {\n      if (!this.categoryRefs) {\n        this.categoryRefs = {};\n      }\n\n      this.categoryRefs[name] = c;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      var _props = this.props;\n      var perLine = _props.perLine;\n      var emojiSize = _props.emojiSize;\n      var set = _props.set;\n      var sheetSize = _props.sheetSize;\n      var sheetColumns = _props.sheetColumns;\n      var sheetRows = _props.sheetRows;\n      var style = _props.style;\n      var title = _props.title;\n      var emoji = _props.emoji;\n      var color = _props.color;\n      var native = _props.native;\n      var backgroundImageFn = _props.backgroundImageFn;\n      var emojisToShowFilter = _props.emojisToShowFilter;\n      var showPreview = _props.showPreview;\n      var showSkinTones = _props.showSkinTones;\n      var emojiTooltip = _props.emojiTooltip;\n      var include = _props.include;\n      var exclude = _props.exclude;\n      var recent = _props.recent;\n      var autoFocus = _props.autoFocus;\n      var skinEmoji = _props.skinEmoji;\n      var notFound = _props.notFound;\n      var notFoundEmoji = _props.notFoundEmoji;\n      var skin = this.state.skin;\n      var width = perLine * (emojiSize + 12) + 12 + 2 + measureScrollbar();\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'section',\n        {\n          style: _extends({ width: width }, style),\n          className: 'emoji-mart',\n          'aria-label': title,\n          onKeyDown: this.handleKeyDown\n        },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-bar' },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Anchors, {\n            ref: this.setAnchorsRef,\n            data: this.data,\n            i18n: this.i18n,\n            color: color,\n            categories: this.categories,\n            onAnchorClick: this.handleAnchorClick,\n            icons: this.icons\n          })\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Search, {\n          ref: this.setSearchRef,\n          onSearch: this.handleSearch,\n          data: this.data,\n          i18n: this.i18n,\n          emojisToShowFilter: emojisToShowFilter,\n          include: include,\n          exclude: exclude,\n          custom: this.CUSTOM_CATEGORY.emojis,\n          autoFocus: autoFocus\n        }),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          {\n            ref: this.setScrollRef,\n            className: 'emoji-mart-scroll',\n            onScroll: this.handleScroll\n          },\n          this.getCategories().map(function (category, i) {\n            return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Category, {\n              ref: _this4.setCategoryRef.bind(_this4, 'category-' + i),\n              key: category.name,\n              id: category.id,\n              name: category.name,\n              emojis: category.emojis,\n              perLine: perLine,\n              native: native,\n              hasStickyPosition: _this4.hasStickyPosition,\n              data: _this4.data,\n              i18n: _this4.i18n,\n              recent: category.id == _this4.RECENT_CATEGORY.id ? recent : undefined,\n              custom: category.id == _this4.RECENT_CATEGORY.id ? _this4.CUSTOM_CATEGORY.emojis : undefined,\n              emojiProps: {\n                native: native,\n                skin: skin,\n                size: emojiSize,\n                set: set,\n                sheetSize: sheetSize,\n                sheetColumns: sheetColumns,\n                sheetRows: sheetRows,\n                forceSize: native,\n                tooltip: emojiTooltip,\n                backgroundImageFn: backgroundImageFn,\n                onOver: _this4.handleEmojiOver,\n                onLeave: _this4.handleEmojiLeave,\n                onClick: _this4.handleEmojiClick\n              },\n              notFound: notFound,\n              notFoundEmoji: notFoundEmoji\n            });\n          })\n        ),\n        (showPreview || showSkinTones) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          { className: 'emoji-mart-bar' },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Preview, {\n            ref: this.setPreviewRef,\n            data: this.data,\n            title: title,\n            emoji: emoji,\n            showSkinTones: showSkinTones,\n            showPreview: showPreview,\n            emojiProps: {\n              native: native,\n              size: 38,\n              skin: skin,\n              set: set,\n              sheetSize: sheetSize,\n              sheetColumns: sheetColumns,\n              sheetRows: sheetRows,\n              backgroundImageFn: backgroundImageFn\n            },\n            skinsProps: {\n              skin: skin,\n              onChange: this.handleSkinChange,\n              skinEmoji: skinEmoji\n            },\n            i18n: this.i18n\n          })\n        )\n      );\n    }\n  }]);\n\n  return NimblePicker;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nNimblePicker.propTypes /* remove-proptypes */ = _extends({}, PickerPropTypes, {\n  data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired\n});\nNimblePicker.defaultProps = _extends({}, PickerDefaultProps);\n\nvar Picker = function (_React$PureComponent) {\n  inherits(Picker, _React$PureComponent);\n\n  function Picker() {\n    _classCallCheck(this, Picker);\n\n    return possibleConstructorReturn(this, (Picker.__proto__ || _Object$getPrototypeOf(Picker)).apply(this, arguments));\n  }\n\n  _createClass(Picker, [{\n    key: 'render',\n    value: function render() {\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(NimblePicker, _extends({}, this.props, this.state));\n    }\n  }]);\n\n  return Picker;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\nPicker.propTypes /* remove-proptypes */ = PickerPropTypes;\nPicker.defaultProps = _extends({}, PickerDefaultProps, { data: data });\n\nvar Emoji = function Emoji(props) {\n  for (var k in Emoji.defaultProps) {\n    if (props[k] == undefined && Emoji.defaultProps[k] != undefined) {\n      props[k] = Emoji.defaultProps[k];\n    }\n  }\n\n  return NimbleEmoji(_extends({}, props));\n};\n\nEmoji.propTypes /* remove-proptypes */ = EmojiPropTypes;\nEmoji.defaultProps = _extends({}, EmojiDefaultProps, { data: data });\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nvar isObject_1 = isObject;\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\nvar _freeGlobal = freeGlobal;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = _freeGlobal || freeSelf || Function('return this')();\n\nvar _root = root;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return _root.Date.now();\n};\n\nvar now_1 = now;\n\n/** Built-in value references. */\nvar Symbol$1 = _root.Symbol;\n\nvar _Symbol = Symbol$1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$1 = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty$1.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nvar _getRawTag = getRawTag;\n\n/** Used for built-in method references. */\nvar objectProto$1 = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString$1 = objectProto$1.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString$1.call(value);\n}\n\nvar _objectToString = objectToString;\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag$1 && symToStringTag$1 in Object(value))\n    ? _getRawTag(value)\n    : _objectToString(value);\n}\n\nvar _baseGetTag = baseGetTag;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nvar isObjectLike_1 = isObjectLike;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike_1(value) && _baseGetTag(value) == symbolTag);\n}\n\nvar isSymbol_1 = isSymbol;\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol_1(value)) {\n    return NAN;\n  }\n  if (isObject_1(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject_1(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nvar toNumber_1 = toNumber;\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber_1(wait) || 0;\n  if (isObject_1(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber_1(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now_1();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now_1());\n  }\n\n  function debounced() {\n    var time = now_1(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nvar debounce_1 = debounce;\n\nvar css$1 = \".react-input-emoji--container {\\n  color: #4b4b4b;\\n  text-rendering: optimizeLegibility;\\n  background-color: #fff;\\n  border: 1px solid #fff;\\n  border-radius: 21px;\\n  margin: 5px 10px;\\n  box-sizing: border-box;\\n  flex: 1 1 auto;\\n  font-size: 15px;\\n  font-family: sans-serif;\\n  font-weight: 400;\\n  line-height: 20px;\\n  min-height: 20px;\\n  min-width: 0;\\n  outline: none;\\n  width: inherit;\\n  will-change: width;\\n  vertical-align: baseline;\\n  border: 1px solid #eaeaea;\\n  margin-right: 0;\\n}\\n\\n.react-input-emoji--wrapper {\\n  display: flex;\\n  overflow: hidden;\\n  flex: 1;\\n  position: relative;\\n  padding-right: 0;\\n  vertical-align: baseline;\\n  outline: none;\\n  margin: 0;\\n  padding: 0;\\n  border: 0;\\n}\\n\\n.react-input-emoji--input {\\n  font-weight: 400;\\n  max-height: 100px;\\n  min-height: 20px;\\n  outline: none;\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n  position: relative;\\n  white-space: pre-wrap;\\n  word-wrap: break-word;\\n  z-index: 1;\\n  width: 100%;\\n  user-select: text;\\n  padding: 9px 12px 11px;\\n  text-align: left;\\n}\\n\\n.react-input-emoji--input img {\\n  vertical-align: middle;\\n  width: 18px !important;\\n  height: 18px !important;\\n  display: inline !important;\\n  margin-left: 1px;\\n  margin-right: 1px;\\n}\\n\\n.react-input-emoji--overlay {\\n  position: fixed;\\n  width: 100%;\\n  height: 100%;\\n  top: 0;\\n  left: 0;\\n  z-index: 9;\\n}\\n\\n.react-input-emoji--placeholder {\\n  color: #a0a0a0;\\n  pointer-events: none;\\n  position: absolute;\\n  transition: opacity 0.08s linear;\\n  user-select: none;\\n  z-index: 2;\\n  left: 12px;\\n  top: 0;\\n  bottom: 0;\\n  display: flex;\\n  align-items: center;\\n  width: calc(100% - 22px);\\n}\\n\\n.react-input-emoji--button {\\n  position: relative;\\n  display: block;\\n  text-align: center;\\n  padding: 0 10px;\\n  overflow: hidden;\\n  transition: color 0.1s ease-out;\\n  margin: 0;\\n  box-shadow: none;\\n  background: none;\\n  border: none;\\n  outline: none;\\n  cursor: pointer;\\n  flex-shrink: 0;\\n  margin-bottom: 12px;\\n}\\n\\n.react-input-emoji--button svg {\\n  fill: #858585;\\n}\\n\\n.react-input-emoji--button__show svg {\\n  fill: #128b7e;\\n}\\n\\n.react-emoji {\\n  display: flex;\\n  align-items: flex-end;\\n  position: relative;\\n  width: 100%;\\n}\\n\\n.react-emoji-picker--container {\\n  position: absolute;\\n  top: 0;\\n  width: 100%;\\n}\\n\\n.react-emoji-picker--wrapper.react-emoji-picker--wrapper__show {\\n  height: 357px;\\n}\\n\\n.react-emoji-picker--wrapper {\\n  position: absolute;\\n  bottom: 0;\\n  right: 0;\\n  height: 0;\\n  width: 338px;\\n  overflow: hidden;\\n  z-index: 10;\\n}\\n\\n.react-emoji-picker {\\n  position: absolute;\\n  top: 357px;\\n  left: 0;\\n  transition: top 0.1s ease-in-out;\\n}\\n\\n.react-emoji-picker__show {\\n  top: 0;\\n}\\n\";\nstyleInject(css$1);\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar inherits$1 = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn$1 = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar slicedToArray = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\n// vendors\n\nvar InputEmoji = function (_Component) {\n  inherits$1(InputEmoji, _Component);\n\n  function InputEmoji(props) {\n    classCallCheck(this, InputEmoji);\n\n    var _this = possibleConstructorReturn$1(this, (InputEmoji.__proto__ || Object.getPrototypeOf(InputEmoji)).call(this, props));\n\n    _this.state = {\n      html: '',\n      showPicker: false,\n      allEmojiStyle: {},\n      currentSize: null\n    };\n\n    _this.setCurrentSize = function () {\n      if (!_this.textInput.current) {\n        return;\n      }\n\n      _this.setState({\n        currentSize: {\n          width: _this.textInput.current.offsetWidth,\n          height: _this.textInput.current.offsetHeight\n        }\n      });\n    };\n\n    _this.checkAndEmitResize = function () {\n      var onResize = _this.props.onResize;\n      var currentSize = _this.state.currentSize;\n\n\n      var nextSize = {\n        width: _this.textInput.current.offsetWidth,\n        height: _this.textInput.current.offsetHeight\n      };\n\n      if (!_this.state.currentSize || currentSize.width !== nextSize.width || currentSize.height !== nextSize.height) {\n        onResize(nextSize);\n        _this.setState({ currentSize: nextSize });\n      }\n    };\n\n    _this.listenKeydown = function () {\n      var _this$props = _this.props,\n          cleanOnEnter = _this$props.cleanOnEnter,\n          onChange = _this$props.onChange,\n          onEnter = _this$props.onEnter;\n\n\n      if (cleanOnEnter) {\n        _this.textInput.current.addEventListener('keydown', function (event) {\n          if (event.keyCode === 13) {\n            event.preventDefault();\n            return false;\n          }\n        });\n        _this.textInput.current.addEventListener('keyup', function (event) {\n          if (event.keyCode === 13) {\n            var cleanedText = _this.replaceAllTextEmojiToString();\n            if (typeof onEnter === 'function') {\n              onEnter(cleanedText);\n            }\n\n            if (typeof onChange === 'function') {\n              onChange(cleanedText);\n            }\n\n            _this.updateHTML('');\n          }\n        });\n      }\n    };\n\n    _this.setValue = function (value) {\n      _this.updateHTML(value);\n      _this.textInput.current.blur();\n    };\n\n    _this.updateHTML = function () {\n      var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.props.value;\n\n      _this.setState({ html: value });\n      _this.textInput.current.innerHTML = _this.replaceAllTextEmojis(value || '');\n    };\n\n    _this.emitOnChange = function () {\n      _this.props.onChange(_this.replaceAllTextEmojiToString());\n    };\n\n    _this.getAllEmojiStyle = function () {\n      var allEmojiButton = document.querySelectorAll('.emoji-mart-category-list > li > button');\n\n      var allEmojiStyle = {};\n\n      allEmojiButton.forEach(function (emojiButton) {\n        var label = emojiButton.getAttribute('aria-label');\n\n        var _label$split = label.split(','),\n            _label$split2 = slicedToArray(_label$split, 1),\n            emoji = _label$split2[0];\n\n        var emojiSpanEl = emojiButton.querySelector('span');\n\n        var style = _this.replaceAll(emojiSpanEl.style.cssText, '\"', \"'\");\n\n        allEmojiStyle[emoji] = style;\n      });\n\n      _this.setState({ allEmojiStyle: allEmojiStyle });\n    };\n\n    _this.toggleShowPicker = function () {\n      _this.setState({ showPicker: !_this.state.showPicker });\n    };\n\n    _this.emitChange = function () {\n      var _this$props2 = _this.props,\n          onChange = _this$props2.onChange,\n          onResize = _this$props2.onResize,\n          maxLength = _this$props2.maxLength;\n\n\n      if (typeof maxLength !== 'undefined' && Number.isInteger(maxLength)) {\n        var totalCharacters = [].concat(toConsumableArray(_this.replaceAllTextEmojiToString())).length;\n\n        if (totalCharacters > maxLength) {\n          _this.textInput.current.innerHTML = '';\n          _this.pasteHtmlAtCaret(_this.state.html);\n          return;\n        }\n      }\n\n      var html = _this.textInput.current.innerHTML;\n\n      _this.setState({ html: html });\n\n      if (typeof onChange === 'function') {\n        _this.onChangeDebounced(html);\n      }\n\n      if (typeof onResize === 'function') {\n        _this.checkAndEmitResize();\n      }\n    };\n\n    _this.replaceAllTextEmojiToString = function () {\n      if (!_this.textInput.current) {\n        return '';\n      }\n\n      var container = document.createElement('div');\n      container.innerHTML = _this.textInput.current.innerHTML;\n\n      var images = container.querySelectorAll('img');\n\n      images.forEach(function (image) {\n        image.outerHTML = image.dataset.emoji;\n      });\n\n      var text = container.innerText;\n\n      // remove all ↵ for safari\n      text = text.replace(/\\n/ig, '');\n\n      return text;\n    };\n\n    _this.pasteHtmlAtCaret = function (html) {\n      var sel = void 0,\n          range = void 0;\n      if (window.getSelection) {\n        // IE9 and non-IE\n        sel = window.getSelection();\n        if (sel.getRangeAt && sel.rangeCount) {\n          range = sel.getRangeAt(0);\n          range.deleteContents();\n\n          // Range.createContextualFragment() would be useful here but is\n          // non-standard and not supported in all browsers (IE9, for one)\n          var el = document.createElement('div');\n          el.innerHTML = html;\n          var frag = document.createDocumentFragment();var node;var lastNode;\n          while (node = el.firstChild) {\n            lastNode = frag.appendChild(node);\n          }\n          range.insertNode(frag);\n\n          // Preserve the selection\n          if (lastNode) {\n            range = range.cloneRange();\n            range.setStartAfter(lastNode);\n            range.collapse(true);\n            sel.removeAllRanges();\n            sel.addRange(range);\n          }\n        }\n      } else if (document.selection && document.selection.type !== 'Control') {\n        // IE < 9\n        document.selection.createRange().pasteHTML(html);\n      }\n    };\n\n    _this.replaceAll = function (str, find, replace) {\n      return str.replace(new RegExp(find, 'g'), replace);\n    };\n\n    _this.getImage = function (emoji) {\n      var shortNames = '' + emoji.short_names;\n\n      shortNames = _this.replaceAll(shortNames, ',', ', ');\n\n      var emojiSpanEl = document.querySelector('[aria-label=\"' + emoji.native + ', ' + shortNames + '\"] > span');\n\n      if (!emojiSpanEl) return '';\n\n      var style = _this.replaceAll(emojiSpanEl.style.cssText, '\"', \"'\");\n\n      return '<img style=\"' + style + '\" data-emoji=\"' + emoji.native + '\" src=\"https://upload.wikimedia.org/wikipedia/commons/c/ce/Transparent.gif\" />';\n    };\n\n    _this.replaceAllTextEmojis = function (text) {\n      var allEmojis = _this.getAllEmojisFromText(text);\n\n      if (allEmojis) {\n        allEmojis = [].concat(toConsumableArray(new Set(allEmojis))); // remove duplicates\n        var allEmojiStyle = _this.state.allEmojiStyle;\n\n        allEmojis.forEach(function (emoji) {\n          var style = allEmojiStyle[emoji];\n\n          if (!style) return;\n\n          text = _this.replaceAll(text, emoji, '<img style=\"' + style + '\" data-emoji=\"' + emoji + '\" src=\"https://upload.wikimedia.org/wikipedia/commons/c/ce/Transparent.gif\" />');\n        });\n      }\n\n      return text;\n    };\n\n    _this.handleSelectEmoji = function (emoji) {\n      var keepOpenend = _this.props.keepOpenend;\n\n\n      _this.textInput.current.focus();\n\n      _this.pasteHtmlAtCaret(_this.getImage(emoji));\n\n      _this.textInput.current.focus();\n\n      _this.emitChange();\n\n      if (!keepOpenend) {\n        _this.toggleShowPicker();\n      }\n    };\n\n    _this.getAllEmojisFromText = function (text) {\n      return text.match(/(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?)*/g);\n    };\n\n    _this.handleContentEditableInputCopyAndPaste = function () {\n      var self = _this;\n      _this.textInput.current.addEventListener('copy', function (e) {\n        var selectedText = window.getSelection();\n\n        var container = document.createElement('div');\n\n        for (var i = 0, len = selectedText.rangeCount; i < len; ++i) {\n          container.appendChild(selectedText.getRangeAt(i).cloneContents());\n        }\n\n        container = replaceEmojiToString(container);\n\n        e.clipboardData.setData('text', container.innerText);\n        e.preventDefault();\n\n        function replaceEmojiToString(container) {\n          var images = container.querySelectorAll('img');\n\n          images.forEach(function (image) {\n            image.outerHTML = image.dataset.emoji;\n          });\n\n          return container;\n        }\n      });\n\n      // Paste fix for contenteditable\n      _this.textInput.current.addEventListener('paste', function (e) {\n        e.preventDefault();\n        var content = void 0;\n        if (window.clipboardData) {\n          content = window.clipboardData.getData('Text');\n          content = self.replaceAllTextEmojis(content);\n          if (window.getSelection) {\n            var selObj = window.getSelection();\n            var selRange = selObj.getRangeAt(0);\n            selRange.deleteContents();\n            selRange.insertNode(document.createTextNode(content));\n          }\n        } else if (e.clipboardData) {\n          content = e.clipboardData.getData('text/plain');\n          content = self.replaceAllTextEmojis(content);\n          document.execCommand('insertHTML', false, content);\n        }\n      });\n    };\n\n    _this.checkIsEmpty = function () {\n      var text = _this.replaceAllTextEmojiToString();\n\n      return text === '';\n    };\n\n    _this.handleClick = function () {\n      var onClick = _this.props.onClick;\n\n\n      if (typeof onClick === 'function') {\n        onClick();\n      }\n    };\n\n    _this.listenFocus = function () {\n      _this.textInput.current.addEventListener('focus', function () {\n        var onFocus = _this.props.onFocus;\n\n\n        if (typeof onFocus === 'function') {\n          onFocus();\n        }\n      });\n    };\n\n    _this.handleKeyDown = function (event) {\n      var onKeyDown = _this.props.onKeyDown;\n\n\n      if (typeof onKeyDown === 'function') {\n        onKeyDown(event);\n      }\n    };\n\n    _this.getExcludePicker = function () {\n      var disableRecent = _this.props.disableRecent;\n\n\n      var exclude = [];\n\n      if (disableRecent) {\n        exclude.push('recent');\n      }\n\n      return exclude;\n    };\n\n    _this.textInput = react__WEBPACK_IMPORTED_MODULE_0___default.a.createRef();\n\n    if (typeof props.onChange === 'function') {\n      _this.onChangeDebounced = debounce_1(_this.emitOnChange, 100);\n    }\n    return _this;\n  }\n\n  createClass(InputEmoji, [{\n    key: 'focus',\n    value: function focus() {\n      this.textInput.current.focus();\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.handleContentEditableInputCopyAndPaste();\n\n      this.getAllEmojiStyle();\n\n      this.updateHTML();\n\n      this.listenKeydown();\n\n      this.listenFocus();\n\n      this.setCurrentSize();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          _props$height = _props.height,\n          height = _props$height === undefined ? 40 : _props$height,\n          _props$placeholder = _props.placeholder,\n          placeholder = _props$placeholder === undefined ? 'Type a message' : _props$placeholder,\n          _props$borderRadius = _props.borderRadius,\n          borderRadius = _props$borderRadius === undefined ? 21 : _props$borderRadius,\n          _props$borderColor = _props.borderColor,\n          borderColor = _props$borderColor === undefined ? '#EAEAEA' : _props$borderColor,\n          _props$fontSize = _props.fontSize,\n          fontSize = _props$fontSize === undefined ? 15 : _props$fontSize,\n          _props$fontFamily = _props.fontFamily,\n          fontFamily = _props$fontFamily === undefined ? 'sans-serif' : _props$fontFamily,\n          inputClass = _props.inputClass,\n          _props$tabIndex = _props.tabIndex,\n          tabIndex = _props$tabIndex === undefined ? 0 : _props$tabIndex;\n      var showPicker = this.state.showPicker;\n\n\n      return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n        'div',\n        { className: 'react-emoji' },\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          {\n            className: 'react-emoji-picker--container',\n            onClick: this.handleContainerClick\n          },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'react-emoji-picker--wrapper' + (showPicker ? ' react-emoji-picker--wrapper__show' : '') },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              {\n                className: 'react-emoji-picker' + (showPicker ? ' react-emoji-picker__show' : '')\n              },\n              react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Picker, {\n                showPreview: false,\n                showSkinTones: false,\n                set: 'apple',\n                onSelect: this.handleSelectEmoji,\n                exclude: this.getExcludePicker()\n              })\n            )\n          )\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'div',\n          {\n            className: 'react-input-emoji--container',\n            style: {\n              borderRadius: borderRadius,\n              borderColor: borderColor,\n              fontSize: fontSize,\n              fontFamily: fontFamily\n            }\n          },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'div',\n            { className: 'react-input-emoji--wrapper', onClick: this.handleClick },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n              'div',\n              {\n                className: 'react-input-emoji--placeholder',\n                style: {\n                  visibility: !this.checkIsEmpty() ? 'hidden' : 'visible'\n                }\n              },\n              placeholder\n            ),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('div', {\n              ref: this.textInput,\n              tabIndex: tabIndex,\n              contentEditable: true,\n              className: 'react-input-emoji--input' + (inputClass ? ' ' + inputClass : ''),\n              onInput: this.emitChange,\n              onBlur: this.emitChange,\n              onKeyDown: this.handleKeyDown,\n              style: {\n                paddingTop: (height - 20) / 2 + 'px',\n                paddingBottom: (height - 20) / 2 + 'px',\n                minHeight: height + 'px'\n              }\n            })\n          )\n        ),\n        react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n          'button',\n          {\n            className: 'react-input-emoji--button' + (showPicker ? ' react-input-emoji--button__show' : ''),\n            onClick: this.toggleShowPicker },\n          react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\n            'svg',\n            { xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 24 24', width: '24', height: '24' },\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('path', { d: 'M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10' }),\n            react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('path', { d: 'M8 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 8 7M16 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 16 7M15.232 15c-.693 1.195-1.87 2-3.349 2-1.477 0-2.655-.805-3.347-2H15m3-2H6a6 6 0 1 0 12 0' })\n          )\n        ),\n        showPicker && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('div', {\n          className: 'react-input-emoji--overlay',\n          onClick: this.toggleShowPicker\n        })\n      );\n    }\n  }, {\n    key: 'value',\n    get: function get() {\n      return this.replaceAllTextEmojiToString();\n    },\n    set: function set(value) {\n      this.setValue(value);\n    }\n  }]);\n  return InputEmoji;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n\nInputEmoji.propTypes = {\n  value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  cleanOnEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  onResize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  onFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  maxLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  keepOpenend: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n  inputClass: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n  disableRecent: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n  tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  // style\n  height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  borderRadius: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  borderColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  fontSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n  fontFamily: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (InputEmoji);\n//# sourceMappingURL=index.es.js.map\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-input-emoji/dist/index.es.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-is/cjs/react-is.development.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/react-is/cjs/react-is.development.js ***!
+  \***********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  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);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      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.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-is/cjs/react-is.development.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-is/index.js":
+/*!****************************************************!*\
+  !*** ./jaas-client/node_modules/react-is/index.js ***!
+  \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"./jaas-client/node_modules/react-is/cjs/react-is.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-is/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js ***!
+  \***************************************************************************/
+/*! exports provided: MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter, BrowserRouter, HashRouter, Link, NavLink */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BrowserRouter\", function() { return BrowserRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HashRouter\", function() { return HashRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Link\", function() { return Link; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NavLink\", function() { return NavLink; });\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-router */ \"./jaas-client/node_modules/react-router/esm/react-router.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MemoryRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"MemoryRouter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Prompt\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Prompt\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Redirect\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Route\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Route\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StaticRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"StaticRouter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Switch\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Switch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"generatePath\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"generatePath\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matchPath\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"matchPath\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useHistory\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useHistory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useLocation\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useLocation\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useParams\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useParams\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useRouteMatch\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useRouteMatch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"withRouter\"]; });\n\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! history */ \"./jaas-client/node_modules/history/esm/history.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tiny-invariant */ \"./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BrowserRouter, _React$Component);\n\n  function BrowserRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createBrowserHistory\"])(_this.props);\n    return _this;\n  }\n\n  var _proto = BrowserRouter.prototype;\n\n  _proto.render = function render() {\n    return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"], {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return BrowserRouter;\n}(react__WEBPACK_IMPORTED_MODULE_2___default.a.Component);\n\nif (true) {\n  BrowserRouter.propTypes = {\n    basename: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n    forceRefresh: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n    keyLength: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n  };\n\n  BrowserRouter.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : undefined;\n  };\n}\n\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\n\nvar HashRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(HashRouter, _React$Component);\n\n  function HashRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createHashHistory\"])(_this.props);\n    return _this;\n  }\n\n  var _proto = HashRouter.prototype;\n\n  _proto.render = function render() {\n    return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"], {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return HashRouter;\n}(react__WEBPACK_IMPORTED_MODULE_2___default.a.Component);\n\nif (true) {\n  HashRouter.propTypes = {\n    basename: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n    getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n    hashType: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n  };\n\n  HashRouter.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(!this.props.history, \"<HashRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : undefined;\n  };\n}\n\nvar resolveToLocation = function resolveToLocation(to, currentLocation) {\n  return typeof to === \"function\" ? to(currentLocation) : to;\n};\nvar normalizeToLocation = function normalizeToLocation(to, currentLocation) {\n  return typeof to === \"string\" ? Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(to, null, null, currentLocation) : to;\n};\n\nvar forwardRefShim = function forwardRefShim(C) {\n  return C;\n};\n\nvar forwardRef = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n  forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nvar LinkAnchor = forwardRef(function (_ref, forwardedRef) {\n  var innerRef = _ref.innerRef,\n      navigate = _ref.navigate,\n      _onClick = _ref.onClick,\n      rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref, [\"innerRef\", \"navigate\", \"onClick\"]);\n\n  var target = rest.target;\n\n  var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, rest, {\n    onClick: function onClick(event) {\n      try {\n        if (_onClick) _onClick(event);\n      } catch (ex) {\n        event.preventDefault();\n        throw ex;\n      }\n\n      if (!event.defaultPrevented && // onClick prevented default\n      event.button === 0 && ( // ignore everything but left clicks\n      !target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n      !isModifiedEvent(event) // ignore clicks with modifier keys\n      ) {\n          event.preventDefault();\n          navigate();\n        }\n    }\n  }); // React 15 compat\n\n\n  if (forwardRefShim !== forwardRef) {\n    props.ref = forwardedRef || innerRef;\n  } else {\n    props.ref = innerRef;\n  }\n  /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n\n\n  return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"a\", props);\n});\n\nif (true) {\n  LinkAnchor.displayName = \"LinkAnchor\";\n}\n/**\n * The public API for rendering a history-aware <a>.\n */\n\n\nvar Link = forwardRef(function (_ref2, forwardedRef) {\n  var _ref2$component = _ref2.component,\n      component = _ref2$component === void 0 ? LinkAnchor : _ref2$component,\n      replace = _ref2.replace,\n      to = _ref2.to,\n      innerRef = _ref2.innerRef,\n      rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref2, [\"component\", \"replace\", \"to\", \"innerRef\"]);\n\n  return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"__RouterContext\"].Consumer, null, function (context) {\n    !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(false, \"You should not use <Link> outside a <Router>\") : undefined : void 0;\n    var history = context.history;\n    var location = normalizeToLocation(resolveToLocation(to, context.location), context.location);\n    var href = location ? history.createHref(location) : \"\";\n\n    var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, rest, {\n      href: href,\n      navigate: function navigate() {\n        var location = resolveToLocation(to, context.location);\n        var method = replace ? history.replace : history.push;\n        method(location);\n      }\n    }); // React 15 compat\n\n\n    if (forwardRefShim !== forwardRef) {\n      props.ref = forwardedRef || innerRef;\n    } else {\n      props.innerRef = innerRef;\n    }\n\n    return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component, props);\n  });\n});\n\nif (true) {\n  var toType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]);\n  var refType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n    current: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any\n  })]);\n  Link.displayName = \"Link\";\n  Link.propTypes = {\n    innerRef: refType,\n    onClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n    replace: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    target: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    to: toType.isRequired\n  };\n}\n\nvar forwardRefShim$1 = function forwardRefShim(C) {\n  return C;\n};\n\nvar forwardRef$1 = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef;\n\nif (typeof forwardRef$1 === \"undefined\") {\n  forwardRef$1 = forwardRefShim$1;\n}\n\nfunction joinClassnames() {\n  for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n    classnames[_key] = arguments[_key];\n  }\n\n  return classnames.filter(function (i) {\n    return i;\n  }).join(\" \");\n}\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\n\n\nvar NavLink = forwardRef$1(function (_ref, forwardedRef) {\n  var _ref$ariaCurrent = _ref[\"aria-current\"],\n      ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n      _ref$activeClassName = _ref.activeClassName,\n      activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n      activeStyle = _ref.activeStyle,\n      classNameProp = _ref.className,\n      exact = _ref.exact,\n      isActiveProp = _ref.isActive,\n      locationProp = _ref.location,\n      sensitive = _ref.sensitive,\n      strict = _ref.strict,\n      styleProp = _ref.style,\n      to = _ref.to,\n      innerRef = _ref.innerRef,\n      rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"sensitive\", \"strict\", \"style\", \"to\", \"innerRef\"]);\n\n  return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"__RouterContext\"].Consumer, null, function (context) {\n    !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(false, \"You should not use <NavLink> outside a <Router>\") : undefined : void 0;\n    var currentLocation = locationProp || context.location;\n    var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation);\n    var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n    var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n    var match = escapedPath ? Object(react_router__WEBPACK_IMPORTED_MODULE_0__[\"matchPath\"])(currentLocation.pathname, {\n      path: escapedPath,\n      exact: exact,\n      sensitive: sensitive,\n      strict: strict\n    }) : null;\n    var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match);\n    var className = isActive ? joinClassnames(classNameProp, activeClassName) : classNameProp;\n    var style = isActive ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, styleProp, {}, activeStyle) : styleProp;\n\n    var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n      \"aria-current\": isActive && ariaCurrent || null,\n      className: className,\n      style: style,\n      to: toLocation\n    }, rest); // React 15 compat\n\n\n    if (forwardRefShim$1 !== forwardRef$1) {\n      props.ref = forwardedRef || innerRef;\n    } else {\n      props.innerRef = innerRef;\n    }\n\n    return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Link, props);\n  });\n});\n\nif (true) {\n  NavLink.displayName = \"NavLink\";\n  var ariaCurrentType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\"]);\n  NavLink.propTypes = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, Link.propTypes, {\n    \"aria-current\": ariaCurrentType,\n    activeClassName: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    activeStyle: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n    className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n    exact: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    isActive: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n    location: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n    sensitive: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    strict: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n    style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object\n  });\n}\n\n\n//# sourceMappingURL=react-router-dom.js.map\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-router/esm/react-router.js":
+/*!*******************************************************************!*\
+  !*** ./jaas-client/node_modules/react-router/esm/react-router.js ***!
+  \*******************************************************************/
+/*! exports provided: MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, __HistoryContext, __RouterContext, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MemoryRouter\", function() { return MemoryRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Prompt\", function() { return Prompt; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return Redirect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Route\", function() { return Route; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return Router; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StaticRouter\", function() { return StaticRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Switch\", function() { return Switch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__HistoryContext\", function() { return historyContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__RouterContext\", function() { return context; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generatePath\", function() { return generatePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"matchPath\", function() { return matchPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useHistory\", function() { return useHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useLocation\", function() { return useLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useParams\", function() { return useParams; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useRouteMatch\", function() { return useRouteMatch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"withRouter\", function() { return withRouter; });\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! history */ \"./jaas-client/node_modules/history/esm/history.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-warning */ \"./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var mini_create_react_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! mini-create-react-context */ \"./jaas-client/node_modules/mini-create-react-context/dist/esm/index.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! tiny-invariant */ \"./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! path-to-regexp */ \"./jaas-client/node_modules/path-to-regexp/index.js\");\n/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(path_to_regexp__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-is */ \"./jaas-client/node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! hoist-non-react-statics */ \"./jaas-client/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext = function createNamedContext(name) {\n  var context = Object(mini_create_react_context__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n  context.displayName = name;\n  return context;\n};\n\nvar historyContext =\n/*#__PURE__*/\ncreateNamedContext(\"Router-History\");\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext$1 = function createNamedContext(name) {\n  var context = Object(mini_create_react_context__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n  context.displayName = name;\n  return context;\n};\n\nvar context =\n/*#__PURE__*/\ncreateNamedContext$1(\"Router\");\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Router, _React$Component);\n\n  Router.computeRootMatch = function computeRootMatch(pathname) {\n    return {\n      path: \"/\",\n      url: \"/\",\n      params: {},\n      isExact: pathname === \"/\"\n    };\n  };\n\n  function Router(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n    _this.state = {\n      location: props.history.location\n    }; // This is a bit of a hack. We have to start listening for location\n    // changes here in the constructor in case there are any <Redirect>s\n    // on the initial render. If there are, they will replace/push when\n    // they mount and since cDM fires in children before parents, we may\n    // get a new location before the <Router> is mounted.\n\n    _this._isMounted = false;\n    _this._pendingLocation = null;\n\n    if (!props.staticContext) {\n      _this.unlisten = props.history.listen(function (location) {\n        if (_this._isMounted) {\n          _this.setState({\n            location: location\n          });\n        } else {\n          _this._pendingLocation = location;\n        }\n      });\n    }\n\n    return _this;\n  }\n\n  var _proto = Router.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n\n    if (this._pendingLocation) {\n      this.setState({\n        location: this._pendingLocation\n      });\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.unlisten) this.unlisten();\n  };\n\n  _proto.render = function render() {\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Provider, {\n      value: {\n        history: this.props.history,\n        location: this.state.location,\n        match: Router.computeRootMatch(this.state.location.pathname),\n        staticContext: this.props.staticContext\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(historyContext.Provider, {\n      children: this.props.children || null,\n      value: this.props.history\n    }));\n  };\n\n  return Router;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  Router.propTypes = {\n    children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n    history: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object.isRequired,\n    staticContext: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n  };\n\n  Router.prototype.componentDidUpdate = function (prevProps) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(prevProps.history === this.props.history, \"You cannot change <Router history>\") : undefined;\n  };\n}\n\n/**\n * The public API for a <Router> that stores location in memory.\n */\n\nvar MemoryRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(MemoryRouter, _React$Component);\n\n  function MemoryRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createMemoryHistory\"])(_this.props);\n    return _this;\n  }\n\n  var _proto = MemoryRouter.prototype;\n\n  _proto.render = function render() {\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return MemoryRouter;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  MemoryRouter.propTypes = {\n    initialEntries: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.array,\n    initialIndex: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number,\n    getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n    keyLength: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number,\n    children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node\n  };\n\n  MemoryRouter.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!this.props.history, \"<MemoryRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\") : undefined;\n  };\n}\n\nvar Lifecycle =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Lifecycle, _React$Component);\n\n  function Lifecycle() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Lifecycle.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    if (this.props.onMount) this.props.onMount.call(this, this);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n  };\n\n  _proto.render = function render() {\n    return null;\n  };\n\n  return Lifecycle;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\n\nfunction Prompt(_ref) {\n  var message = _ref.message,\n      _ref$when = _ref.when,\n      when = _ref$when === void 0 ? true : _ref$when;\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n    !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Prompt> outside a <Router>\") : undefined : void 0;\n    if (!when || context.staticContext) return null;\n    var method = context.history.block;\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Lifecycle, {\n      onMount: function onMount(self) {\n        self.release = method(message);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        if (prevProps.message !== message) {\n          self.release();\n          self.release = method(message);\n        }\n      },\n      onUnmount: function onUnmount(self) {\n        self.release();\n      },\n      message: message\n    });\n  });\n}\n\nif (true) {\n  var messageType = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string]);\n  Prompt.propTypes = {\n    when: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n    message: messageType.isRequired\n  };\n}\n\nvar cache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nfunction compilePath(path) {\n  if (cache[path]) return cache[path];\n  var generator = path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default.a.compile(path);\n\n  if (cacheCount < cacheLimit) {\n    cache[path] = generator;\n    cacheCount++;\n  }\n\n  return generator;\n}\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\n\n\nfunction generatePath(path, params) {\n  if (path === void 0) {\n    path = \"/\";\n  }\n\n  if (params === void 0) {\n    params = {};\n  }\n\n  return path === \"/\" ? path : compilePath(path)(params, {\n    pretty: true\n  });\n}\n\n/**\n * The public API for navigating programmatically with a component.\n */\n\nfunction Redirect(_ref) {\n  var computedMatch = _ref.computedMatch,\n      to = _ref.to,\n      _ref$push = _ref.push,\n      push = _ref$push === void 0 ? false : _ref$push;\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n    !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Redirect> outside a <Router>\") : undefined : void 0;\n    var history = context.history,\n        staticContext = context.staticContext;\n    var method = push ? history.push : history.replace;\n    var location = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(computedMatch ? typeof to === \"string\" ? generatePath(to, computedMatch.params) : Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, to, {\n      pathname: generatePath(to.pathname, computedMatch.params)\n    }) : to); // When rendering in a static context,\n    // set the new location immediately.\n\n    if (staticContext) {\n      method(location);\n      return null;\n    }\n\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Lifecycle, {\n      onMount: function onMount() {\n        method(location);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        var prevLocation = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(prevProps.to);\n\n        if (!Object(history__WEBPACK_IMPORTED_MODULE_3__[\"locationsAreEqual\"])(prevLocation, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n          key: prevLocation.key\n        }))) {\n          method(location);\n        }\n      },\n      to: to\n    });\n  });\n}\n\nif (true) {\n  Redirect.propTypes = {\n    push: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n    from: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string,\n    to: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object]).isRequired\n  };\n}\n\nvar cache$1 = {};\nvar cacheLimit$1 = 10000;\nvar cacheCount$1 = 0;\n\nfunction compilePath$1(path, options) {\n  var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n  var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});\n  if (pathCache[path]) return pathCache[path];\n  var keys = [];\n  var regexp = path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default()(path, keys, options);\n  var result = {\n    regexp: regexp,\n    keys: keys\n  };\n\n  if (cacheCount$1 < cacheLimit$1) {\n    pathCache[path] = result;\n    cacheCount$1++;\n  }\n\n  return result;\n}\n/**\n * Public API for matching a URL pathname to a path.\n */\n\n\nfunction matchPath(pathname, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  if (typeof options === \"string\" || Array.isArray(options)) {\n    options = {\n      path: options\n    };\n  }\n\n  var _options = options,\n      path = _options.path,\n      _options$exact = _options.exact,\n      exact = _options$exact === void 0 ? false : _options$exact,\n      _options$strict = _options.strict,\n      strict = _options$strict === void 0 ? false : _options$strict,\n      _options$sensitive = _options.sensitive,\n      sensitive = _options$sensitive === void 0 ? false : _options$sensitive;\n  var paths = [].concat(path);\n  return paths.reduce(function (matched, path) {\n    if (!path && path !== \"\") return null;\n    if (matched) return matched;\n\n    var _compilePath = compilePath$1(path, {\n      end: exact,\n      strict: strict,\n      sensitive: sensitive\n    }),\n        regexp = _compilePath.regexp,\n        keys = _compilePath.keys;\n\n    var match = regexp.exec(pathname);\n    if (!match) return null;\n    var url = match[0],\n        values = match.slice(1);\n    var isExact = pathname === url;\n    if (exact && !isExact) return null;\n    return {\n      path: path,\n      // the path used to match\n      url: path === \"/\" && url === \"\" ? \"/\" : url,\n      // the matched portion of the URL\n      isExact: isExact,\n      // whether or not we matched exactly\n      params: keys.reduce(function (memo, key, index) {\n        memo[key.name] = values[index];\n        return memo;\n      }, {})\n    };\n  }, null);\n}\n\nfunction isEmptyChildren(children) {\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n  var value = children(props);\n   true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value !== undefined, \"You returned `undefined` from the `children` function of \" + (\"<Route\" + (path ? \" path=\\\"\" + path + \"\\\"\" : \"\") + \">, but you \") + \"should have returned a React element or `null`\") : undefined;\n  return value || null;\n}\n/**\n * The public API for matching a single path and rendering.\n */\n\n\nvar Route =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Route, _React$Component);\n\n  function Route() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Route.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context$1) {\n      !context$1 ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Route> outside a <Router>\") : undefined : void 0;\n      var location = _this.props.location || context$1.location;\n      var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us\n      : _this.props.path ? matchPath(location.pathname, _this.props) : context$1.match;\n\n      var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, context$1, {\n        location: location,\n        match: match\n      });\n\n      var _this$props = _this.props,\n          children = _this$props.children,\n          component = _this$props.component,\n          render = _this$props.render; // Preact uses an empty array as children by\n      // default, so use null if that's the case.\n\n      if (Array.isArray(children) && children.length === 0) {\n        children = null;\n      }\n\n      return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Provider, {\n        value: props\n      }, props.match ? children ? typeof children === \"function\" ?  true ? evalChildrenDev(children, props, _this.props.path) : undefined : children : component ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component, props) : render ? render(props) : null : typeof children === \"function\" ?  true ? evalChildrenDev(children, props, _this.props.path) : undefined : null);\n    });\n  };\n\n  return Route;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  Route.propTypes = {\n    children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node]),\n    component: function component(props, propName) {\n      if (props[propName] && !Object(react_is__WEBPACK_IMPORTED_MODULE_9__[\"isValidElementType\"])(props[propName])) {\n        return new Error(\"Invalid prop 'component' supplied to 'Route': the prop is not a valid React component\");\n      }\n    },\n    exact: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n    location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object,\n    path: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string)]),\n    render: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n    sensitive: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n    strict: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool\n  };\n\n  Route.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.component), \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\") : undefined;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.render), \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\") : undefined;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.component && this.props.render), \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\") : undefined;\n  };\n\n  Route.prototype.componentDidUpdate = function (prevProps) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.location && !prevProps.location), '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : undefined;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(!this.props.location && prevProps.location), '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : undefined;\n  };\n}\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n  if (!basename) return location;\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n    pathname: addLeadingSlash(basename) + location.pathname\n  });\n}\n\nfunction stripBasename(basename, location) {\n  if (!basename) return location;\n  var base = addLeadingSlash(basename);\n  if (location.pathname.indexOf(base) !== 0) return location;\n  return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n    pathname: location.pathname.substr(base.length)\n  });\n}\n\nfunction createURL(location) {\n  return typeof location === \"string\" ? location : Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createPath\"])(location);\n}\n\nfunction staticHandler(methodName) {\n  return function () {\n      true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You cannot %s with <StaticRouter>\", methodName) : undefined ;\n  };\n}\n\nfunction noop() {}\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\n\nvar StaticRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(StaticRouter, _React$Component);\n\n  function StaticRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n    _this.handlePush = function (location) {\n      return _this.navigateTo(location, \"PUSH\");\n    };\n\n    _this.handleReplace = function (location) {\n      return _this.navigateTo(location, \"REPLACE\");\n    };\n\n    _this.handleListen = function () {\n      return noop;\n    };\n\n    _this.handleBlock = function () {\n      return noop;\n    };\n\n    return _this;\n  }\n\n  var _proto = StaticRouter.prototype;\n\n  _proto.navigateTo = function navigateTo(location, action) {\n    var _this$props = this.props,\n        _this$props$basename = _this$props.basename,\n        basename = _this$props$basename === void 0 ? \"\" : _this$props$basename,\n        _this$props$context = _this$props.context,\n        context = _this$props$context === void 0 ? {} : _this$props$context;\n    context.action = action;\n    context.location = addBasename(basename, Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(location));\n    context.url = createURL(context.location);\n  };\n\n  _proto.render = function render() {\n    var _this$props2 = this.props,\n        _this$props2$basename = _this$props2.basename,\n        basename = _this$props2$basename === void 0 ? \"\" : _this$props2$basename,\n        _this$props2$context = _this$props2.context,\n        context = _this$props2$context === void 0 ? {} : _this$props2$context,\n        _this$props2$location = _this$props2.location,\n        location = _this$props2$location === void 0 ? \"/\" : _this$props2$location,\n        rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(_this$props2, [\"basename\", \"context\", \"location\"]);\n\n    var history = {\n      createHref: function createHref(path) {\n        return addLeadingSlash(basename + createURL(path));\n      },\n      action: \"POP\",\n      location: stripBasename(basename, Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(location)),\n      push: this.handlePush,\n      replace: this.handleReplace,\n      go: staticHandler(\"go\"),\n      goBack: staticHandler(\"goBack\"),\n      goForward: staticHandler(\"goForward\"),\n      listen: this.handleListen,\n      block: this.handleBlock\n    };\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Router, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, rest, {\n      history: history,\n      staticContext: context\n    }));\n  };\n\n  return StaticRouter;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  StaticRouter.propTypes = {\n    basename: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string,\n    context: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object,\n    location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object])\n  };\n\n  StaticRouter.prototype.componentDidMount = function () {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!this.props.history, \"<StaticRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { StaticRouter as Router }`.\") : undefined;\n  };\n}\n\n/**\n * The public API for rendering the first <Route> that matches.\n */\n\nvar Switch =\n/*#__PURE__*/\nfunction (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Switch, _React$Component);\n\n  function Switch() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Switch.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n      !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Switch> outside a <Router>\") : undefined : void 0;\n      var location = _this.props.location || context.location;\n      var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()\n      // here because toArray adds keys to all child elements and we do not want\n      // to trigger an unmount/remount for two <Route>s that render the same\n      // component at different URLs.\n\n      react__WEBPACK_IMPORTED_MODULE_1___default.a.Children.forEach(_this.props.children, function (child) {\n        if (match == null && react__WEBPACK_IMPORTED_MODULE_1___default.a.isValidElement(child)) {\n          element = child;\n          var path = child.props.path || child.props.from;\n          match = path ? matchPath(location.pathname, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, child.props, {\n            path: path\n          })) : context.match;\n        }\n      });\n      return match ? react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(element, {\n        location: location,\n        computedMatch: match\n      }) : null;\n    });\n  };\n\n  return Switch;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (true) {\n  Switch.propTypes = {\n    children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n    location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n  };\n\n  Switch.prototype.componentDidUpdate = function (prevProps) {\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.location && !prevProps.location), '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : undefined;\n     true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(!this.props.location && prevProps.location), '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : undefined;\n  };\n}\n\n/**\n * A public higher-order component to access the imperative API\n */\n\nfunction withRouter(Component) {\n  var displayName = \"withRouter(\" + (Component.displayName || Component.name) + \")\";\n\n  var C = function C(props) {\n    var wrappedComponentRef = props.wrappedComponentRef,\n        remainingProps = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(props, [\"wrappedComponentRef\"]);\n\n    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n      !context ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <\" + displayName + \" /> outside a <Router>\") : undefined : void 0;\n      return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, remainingProps, context, {\n        ref: wrappedComponentRef\n      }));\n    });\n  };\n\n  C.displayName = displayName;\n  C.WrappedComponent = Component;\n\n  if (true) {\n    C.propTypes = {\n      wrappedComponentRef: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object])\n    };\n  }\n\n  return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11___default()(C, Component);\n}\n\nvar useContext = react__WEBPACK_IMPORTED_MODULE_1___default.a.useContext;\nfunction useHistory() {\n  if (true) {\n    !(typeof useContext === \"function\") ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useHistory()\") : undefined : void 0;\n  }\n\n  return useContext(historyContext);\n}\nfunction useLocation() {\n  if (true) {\n    !(typeof useContext === \"function\") ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useLocation()\") : undefined : void 0;\n  }\n\n  return useContext(context).location;\n}\nfunction useParams() {\n  if (true) {\n    !(typeof useContext === \"function\") ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useParams()\") : undefined : void 0;\n  }\n\n  var match = useContext(context).match;\n  return match ? match.params : {};\n}\nfunction useRouteMatch(path) {\n  if (true) {\n    !(typeof useContext === \"function\") ?  true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useRouteMatch()\") : undefined : void 0;\n  }\n\n  var location = useLocation();\n  var match = useContext(context).match;\n  return path ? matchPath(location.pathname, path) : match;\n}\n\nif (true) {\n  if (typeof window !== \"undefined\") {\n    var global = window;\n    var key = \"__react_router_build__\";\n    var buildNames = {\n      cjs: \"CommonJS\",\n      esm: \"ES modules\",\n      umd: \"UMD\"\n    };\n\n    if (global[key] && global[key] !== \"esm\") {\n      var initialBuildName = buildNames[global[key]];\n      var secondaryBuildName = buildNames[\"esm\"]; // TODO: Add link to article that explains in detail how to avoid\n      // loading 2 different builds.\n\n      throw new Error(\"You are loading the \" + secondaryBuildName + \" build of React Router \" + (\"on a page that is already running the \" + initialBuildName + \" \") + \"build, so things won't work right.\");\n    }\n\n    global[key] = \"esm\";\n  }\n}\n\n\n//# sourceMappingURL=react-router.js.map\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-router/esm/react-router.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-sound/lib/index.js":
+/*!***********************************************************!*\
+  !*** ./jaas-client/node_modules/react-sound/lib/index.js ***!
+  \***********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar pendingCalls = [];\nvar initialized = false;\n\nvar soundManager = void 0;\n// Allow server side rendering\nif (typeof window !== 'undefined') {\n  if (true) {\n    var _require = __webpack_require__(/*! soundmanager2 */ \"./jaas-client/node_modules/soundmanager2/script/soundmanager2.js\");\n\n    soundManager = _require.soundManager;\n  } else { var _require2; }\n\n  soundManager.onready(function () {\n    pendingCalls.slice().forEach(function (cb) {\n      return cb();\n    });\n  });\n}\n\nfunction _createSound(options, cb) {\n  if (soundManager.ok()) {\n    cb(soundManager.createSound(options));\n    return function () {};\n  } else {\n    if (!initialized) {\n      initialized = true;\n      soundManager.beginDelayedInit();\n    }\n\n    var call = function call() {\n      cb(soundManager.createSound(options));\n    };\n\n    pendingCalls.push(call);\n\n    return function () {\n      pendingCalls.splice(pendingCalls.indexOf(call), 1);\n    };\n  }\n}\n\nfunction noop() {}\n\nvar playStatuses = {\n  PLAYING: 'PLAYING',\n  STOPPED: 'STOPPED',\n  PAUSED: 'PAUSED'\n};\n\nvar Sound = function (_React$Component) {\n  _inherits(Sound, _React$Component);\n\n  function Sound() {\n    _classCallCheck(this, Sound);\n\n    return _possibleConstructorReturn(this, (Sound.__proto__ || Object.getPrototypeOf(Sound)).apply(this, arguments));\n  }\n\n  _createClass(Sound, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      this.createSound(function (sound) {\n        return _this2.updateSound(sound);\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.removeSound();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps) {\n      var _this3 = this;\n\n      if (this.props.url !== prevProps.url) {\n        this.createSound(function (sound) {\n          return _this3.updateSound(sound, prevProps);\n        });\n      } else {\n        this.updateSound(this.sound);\n      }\n    }\n  }, {\n    key: 'updateSound',\n    value: function updateSound(sound) {\n      var prevProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (!sound) {\n        return;\n      }\n\n      if (this.props.playStatus === playStatuses.PLAYING) {\n        if (sound.playState === 0) {\n          sound.play();\n        }\n\n        if (sound.paused) {\n          sound.resume();\n        }\n      } else if (this.props.playStatus === playStatuses.STOPPED) {\n        if (sound.playState !== 0) {\n          sound.stop();\n        }\n      } else {\n        // this.props.playStatus === playStatuses.PAUSED\n        if (!sound.paused) {\n          sound.pause();\n        }\n      }\n\n      if (this.props.playFromPosition != null) {\n        if (this.props.playFromPosition !== prevProps.playFromPosition) {\n          sound.setPosition(this.props.playFromPosition);\n        }\n      }\n\n      if (this.props.position != null) {\n        if (sound.position !== this.props.position && Math.round(sound.position) !== Math.round(this.props.position)) {\n\n          sound.setPosition(this.props.position);\n        }\n      }\n\n      if (this.props.volume !== prevProps.volume) {\n        sound.setVolume(this.props.volume);\n      }\n\n      if (this.props.playbackRate !== prevProps.playbackRate) {\n        sound.setPlaybackRate(this.props.playbackRate);\n      }\n    }\n  }, {\n    key: 'createSound',\n    value: function createSound(callback) {\n      var _this4 = this;\n\n      this.removeSound();\n\n      var instance = this;\n\n      if (!this.props.url) {\n        return;\n      }\n\n      this.stopCreatingSound = _createSound({\n        url: this.props.url,\n        autoLoad: this.props.autoLoad,\n        volume: this.props.volume,\n        position: this.props.playFromPosition || this.props.position || 0,\n        playbackRate: this.props.playbackRate,\n        whileloading: function whileloading() {\n          instance.props.onLoading(this);\n        },\n        whileplaying: function whileplaying() {\n          instance.props.onPlaying(this);\n        },\n        onerror: function onerror(errorCode, description) {\n          instance.props.onError(errorCode, description, this);\n        },\n        onload: function onload() {\n          instance.props.onLoad(this);\n        },\n        onpause: function onpause() {\n          instance.props.onPause(this);\n        },\n        onresume: function onresume() {\n          instance.props.onResume(this);\n        },\n        onstop: function onstop() {\n          instance.props.onStop(this);\n        },\n        onfinish: function onfinish() {\n          if (instance.props.loop && instance.props.playStatus === playStatuses.PLAYING) {\n            instance.sound.play();\n          } else {\n            instance.props.onFinishedPlaying();\n          }\n        },\n        onbufferchange: function onbufferchange() {\n          instance.props.onBufferChange(this.isBuffering);\n        }\n      }, function (sound) {\n        _this4.sound = sound;\n        callback(sound);\n      });\n    }\n  }, {\n    key: 'removeSound',\n    value: function removeSound() {\n      if (this.stopCreatingSound) {\n        this.stopCreatingSound();\n        delete this.stopCreatingSound;\n      }\n\n      if (this.sound) {\n        try {\n          this.sound.destruct();\n        } catch (e) {} // eslint-disable-line\n\n        delete this.sound;\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return null;\n    }\n  }]);\n\n  return Sound;\n}(_react2.default.Component);\n\nSound.status = playStatuses;\nSound.propTypes = {\n  url: _propTypes2.default.string.isRequired,\n  playStatus: _propTypes2.default.oneOf(Object.keys(playStatuses)).isRequired,\n  position: _propTypes2.default.number,\n  playFromPosition: _propTypes2.default.number,\n  volume: _propTypes2.default.number,\n  playbackRate: _propTypes2.default.number,\n  onError: _propTypes2.default.func,\n  onLoading: _propTypes2.default.func,\n  onLoad: _propTypes2.default.func,\n  onPlaying: _propTypes2.default.func,\n  onPause: _propTypes2.default.func,\n  onResume: _propTypes2.default.func,\n  onStop: _propTypes2.default.func,\n  onFinishedPlaying: _propTypes2.default.func,\n  onBufferChange: _propTypes2.default.func,\n  autoLoad: _propTypes2.default.bool,\n  loop: _propTypes2.default.bool\n};\nSound.defaultProps = {\n  volume: 100,\n  playbackRate: 1,\n  onError: noop,\n  onLoading: noop,\n  onPlaying: noop,\n  onLoad: noop,\n  onPause: noop,\n  onResume: noop,\n  onStop: noop,\n  onFinishedPlaying: noop,\n  onBufferChange: noop,\n  autoLoad: false,\n  loop: false\n};\nexports.default = Sound;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-sound/lib/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/CSSTransition.js":
+/*!******************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/CSSTransition.js ***!
+  \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var dom_helpers_addClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dom-helpers/addClass */ \"./jaas-client/node_modules/dom-helpers/esm/addClass.js\");\n/* harmony import */ var dom_helpers_removeClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dom-helpers/removeClass */ \"./jaas-client/node_modules/dom-helpers/esm/removeClass.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Transition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Transition */ \"./jaas-client/node_modules/react-transition-group/esm/Transition.js\");\n/* harmony import */ var _utils_PropTypes__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/PropTypes */ \"./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js\");\n\n\n\n\n\n\n\n\n\n\nvar _addClass = function addClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return Object(dom_helpers_addClass__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(node, c);\n  });\n};\n\nvar removeClass = function removeClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return Object(dom_helpers_removeClass__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(node, c);\n  });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n *         <div>\n *           {\"I'll receive my-node-* classes\"}\n *         </div>\n *       </CSSTransition>\n *       <button type=\"button\" onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n *   opacity: 0;\n * }\n * .my-node-enter-active {\n *   opacity: 1;\n *   transition: opacity 200ms;\n * }\n * .my-node-exit {\n *   opacity: 1;\n * }\n * .my-node-exit-active {\n *   opacity: 0;\n *   transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(CSSTransition, _React$Component);\n\n  function CSSTransition() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.appliedClasses = {\n      appear: {},\n      enter: {},\n      exit: {}\n    };\n\n    _this.onEnter = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument[0],\n          appearing = _this$resolveArgument[1];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n      if (_this.props.onEnter) {\n        _this.props.onEnter(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntering = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument2[0],\n          appearing = _this$resolveArgument2[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.addClass(node, type, 'active');\n\n      if (_this.props.onEntering) {\n        _this.props.onEntering(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntered = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument3[0],\n          appearing = _this$resolveArgument3[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.removeClasses(node, type);\n\n      _this.addClass(node, type, 'done');\n\n      if (_this.props.onEntered) {\n        _this.props.onEntered(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onExit = function (maybeNode) {\n      var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument4[0];\n\n      _this.removeClasses(node, 'appear');\n\n      _this.removeClasses(node, 'enter');\n\n      _this.addClass(node, 'exit', 'base');\n\n      if (_this.props.onExit) {\n        _this.props.onExit(maybeNode);\n      }\n    };\n\n    _this.onExiting = function (maybeNode) {\n      var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument5[0];\n\n      _this.addClass(node, 'exit', 'active');\n\n      if (_this.props.onExiting) {\n        _this.props.onExiting(maybeNode);\n      }\n    };\n\n    _this.onExited = function (maybeNode) {\n      var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument6[0];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, 'exit', 'done');\n\n      if (_this.props.onExited) {\n        _this.props.onExited(maybeNode);\n      }\n    };\n\n    _this.resolveArguments = function (maybeNode, maybeAppearing) {\n      return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n      : [maybeNode, maybeAppearing];\n    };\n\n    _this.getClassNames = function (type) {\n      var classNames = _this.props.classNames;\n      var isStringClassNames = typeof classNames === 'string';\n      var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n      var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n      var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n      var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n      return {\n        baseClassName: baseClassName,\n        activeClassName: activeClassName,\n        doneClassName: doneClassName\n      };\n    };\n\n    return _this;\n  }\n\n  var _proto = CSSTransition.prototype;\n\n  _proto.addClass = function addClass(node, type, phase) {\n    var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n    var _this$getClassNames = this.getClassNames('enter'),\n        doneClassName = _this$getClassNames.doneClassName;\n\n    if (type === 'appear' && phase === 'done' && doneClassName) {\n      className += \" \" + doneClassName;\n    } // This is for to force a repaint,\n    // which is necessary in order to transition styles when adding a class name.\n\n\n    if (phase === 'active') {\n      /* eslint-disable no-unused-expressions */\n      node && node.scrollTop;\n    }\n\n    if (className) {\n      this.appliedClasses[type][phase] = className;\n\n      _addClass(node, className);\n    }\n  };\n\n  _proto.removeClasses = function removeClasses(node, type) {\n    var _this$appliedClasses$ = this.appliedClasses[type],\n        baseClassName = _this$appliedClasses$.base,\n        activeClassName = _this$appliedClasses$.active,\n        doneClassName = _this$appliedClasses$.done;\n    this.appliedClasses[type] = {};\n\n    if (baseClassName) {\n      removeClass(node, baseClassName);\n    }\n\n    if (activeClassName) {\n      removeClass(node, activeClassName);\n    }\n\n    if (doneClassName) {\n      removeClass(node, doneClassName);\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        _ = _this$props.classNames,\n        props = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_this$props, [\"classNames\"]);\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(_Transition__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, props, {\n      onEnter: this.onEnter,\n      onEntered: this.onEntered,\n      onEntering: this.onEntering,\n      onExit: this.onExit,\n      onExiting: this.onExiting,\n      onExited: this.onExited\n    }));\n  };\n\n  return CSSTransition;\n}(react__WEBPACK_IMPORTED_MODULE_6___default.a.Component);\n\nCSSTransition.defaultProps = {\n  classNames: ''\n};\nCSSTransition.propTypes =  true ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, _Transition__WEBPACK_IMPORTED_MODULE_7__[\"default\"].propTypes, {\n  /**\n   * The animation classNames applied to the component as it appears, enters,\n   * exits or has finished the transition. A single name can be provided, which\n   * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n   *\n   * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n   * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n   * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n   *\n   * A few details to note about how these classes are applied:\n   *\n   * 1. They are _joined_ with the ones that are already defined on the child\n   *    component, so if you want to add some base styles, you can use\n   *    `className` without worrying that it will be overridden.\n   *\n   * 2. If the transition component mounts with `in={false}`, no classes are\n   *    applied yet. You might be expecting `*-exit-done`, but if you think\n   *    about it, a component cannot finish exiting if it hasn't entered yet.\n   *\n   * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n   *    allows you to define different behavior for when appearing is done and\n   *    when regular entering is done, using selectors like\n   *    `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n   *    an epic entrance animation when element first appears in the DOM using\n   *    [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n   *    simply use `fade-enter-done` for defining both cases.\n   *\n   * Each individual classNames can also be specified independently like:\n   *\n   * ```js\n   * classNames={{\n   *  appear: 'my-appear',\n   *  appearActive: 'my-active-appear',\n   *  appearDone: 'my-done-appear',\n   *  enter: 'my-enter',\n   *  enterActive: 'my-active-enter',\n   *  enterDone: 'my-done-enter',\n   *  exit: 'my-exit',\n   *  exitActive: 'my-active-exit',\n   *  exitDone: 'my-done-exit',\n   * }}\n   * ```\n   *\n   * If you want to set these classes using CSS Modules:\n   *\n   * ```js\n   * import styles from './styles.css';\n   * ```\n   *\n   * you might want to use camelCase in your CSS file, that way could simply\n   * spread them instead of listing them one by one:\n   *\n   * ```js\n   * classNames={{ ...styles }}\n   * ```\n   *\n   * @type {string | {\n   *  appear?: string,\n   *  appearActive?: string,\n   *  appearDone?: string,\n   *  enter?: string,\n   *  enterActive?: string,\n   *  enterDone?: string,\n   *  exit?: string,\n   *  exitActive?: string,\n   *  exitDone?: string,\n   * }}\n   */\n  classNames: _utils_PropTypes__WEBPACK_IMPORTED_MODULE_8__[\"classNamesShape\"],\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter-active' or\n   * 'appear-active' class is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or\n   * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' classes\n   * are **removed** and the `exit-done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func\n}) : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (CSSTransition);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/CSSTransition.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/ReplaceTransition.js":
+/*!**********************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/ReplaceTransition.js ***!
+  \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _TransitionGroup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TransitionGroup */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js\");\n\n\n\n\n\n\n/**\n * The `<ReplaceTransition>` component is a specialized `Transition` component\n * that animates between two children.\n *\n * ```jsx\n * <ReplaceTransition in>\n *   <Fade><div>I appear first</div></Fade>\n *   <Fade><div>I replace the above</div></Fade>\n * </ReplaceTransition>\n * ```\n */\n\nvar ReplaceTransition = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(ReplaceTransition, _React$Component);\n\n  function ReplaceTransition() {\n    var _this;\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n\n    _this.handleEnter = function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return _this.handleLifecycle('onEnter', 0, args);\n    };\n\n    _this.handleEntering = function () {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return _this.handleLifecycle('onEntering', 0, args);\n    };\n\n    _this.handleEntered = function () {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return _this.handleLifecycle('onEntered', 0, args);\n    };\n\n    _this.handleExit = function () {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      return _this.handleLifecycle('onExit', 1, args);\n    };\n\n    _this.handleExiting = function () {\n      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        args[_key6] = arguments[_key6];\n      }\n\n      return _this.handleLifecycle('onExiting', 1, args);\n    };\n\n    _this.handleExited = function () {\n      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        args[_key7] = arguments[_key7];\n      }\n\n      return _this.handleLifecycle('onExited', 1, args);\n    };\n\n    return _this;\n  }\n\n  var _proto = ReplaceTransition.prototype;\n\n  _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {\n    var _child$props;\n\n    var children = this.props.children;\n    var child = react__WEBPACK_IMPORTED_MODULE_3___default.a.Children.toArray(children)[idx];\n    if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);\n\n    if (this.props[handler]) {\n      var maybeNode = child.props.nodeRef ? undefined : react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.findDOMNode(this);\n      this.props[handler](maybeNode);\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        children = _this$props.children,\n        inProp = _this$props.in,\n        props = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_this$props, [\"children\", \"in\"]);\n\n    var _React$Children$toArr = react__WEBPACK_IMPORTED_MODULE_3___default.a.Children.toArray(children),\n        first = _React$Children$toArr[0],\n        second = _React$Children$toArr[1];\n\n    delete props.onEnter;\n    delete props.onEntering;\n    delete props.onEntered;\n    delete props.onExit;\n    delete props.onExiting;\n    delete props.onExited;\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_TransitionGroup__WEBPACK_IMPORTED_MODULE_5__[\"default\"], props, inProp ? react__WEBPACK_IMPORTED_MODULE_3___default.a.cloneElement(first, {\n      key: 'first',\n      onEnter: this.handleEnter,\n      onEntering: this.handleEntering,\n      onEntered: this.handleEntered\n    }) : react__WEBPACK_IMPORTED_MODULE_3___default.a.cloneElement(second, {\n      key: 'second',\n      onEnter: this.handleExit,\n      onEntering: this.handleExiting,\n      onEntered: this.handleExited\n    }));\n  };\n\n  return ReplaceTransition;\n}(react__WEBPACK_IMPORTED_MODULE_3___default.a.Component);\n\nReplaceTransition.propTypes =  true ? {\n  in: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,\n  children: function children(props, propName) {\n    if (react__WEBPACK_IMPORTED_MODULE_3___default.a.Children.count(props[propName]) !== 2) return new Error(\"\\\"\" + propName + \"\\\" must be exactly two transition components.\");\n    return null;\n  }\n} : undefined;\n/* harmony default export */ __webpack_exports__[\"default\"] = (ReplaceTransition);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/ReplaceTransition.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/SwitchTransition.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/SwitchTransition.js ***!
+  \*********************************************************************************/
+/*! exports provided: modes, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"modes\", function() { return modes; });\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Transition__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Transition */ \"./jaas-client/node_modules/react-transition-group/esm/Transition.js\");\n/* harmony import */ var _TransitionGroupContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./TransitionGroupContext */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js\");\n\n\nvar _leaveRenders, _enterRenders;\n\n\n\n\n\n\nfunction areChildrenDifferent(oldChildren, newChildren) {\n  if (oldChildren === newChildren) return false;\n\n  if (react__WEBPACK_IMPORTED_MODULE_1___default.a.isValidElement(oldChildren) && react__WEBPACK_IMPORTED_MODULE_1___default.a.isValidElement(newChildren) && oldChildren.key != null && oldChildren.key === newChildren.key) {\n    return false;\n  }\n\n  return true;\n}\n/**\n * Enum of modes for SwitchTransition component\n * @enum { string }\n */\n\n\nvar modes = {\n  out: 'out-in',\n  in: 'in-out'\n};\n\nvar callHook = function callHook(element, name, cb) {\n  return function () {\n    var _element$props;\n\n    element.props[name] && (_element$props = element.props)[name].apply(_element$props, arguments);\n    cb();\n  };\n};\n\nvar leaveRenders = (_leaveRenders = {}, _leaveRenders[modes.out] = function (_ref) {\n  var current = _ref.current,\n      changeState = _ref.changeState;\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(current, {\n    in: false,\n    onExited: callHook(current, 'onExited', function () {\n      changeState(_Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"], null);\n    })\n  });\n}, _leaveRenders[modes.in] = function (_ref2) {\n  var current = _ref2.current,\n      changeState = _ref2.changeState,\n      children = _ref2.children;\n  return [current, react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n    in: true,\n    onEntered: callHook(children, 'onEntered', function () {\n      changeState(_Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"]);\n    })\n  })];\n}, _leaveRenders);\nvar enterRenders = (_enterRenders = {}, _enterRenders[modes.out] = function (_ref3) {\n  var children = _ref3.children,\n      changeState = _ref3.changeState;\n  return react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n    in: true,\n    onEntered: callHook(children, 'onEntered', function () {\n      changeState(_Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERED\"], react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n        in: true\n      }));\n    })\n  });\n}, _enterRenders[modes.in] = function (_ref4) {\n  var current = _ref4.current,\n      children = _ref4.children,\n      changeState = _ref4.changeState;\n  return [react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(current, {\n    in: false,\n    onExited: callHook(current, 'onExited', function () {\n      changeState(_Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERED\"], react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n        in: true\n      }));\n    })\n  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(children, {\n    in: true\n  })];\n}, _enterRenders);\n/**\n * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).\n * You can use it when you want to control the render between state transitions.\n * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.\n *\n * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.\n * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child.\n *\n * **Note**: If you want the animation to happen simultaneously\n * (that is, to have the old child removed and a new child inserted **at the same time**),\n * you should use\n * [`TransitionGroup`](https://reactcommunity.org/react-transition-group/transition-group)\n * instead.\n *\n * ```jsx\n * function App() {\n *  const [state, setState] = useState(false);\n *  return (\n *    <SwitchTransition>\n *      <CSSTransition\n *        key={state ? \"Goodbye, world!\" : \"Hello, world!\"}\n *        addEndListener={(node, done) => node.addEventListener(\"transitionend\", done, false)}\n *        classNames='fade'\n *      >\n *        <button onClick={() => setState(state => !state)}>\n *          {state ? \"Goodbye, world!\" : \"Hello, world!\"}\n *        </button>\n *      </CSSTransition>\n *    </SwitchTransition>\n *  );\n * }\n * ```\n *\n * ```css\n * .fade-enter{\n *    opacity: 0;\n * }\n * .fade-exit{\n *    opacity: 1;\n * }\n * .fade-enter-active{\n *    opacity: 1;\n * }\n * .fade-exit-active{\n *    opacity: 0;\n * }\n * .fade-enter-active,\n * .fade-exit-active{\n *    transition: opacity 500ms;\n * }\n * ```\n */\n\nvar SwitchTransition = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(SwitchTransition, _React$Component);\n\n  function SwitchTransition() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.state = {\n      status: _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERED\"],\n      current: null\n    };\n    _this.appeared = false;\n\n    _this.changeState = function (status, current) {\n      if (current === void 0) {\n        current = _this.state.current;\n      }\n\n      _this.setState({\n        status: status,\n        current: current\n      });\n    };\n\n    return _this;\n  }\n\n  var _proto = SwitchTransition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.appeared = true;\n  };\n\n  SwitchTransition.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n    if (props.children == null) {\n      return {\n        current: null\n      };\n    }\n\n    if (state.status === _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"] && props.mode === modes.in) {\n      return {\n        status: _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"]\n      };\n    }\n\n    if (state.current && areChildrenDifferent(state.current, props.children)) {\n      return {\n        status: _Transition__WEBPACK_IMPORTED_MODULE_3__[\"EXITING\"]\n      };\n    }\n\n    return {\n      current: react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(props.children, {\n        in: true\n      })\n    };\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        children = _this$props.children,\n        mode = _this$props.mode,\n        _this$state = this.state,\n        status = _this$state.status,\n        current = _this$state.current;\n    var data = {\n      children: children,\n      current: current,\n      changeState: this.changeState,\n      status: status\n    };\n    var component;\n\n    switch (status) {\n      case _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERING\"]:\n        component = enterRenders[mode](data);\n        break;\n\n      case _Transition__WEBPACK_IMPORTED_MODULE_3__[\"EXITING\"]:\n        component = leaveRenders[mode](data);\n        break;\n\n      case _Transition__WEBPACK_IMPORTED_MODULE_3__[\"ENTERED\"]:\n        component = current;\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_TransitionGroupContext__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Provider, {\n      value: {\n        isMounting: !this.appeared\n      }\n    }, component);\n  };\n\n  return SwitchTransition;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nSwitchTransition.propTypes =  true ? {\n  /**\n   * Transition modes.\n   * `out-in`: Current element transitions out first, then when complete, the new element transitions in.\n   * `in-out`: New element transitions in first, then when complete, the current element transitions out.\n   *\n   * @type {'out-in'|'in-out'}\n   */\n  mode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf([modes.in, modes.out]),\n\n  /**\n   * Any `Transition` or `CSSTransition` component.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.element.isRequired])\n} : undefined;\nSwitchTransition.defaultProps = {\n  mode: modes.out\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (SwitchTransition);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/SwitchTransition.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/Transition.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/Transition.js ***!
+  \***************************************************************************/
+/*! exports provided: UNMOUNTED, EXITED, ENTERING, ENTERED, EXITING, default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UNMOUNTED\", function() { return UNMOUNTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EXITED\", function() { return EXITED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ENTERING\", function() { return ENTERING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ENTERED\", function() { return ENTERED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EXITING\", function() { return EXITING; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config */ \"./jaas-client/node_modules/react-transition-group/esm/config.js\");\n/* harmony import */ var _utils_PropTypes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/PropTypes */ \"./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js\");\n/* harmony import */ var _TransitionGroupContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./TransitionGroupContext */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js\");\n\n\n\n\n\n\n\n\nvar UNMOUNTED = 'unmounted';\nvar EXITED = 'exited';\nvar ENTERING = 'entering';\nvar ENTERED = 'entered';\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 1 },\n *   entered:  { opacity: 1 },\n *   exiting:  { opacity: 0 },\n *   exited:  { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  } // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n  ;\n\n  var _proto = Transition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      if (nextStatus === ENTERING) {\n        this.performEnter(mounting);\n      } else {\n        this.performExit();\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context ? this.context.isMounting : mounting;\n\n    var _ref2 = this.props.nodeRef ? [appearing] : [react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.findDOMNode(this), appearing],\n        maybeNode = _ref2[0],\n        maybeAppearing = _ref2[1];\n\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter || _config__WEBPACK_IMPORTED_MODULE_5__[\"default\"].disabled) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onEnter(maybeNode, maybeAppearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(maybeNode, maybeAppearing);\n\n      _this2.onTransitionEnd(enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(maybeNode, maybeAppearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit() {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts();\n    var maybeNode = this.props.nodeRef ? undefined : react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.findDOMNode(this); // no exit animation skip right to EXITED\n\n    if (!exit || _config__WEBPACK_IMPORTED_MODULE_5__[\"default\"].disabled) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onExit(maybeNode);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(maybeNode);\n\n      _this3.onTransitionEnd(timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(maybeNode);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n    this.setNextCallback(handler);\n    var node = this.props.nodeRef ? this.props.nodeRef.current : react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.findDOMNode(this);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n          maybeNode = _ref3[0],\n          maybeNextCallback = _ref3[1];\n\n      this.props.addEndListener(maybeNode, maybeNextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        _in = _this$props.in,\n        _mountOnEnter = _this$props.mountOnEnter,\n        _unmountOnExit = _this$props.unmountOnExit,\n        _appear = _this$props.appear,\n        _enter = _this$props.enter,\n        _exit = _this$props.exit,\n        _timeout = _this$props.timeout,\n        _addEndListener = _this$props.addEndListener,\n        _onEnter = _this$props.onEnter,\n        _onEntering = _this$props.onEntering,\n        _onEntered = _this$props.onEntered,\n        _onExit = _this$props.onExit,\n        _onExiting = _this$props.onExiting,\n        _onExited = _this$props.onExited,\n        _nodeRef = _this$props.nodeRef,\n        childProps = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n    return (\n      /*#__PURE__*/\n      // allows for nested Transitions\n      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_TransitionGroupContext__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Provider, {\n        value: null\n      }, typeof children === 'function' ? children(status, childProps) : react__WEBPACK_IMPORTED_MODULE_3___default.a.cloneElement(react__WEBPACK_IMPORTED_MODULE_3___default.a.Children.only(children), childProps))\n    );\n  };\n\n  return Transition;\n}(react__WEBPACK_IMPORTED_MODULE_3___default.a.Component);\n\nTransition.contextType = _TransitionGroupContext__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nTransition.propTypes =  true ? {\n  /**\n   * A React reference to DOM element that need to transition:\n   * https://stackoverflow.com/a/51127130/4671932\n   *\n   *   - When `nodeRef` prop is used, `node` is not passed to callback functions\n   *      (e.g. `onEnter`) because user already has direct access to the node.\n   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n   *     `nodeRef` need to be provided to `Transition` with changed `key` prop\n   *     (see\n   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n   */\n  nodeRef: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({\n    current: typeof Element === 'undefined' ? prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.any : prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(Element)\n  }),\n\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * By default the child component does not perform the enter transition when\n   * it first mounts, regardless of the value of `in`. If you want this\n   * behavior, set both `appear` and `in` to `true`.\n   *\n   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n   * > only adds an additional enter transition. However, in the\n   * > `<CSSTransition>` component that first enter transition does result in\n   * > additional `.appear-*` classes, that way you can choose to style it\n   * > differently.\n   */\n  appear: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = _utils_PropTypes__WEBPACK_IMPORTED_MODULE_6__[\"timeoutsShape\"];\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. Timeouts are still used as a fallback if provided.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func\n} : undefined; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Transition);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/Transition.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js ***!
+  \********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./jaas-client/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _TransitionGroupContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TransitionGroupContext */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js\");\n/* harmony import */ var _utils_ChildMapping__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/ChildMapping */ \"./jaas-client/node_modules/react-transition-group/esm/utils/ChildMapping.js\");\n\n\n\n\n\n\n\n\n\nvar values = Object.values || function (obj) {\n  return Object.keys(obj).map(function (k) {\n    return obj[k];\n  });\n};\n\nvar defaultProps = {\n  component: 'div',\n  childFactory: function childFactory(child) {\n    return child;\n  }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>`  does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n  Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(TransitionGroup, _React$Component);\n\n  function TransitionGroup(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n\n    var handleExited = _this.handleExited.bind(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_this)); // Initial children should all be entering, dependent on appear\n\n\n    _this.state = {\n      contextValue: {\n        isMounting: true\n      },\n      handleExited: handleExited,\n      firstRender: true\n    };\n    return _this;\n  }\n\n  var _proto = TransitionGroup.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.mounted = true;\n    this.setState({\n      contextValue: {\n        isMounting: false\n      }\n    });\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.mounted = false;\n  };\n\n  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n    var prevChildMapping = _ref.children,\n        handleExited = _ref.handleExited,\n        firstRender = _ref.firstRender;\n    return {\n      children: firstRender ? Object(_utils_ChildMapping__WEBPACK_IMPORTED_MODULE_7__[\"getInitialChildMapping\"])(nextProps, handleExited) : Object(_utils_ChildMapping__WEBPACK_IMPORTED_MODULE_7__[\"getNextChildMapping\"])(nextProps, prevChildMapping, handleExited),\n      firstRender: false\n    };\n  } // node is `undefined` when user provided `nodeRef` prop\n  ;\n\n  _proto.handleExited = function handleExited(child, node) {\n    var currentChildMapping = Object(_utils_ChildMapping__WEBPACK_IMPORTED_MODULE_7__[\"getChildMapping\"])(this.props.children);\n    if (child.key in currentChildMapping) return;\n\n    if (child.props.onExited) {\n      child.props.onExited(node);\n    }\n\n    if (this.mounted) {\n      this.setState(function (state) {\n        var children = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state.children);\n\n        delete children[child.key];\n        return {\n          children: children\n        };\n      });\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        Component = _this$props.component,\n        childFactory = _this$props.childFactory,\n        props = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_this$props, [\"component\", \"childFactory\"]);\n\n    var contextValue = this.state.contextValue;\n    var children = values(this.state.children).map(childFactory);\n    delete props.appear;\n    delete props.enter;\n    delete props.exit;\n\n    if (Component === null) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_TransitionGroupContext__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Provider, {\n        value: contextValue\n      }, children);\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_TransitionGroupContext__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Provider, {\n      value: contextValue\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(Component, props, children));\n  };\n\n  return TransitionGroup;\n}(react__WEBPACK_IMPORTED_MODULE_5___default.a.Component);\n\nTransitionGroup.propTypes =  true ? {\n  /**\n   * `<TransitionGroup>` renders a `<div>` by default. You can change this\n   * behavior by providing a `component` prop.\n   * If you use React v16+ and would like to avoid a wrapping `<div>` element\n   * you can pass in `component={null}`. This is useful if the wrapping div\n   * borks your css styles.\n   */\n  component: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any,\n\n  /**\n   * A set of `<Transition>` components, that are toggled `in` and out as they\n   * leave. the `<TransitionGroup>` will inject specific transition props, so\n   * remember to spread them through if you are wrapping the `<Transition>` as\n   * with our `<Fade>` example.\n   *\n   * While this component is meant for multiple `Transition` or `CSSTransition`\n   * children, sometimes you may want to have a single transition child with\n   * content that you want to be transitioned out and in when you change it\n   * (e.g. routes, images etc.) In that case you can change the `key` prop of\n   * the transition child as you change its content, this will cause\n   * `TransitionGroup` to transition the child out and back in.\n   */\n  children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n\n  /**\n   * A convenience prop that enables or disables appear animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  appear: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * A convenience prop that enables or disables enter animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * A convenience prop that enables or disables exit animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n\n  /**\n   * You may need to apply reactive updates to a child as it is exiting.\n   * This is generally done by using `cloneElement` however in the case of an exiting\n   * child the element has already been removed and not accessible to the consumer.\n   *\n   * If you do need to update a child as it leaves you can provide a `childFactory`\n   * to wrap every child, even the ones that are leaving.\n   *\n   * @type Function(child: ReactElement) -> ReactElement\n   */\n  childFactory: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func\n} : undefined;\nTransitionGroup.defaultProps = defaultProps;\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransitionGroup);\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js":
+/*!***************************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js ***!
+  \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null));\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/TransitionGroupContext.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/config.js":
+/*!***********************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/config.js ***!
+  \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  disabled: false\n});\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/config.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/index.js":
+/*!**********************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/index.js ***!
+  \**********************************************************************/
+/*! exports provided: CSSTransition, ReplaceTransition, SwitchTransition, TransitionGroup, Transition, config */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _CSSTransition__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CSSTransition */ \"./jaas-client/node_modules/react-transition-group/esm/CSSTransition.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CSSTransition\", function() { return _CSSTransition__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _ReplaceTransition__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ReplaceTransition */ \"./jaas-client/node_modules/react-transition-group/esm/ReplaceTransition.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReplaceTransition\", function() { return _ReplaceTransition__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _SwitchTransition__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SwitchTransition */ \"./jaas-client/node_modules/react-transition-group/esm/SwitchTransition.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SwitchTransition\", function() { return _SwitchTransition__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _TransitionGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./TransitionGroup */ \"./jaas-client/node_modules/react-transition-group/esm/TransitionGroup.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TransitionGroup\", function() { return _TransitionGroup__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _Transition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Transition */ \"./jaas-client/node_modules/react-transition-group/esm/Transition.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Transition\", function() { return _Transition__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config */ \"./jaas-client/node_modules/react-transition-group/esm/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"config\", function() { return _config__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/utils/ChildMapping.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/utils/ChildMapping.js ***!
+  \***********************************************************************************/
+/*! exports provided: getChildMapping, mergeChildMappings, getInitialChildMapping, getNextChildMapping */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getChildMapping\", function() { return getChildMapping; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeChildMappings\", function() { return mergeChildMappings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getInitialChildMapping\", function() { return getInitialChildMapping; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getNextChildMapping\", function() { return getNextChildMapping; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nfunction getChildMapping(children, mapFn) {\n  var mapper = function mapper(child) {\n    return mapFn && Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(child) ? mapFn(child) : child;\n  };\n\n  var result = Object.create(null);\n  if (children) react__WEBPACK_IMPORTED_MODULE_0__[\"Children\"].map(children, function (c) {\n    return c;\n  }).forEach(function (child) {\n    // run the map function here instead so that the key is the computed one\n    result[child.key] = mapper(child);\n  });\n  return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nfunction mergeChildMappings(prev, next) {\n  prev = prev || {};\n  next = next || {};\n\n  function getValueForKey(key) {\n    return key in next ? next[key] : prev[key];\n  } // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n\n\n  var nextKeysPending = Object.create(null);\n  var pendingKeys = [];\n\n  for (var prevKey in prev) {\n    if (prevKey in next) {\n      if (pendingKeys.length) {\n        nextKeysPending[prevKey] = pendingKeys;\n        pendingKeys = [];\n      }\n    } else {\n      pendingKeys.push(prevKey);\n    }\n  }\n\n  var i;\n  var childMapping = {};\n\n  for (var nextKey in next) {\n    if (nextKeysPending[nextKey]) {\n      for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n        var pendingNextKey = nextKeysPending[nextKey][i];\n        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n      }\n    }\n\n    childMapping[nextKey] = getValueForKey(nextKey);\n  } // Finally, add the keys which didn't appear before any key in `next`\n\n\n  for (i = 0; i < pendingKeys.length; i++) {\n    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n  }\n\n  return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n  return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n  return getChildMapping(props.children, function (child) {\n    return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n      onExited: onExited.bind(null, child),\n      in: true,\n      appear: getProp(child, 'appear', props),\n      enter: getProp(child, 'enter', props),\n      exit: getProp(child, 'exit', props)\n    });\n  });\n}\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n  var nextChildMapping = getChildMapping(nextProps.children);\n  var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n  Object.keys(children).forEach(function (key) {\n    var child = children[key];\n    if (!Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(child)) return;\n    var hasPrev = (key in prevChildMapping);\n    var hasNext = (key in nextChildMapping);\n    var prevChild = prevChildMapping[key];\n    var isLeaving = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(prevChild) && !prevChild.props.in; // item is new (entering)\n\n    if (hasNext && (!hasPrev || isLeaving)) {\n      // console.log('entering', key)\n      children[key] = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n        onExited: onExited.bind(null, child),\n        in: true,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    } else if (!hasNext && hasPrev && !isLeaving) {\n      // item is old (exiting)\n      // console.log('leaving', key)\n      children[key] = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n        in: false\n      });\n    } else if (hasNext && hasPrev && Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(prevChild)) {\n      // item hasn't changed transition states\n      // copy over the last transition props;\n      // console.log('unchanged', key)\n      children[key] = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n        onExited: onExited.bind(null, child),\n        in: prevChild.props.in,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    }\n  });\n  return children;\n}\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/utils/ChildMapping.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js":
+/*!********************************************************************************!*\
+  !*** ./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js ***!
+  \********************************************************************************/
+/*! exports provided: timeoutsShape, classNamesShape */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"timeoutsShape\", function() { return timeoutsShape; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"classNamesShape\", function() { return classNamesShape; });\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"./jaas-client/node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n\nvar timeoutsShape =  true ? prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number,\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number,\n  appear: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number\n}).isRequired]) : undefined;\nvar classNamesShape =  true ? prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  active: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string\n}), prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({\n  enter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  enterDone: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  enterActive: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  exit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  exitDone: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n  exitActive: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string\n})]) : undefined;\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react-transition-group/esm/utils/PropTypes.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react/cjs/react.development.js":
+/*!*****************************************************************!*\
+  !*** ./jaas-client/node_modules/react/cjs/react.development.js ***!
+  \*****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/** @license React v16.13.1\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar _assign = __webpack_require__(/*! object-assign */ \"./jaas-client/node_modules/object-assign/index.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./jaas-client/node_modules/prop-types/checkPropTypes.js\");\n\nvar ReactVersion = '16.13.1';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n};\n\n/**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\nvar ReactCurrentBatchConfig = {\n  suspense: null\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n};\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n  var sourceInfo = '';\n\n  if (source) {\n    var path = source.fileName;\n    var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n    {\n      // In DEV, include code for a common special case:\n      // prefer \"folder/index.js\" instead of just \"index.js\".\n      if (/^index\\./.test(fileName)) {\n        var match = path.match(BEFORE_SLASH_RE);\n\n        if (match) {\n          var pathBeforeSlash = match[1];\n\n          if (pathBeforeSlash) {\n            var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n            fileName = folderName + '/' + fileName;\n          }\n        }\n      }\n    }\n\n    sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n  } else if (ownerName) {\n    sourceInfo = ' (created by ' + ownerName + ')';\n  }\n\n  return '\\n    in ' + (name || 'Unknown') + sourceInfo;\n}\n\nvar Resolved = 1;\nfunction refineResolvedLazyComponent(lazyComponent) {\n  return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var functionName = innerType.displayName || innerType.name || '';\n  return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        return 'Context.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        return 'Context.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        return getComponentName(type.type);\n\n      case REACT_BLOCK_TYPE:\n        return getComponentName(type.render);\n\n      case REACT_LAZY_TYPE:\n        {\n          var thenable = type;\n          var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n          if (resolvedThenable) {\n            return getComponentName(resolvedThenable);\n          }\n\n          break;\n        }\n    }\n  }\n\n  return null;\n}\n\nvar ReactDebugCurrentFrame = {};\nvar currentlyValidatingElement = null;\nfunction setCurrentlyValidatingElement(element) {\n  {\n    currentlyValidatingElement = element;\n  }\n}\n\n{\n  // Stack implementation injected by the current renderer.\n  ReactDebugCurrentFrame.getCurrentStack = null;\n\n  ReactDebugCurrentFrame.getStackAddendum = function () {\n    var stack = ''; // Add an extra top frame while an element is being validated\n\n    if (currentlyValidatingElement) {\n      var name = getComponentName(currentlyValidatingElement.type);\n      var owner = currentlyValidatingElement._owner;\n      stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\n    } // Delegate to the injected renderer-specific implementation\n\n\n    var impl = ReactDebugCurrentFrame.getCurrentStack;\n\n    if (impl) {\n      stack += impl() || '';\n    }\n\n    return stack;\n  };\n}\n\n/**\n * Used by act() to track whether you're inside an act() scope.\n */\nvar IsSomeRendererActing = {\n  current: false\n};\n\nvar ReactSharedInternals = {\n  ReactCurrentDispatcher: ReactCurrentDispatcher,\n  ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n  ReactCurrentOwner: ReactCurrentOwner,\n  IsSomeRendererActing: IsSomeRendererActing,\n  // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n  assign: _assign\n};\n\n{\n  _assign(ReactSharedInternals, {\n    // These should not be included in production.\n    ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n    // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n    // TODO: remove in React 17.0.\n    ReactComponentTreeHook: {}\n  });\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    printWarning('warn', format, args);\n  }\n}\nfunction error(format) {\n  {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    printWarning('error', format, args);\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n    in') === 0;\n\n    if (!hasExistingStack) {\n      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n      var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n      if (stack !== '') {\n        format += '%s';\n        args = args.concat([stack]);\n      }\n    }\n\n    var argsWithFormat = args.map(function (item) {\n      return '' + item;\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      throw new Error(message);\n    } catch (x) {}\n  }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n  {\n    var _constructor = publicInstance.constructor;\n    var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n    var warningKey = componentName + \".\" + callerName;\n\n    if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n      return;\n    }\n\n    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);\n\n    didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n  }\n}\n/**\n * This is the abstract API for an update queue.\n */\n\n\nvar ReactNoopUpdateQueue = {\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    return false;\n  },\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} callerName name of the calling function in the public API.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance, callback, callerName) {\n    warnNoop(publicInstance, 'forceUpdate');\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} callerName name of the calling function in the public API.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n    warnNoop(publicInstance, 'replaceState');\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} Name of the calling function in the public API.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n    warnNoop(publicInstance, 'setState');\n  }\n};\n\nvar emptyObject = {};\n\n{\n  Object.freeze(emptyObject);\n}\n/**\n * Base class helpers for the updating state of a component.\n */\n\n\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context; // If a component has string refs, we will assign a different object later.\n\n  this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n  // renderer.\n\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together.  You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n *        produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\nComponent.prototype.setState = function (partialState, callback) {\n  if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {\n    {\n      throw Error( \"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\" );\n    }\n  }\n\n  this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n{\n  var deprecatedAPIs = {\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n  };\n\n  var defineDeprecationWarning = function (methodName, info) {\n    Object.defineProperty(Component.prototype, methodName, {\n      get: function () {\n        warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\n        return undefined;\n      }\n    });\n  };\n\n  for (var fnName in deprecatedAPIs) {\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    }\n  }\n}\n\nfunction ComponentDummy() {}\n\nComponentDummy.prototype = Component.prototype;\n/**\n * Convenience component with default shallow equality check for sCU.\n */\n\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context; // If a component has string refs, we will assign a different object later.\n\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\n_assign(pureComponentPrototype, Component.prototype);\n\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n  var refObject = {\n    current: null\n  };\n\n  {\n    Object.seal(refObject);\n  }\n\n  return refObject;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  var warnAboutAccessingKey = function () {\n    {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        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);\n      }\n    }\n  };\n\n  warnAboutAccessingKey.isReactWarning = true;\n  Object.defineProperty(props, 'key', {\n    get: warnAboutAccessingKey,\n    configurable: true\n  });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  var warnAboutAccessingRef = function () {\n    {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        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);\n      }\n    }\n  };\n\n  warnAboutAccessingRef.isReactWarning = true;\n  Object.defineProperty(props, 'ref', {\n    get: warnAboutAccessingRef,\n    configurable: true\n  });\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n      var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        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);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\nfunction createElement(type, config, children) {\n  var propName; // Reserved names are extracted\n\n  var props = {};\n  var key = null;\n  var ref = null;\n  var self = null;\n  var source = null;\n\n  if (config != null) {\n    if (hasValidRef(config)) {\n      ref = config.ref;\n\n      {\n        warnIfStringRefCannotBeAutoConverted(config);\n      }\n    }\n\n    if (hasValidKey(config)) {\n      key = '' + config.key;\n    }\n\n    self = config.__self === undefined ? null : config.__self;\n    source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  } // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n\n\n  var childrenLength = arguments.length - 2;\n\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n\n    {\n      if (Object.freeze) {\n        Object.freeze(childArray);\n      }\n    }\n\n    props.children = childArray;\n  } // Resolve default props\n\n\n  if (type && type.defaultProps) {\n    var defaultProps = type.defaultProps;\n\n    for (propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n  }\n\n  {\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n  }\n\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n  return newElement;\n}\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\nfunction cloneElement(element, config, children) {\n  if (!!(element === null || element === undefined)) {\n    {\n      throw Error( \"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\" );\n    }\n  }\n\n  var propName; // Original props are copied\n\n  var props = _assign({}, element.props); // Reserved names are extracted\n\n\n  var key = element.key;\n  var ref = element.ref; // Self is preserved since the owner is preserved.\n\n  var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n  // transpiler, and the original source is probably a better indicator of the\n  // true owner.\n\n  var source = element._source; // Owner will be preserved, unless ref is overridden\n\n  var owner = element._owner;\n\n  if (config != null) {\n    if (hasValidRef(config)) {\n      // Silently steal the ref from the parent.\n      ref = config.ref;\n      owner = ReactCurrentOwner.current;\n    }\n\n    if (hasValidKey(config)) {\n      key = '' + config.key;\n    } // Remaining properties override existing props\n\n\n    var defaultProps;\n\n    if (element.type && element.type.defaultProps) {\n      defaultProps = element.type.defaultProps;\n    }\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        if (config[propName] === undefined && defaultProps !== undefined) {\n          // Resolve default props\n          props[propName] = defaultProps[propName];\n        } else {\n          props[propName] = config[propName];\n        }\n      }\n    }\n  } // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n\n\n  var childrenLength = arguments.length - 2;\n\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n\n    props.children = childArray;\n  }\n\n  return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n  var escapeRegex = /[=:]/g;\n  var escaperLookup = {\n    '=': '=0',\n    ':': '=2'\n  };\n  var escapedString = ('' + key).replace(escapeRegex, function (match) {\n    return escaperLookup[match];\n  });\n  return '$' + escapedString;\n}\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\nvar didWarnAboutMaps = false;\nvar userProvidedKeyEscapeRegex = /\\/+/g;\n\nfunction escapeUserProvidedKey(text) {\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\nvar POOL_SIZE = 10;\nvar traverseContextPool = [];\n\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n  if (traverseContextPool.length) {\n    var traverseContext = traverseContextPool.pop();\n    traverseContext.result = mapResult;\n    traverseContext.keyPrefix = keyPrefix;\n    traverseContext.func = mapFunction;\n    traverseContext.context = mapContext;\n    traverseContext.count = 0;\n    return traverseContext;\n  } else {\n    return {\n      result: mapResult,\n      keyPrefix: keyPrefix,\n      func: mapFunction,\n      context: mapContext,\n      count: 0\n    };\n  }\n}\n\nfunction releaseTraverseContext(traverseContext) {\n  traverseContext.result = null;\n  traverseContext.keyPrefix = null;\n  traverseContext.func = null;\n  traverseContext.context = null;\n  traverseContext.count = 0;\n\n  if (traverseContextPool.length < POOL_SIZE) {\n    traverseContextPool.push(traverseContext);\n  }\n}\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\n\n\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n  var type = typeof children;\n\n  if (type === 'undefined' || type === 'boolean') {\n    // All of the above are perceived as null.\n    children = null;\n  }\n\n  var invokeCallback = false;\n\n  if (children === null) {\n    invokeCallback = true;\n  } else {\n    switch (type) {\n      case 'string':\n      case 'number':\n        invokeCallback = true;\n        break;\n\n      case 'object':\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = true;\n        }\n\n    }\n  }\n\n  if (invokeCallback) {\n    callback(traverseContext, children, // If it's the only child, treat the name as if it was wrapped in an array\n    // so that it's consistent if the number of children grows.\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n    return 1;\n  }\n\n  var child;\n  var nextName;\n  var subtreeCount = 0; // Count of children found in the current subtree.\n\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      nextName = nextNamePrefix + getComponentKey(child, i);\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n    }\n  } else {\n    var iteratorFn = getIteratorFn(children);\n\n    if (typeof iteratorFn === 'function') {\n\n      {\n        // Warn about using Maps as children\n        if (iteratorFn === children.entries) {\n          if (!didWarnAboutMaps) {\n            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.');\n          }\n\n          didWarnAboutMaps = true;\n        }\n      }\n\n      var iterator = iteratorFn.call(children);\n      var step;\n      var ii = 0;\n\n      while (!(step = iterator.next()).done) {\n        child = step.value;\n        nextName = nextNamePrefix + getComponentKey(child, ii++);\n        subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n      }\n    } else if (type === 'object') {\n      var addendum = '';\n\n      {\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n      }\n\n      var childrenString = '' + children;\n\n      {\n        {\n          throw Error( \"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \").\" + addendum );\n        }\n      }\n    }\n  }\n\n  return subtreeCount;\n}\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\n\n\nfunction traverseAllChildren(children, callback, traverseContext) {\n  if (children == null) {\n    return 0;\n  }\n\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\nfunction getComponentKey(component, index) {\n  // Do some typechecking here since we call this blindly. We want to ensure\n  // that we don't block potential future ES APIs.\n  if (typeof component === 'object' && component !== null && component.key != null) {\n    // Explicit key\n    return escape(component.key);\n  } // Implicit key determined by the index in the set\n\n\n  return index.toString(36);\n}\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n  var func = bookKeeping.func,\n      context = bookKeeping.context;\n  func.call(context, child, bookKeeping.count++);\n}\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\n\n\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n  if (children == null) {\n    return children;\n  }\n\n  var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\n  releaseTraverseContext(traverseContext);\n}\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n  var result = bookKeeping.result,\n      keyPrefix = bookKeeping.keyPrefix,\n      func = bookKeeping.func,\n      context = bookKeeping.context;\n  var mappedChild = func.call(context, child, bookKeeping.count++);\n\n  if (Array.isArray(mappedChild)) {\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\n      return c;\n    });\n  } else if (mappedChild != null) {\n    if (isValidElement(mappedChild)) {\n      mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n      // traverseAllChildren used to do for objects as children\n      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n    }\n\n    result.push(mappedChild);\n  }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n  var escapedPrefix = '';\n\n  if (prefix != null) {\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n  }\n\n  var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n  releaseTraverseContext(traverseContext);\n}\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\n\n\nfunction mapChildren(children, func, context) {\n  if (children == null) {\n    return children;\n  }\n\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n  return result;\n}\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\nfunction countChildren(children) {\n  return traverseAllChildren(children, function () {\n    return null;\n  }, null);\n}\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\nfunction toArray(children) {\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\n    return child;\n  });\n  return result;\n}\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\nfunction onlyChild(children) {\n  if (!isValidElement(children)) {\n    {\n      throw Error( \"React.Children.only expected to receive a single React element child.\" );\n    }\n  }\n\n  return children;\n}\n\nfunction createContext(defaultValue, calculateChangedBits) {\n  if (calculateChangedBits === undefined) {\n    calculateChangedBits = null;\n  } else {\n    {\n      if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {\n        error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);\n      }\n    }\n  }\n\n  var context = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _calculateChangedBits: calculateChangedBits,\n    // As a workaround to support multiple concurrent renderers, we categorize\n    // some renderers as primary and others as secondary. We only expect\n    // there to be two concurrent renderers at most: React Native (primary) and\n    // Fabric (secondary); React DOM (primary) and React ART (secondary).\n    // Secondary renderers store their context values on separate fields.\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    // Used to track how many concurrent renderers this context currently\n    // supports within in a single renderer. Such as parallel server rendering.\n    _threadCount: 0,\n    // These are circular\n    Provider: null,\n    Consumer: null\n  };\n  context.Provider = {\n    $$typeof: REACT_PROVIDER_TYPE,\n    _context: context\n  };\n  var hasWarnedAboutUsingNestedContextConsumers = false;\n  var hasWarnedAboutUsingConsumerProvider = false;\n\n  {\n    // A separate object, but proxies back to the original context object for\n    // backwards compatibility. It has a different $$typeof, so we can properly\n    // warn for the incorrect usage of Context as a Consumer.\n    var Consumer = {\n      $$typeof: REACT_CONTEXT_TYPE,\n      _context: context,\n      _calculateChangedBits: context._calculateChangedBits\n    }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n\n    Object.defineProperties(Consumer, {\n      Provider: {\n        get: function () {\n          if (!hasWarnedAboutUsingConsumerProvider) {\n            hasWarnedAboutUsingConsumerProvider = true;\n\n            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?');\n          }\n\n          return context.Provider;\n        },\n        set: function (_Provider) {\n          context.Provider = _Provider;\n        }\n      },\n      _currentValue: {\n        get: function () {\n          return context._currentValue;\n        },\n        set: function (_currentValue) {\n          context._currentValue = _currentValue;\n        }\n      },\n      _currentValue2: {\n        get: function () {\n          return context._currentValue2;\n        },\n        set: function (_currentValue2) {\n          context._currentValue2 = _currentValue2;\n        }\n      },\n      _threadCount: {\n        get: function () {\n          return context._threadCount;\n        },\n        set: function (_threadCount) {\n          context._threadCount = _threadCount;\n        }\n      },\n      Consumer: {\n        get: function () {\n          if (!hasWarnedAboutUsingNestedContextConsumers) {\n            hasWarnedAboutUsingNestedContextConsumers = true;\n\n            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?');\n          }\n\n          return context.Consumer;\n        }\n      }\n    }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n\n    context.Consumer = Consumer;\n  }\n\n  {\n    context._currentRenderer = null;\n    context._currentRenderer2 = null;\n  }\n\n  return context;\n}\n\nfunction lazy(ctor) {\n  var lazyType = {\n    $$typeof: REACT_LAZY_TYPE,\n    _ctor: ctor,\n    // React uses these fields to store the result.\n    _status: -1,\n    _result: null\n  };\n\n  {\n    // In production, this would just set it on the object.\n    var defaultProps;\n    var propTypes;\n    Object.defineProperties(lazyType, {\n      defaultProps: {\n        configurable: true,\n        get: function () {\n          return defaultProps;\n        },\n        set: function (newDefaultProps) {\n          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.');\n\n          defaultProps = newDefaultProps; // Match production behavior more closely:\n\n          Object.defineProperty(lazyType, 'defaultProps', {\n            enumerable: true\n          });\n        }\n      },\n      propTypes: {\n        configurable: true,\n        get: function () {\n          return propTypes;\n        },\n        set: function (newPropTypes) {\n          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.');\n\n          propTypes = newPropTypes; // Match production behavior more closely:\n\n          Object.defineProperty(lazyType, 'propTypes', {\n            enumerable: true\n          });\n        }\n      }\n    });\n  }\n\n  return lazyType;\n}\n\nfunction forwardRef(render) {\n  {\n    if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n      error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n    } else if (typeof render !== 'function') {\n      error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n    } else {\n      if (render.length !== 0 && render.length !== 2) {\n        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.');\n      }\n    }\n\n    if (render != null) {\n      if (render.defaultProps != null || render.propTypes != null) {\n        error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n      }\n    }\n  }\n\n  return {\n    $$typeof: REACT_FORWARD_REF_TYPE,\n    render: render\n  };\n}\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  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);\n}\n\nfunction memo(type, compare) {\n  {\n    if (!isValidElementType(type)) {\n      error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n    }\n  }\n\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: compare === undefined ? null : compare\n  };\n}\n\nfunction resolveDispatcher() {\n  var dispatcher = ReactCurrentDispatcher.current;\n\n  if (!(dispatcher !== null)) {\n    {\n      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.\" );\n    }\n  }\n\n  return dispatcher;\n}\n\nfunction useContext(Context, unstable_observedBits) {\n  var dispatcher = resolveDispatcher();\n\n  {\n    if (unstable_observedBits !== undefined) {\n      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' : '');\n    } // TODO: add a more generic warning for invalid values.\n\n\n    if (Context._context !== undefined) {\n      var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n      // and nobody should be using this in existing code.\n\n      if (realContext.Consumer === Context) {\n        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?');\n      } else if (realContext.Provider === Context) {\n        error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n      }\n    }\n  }\n\n  return dispatcher.useContext(Context, unstable_observedBits);\n}\nfunction useState(initialState) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useState(initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useReducer(reducer, initialArg, init);\n}\nfunction useRef(initialValue) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useRef(initialValue);\n}\nfunction useEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useEffect(create, deps);\n}\nfunction useLayoutEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useLayoutEffect(create, deps);\n}\nfunction useCallback(callback, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useCallback(callback, deps);\n}\nfunction useMemo(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useMemo(create, deps);\n}\nfunction useImperativeHandle(ref, create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useImperativeHandle(ref, create, deps);\n}\nfunction useDebugValue(value, formatterFn) {\n  {\n    var dispatcher = resolveDispatcher();\n    return dispatcher.useDebugValue(value, formatterFn);\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n  if (ReactCurrentOwner.current) {\n    var name = getComponentName(ReactCurrentOwner.current.type);\n\n    if (name) {\n      return '\\n\\nCheck the render method of `' + name + '`.';\n    }\n  }\n\n  return '';\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  if (source !== undefined) {\n    var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n    var lineNumber = source.lineNumber;\n    return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n  }\n\n  return '';\n}\n\nfunction getSourceInfoErrorAddendumForProps(elementProps) {\n  if (elementProps !== null && elementProps !== undefined) {\n    return getSourceInfoErrorAddendum(elementProps.__source);\n  }\n\n  return '';\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  var info = getDeclarationErrorAddendum();\n\n  if (!info) {\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n    if (parentName) {\n      info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n    }\n  }\n\n  return info;\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  if (!element._store || element._store.validated || element.key != null) {\n    return;\n  }\n\n  element._store.validated = true;\n  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n  if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n    return;\n  }\n\n  ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n  // property, it may be the creator of the child that's responsible for\n  // assigning it a key.\n\n  var childOwner = '';\n\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n    // Give the component that originally created this child.\n    childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n  }\n\n  setCurrentlyValidatingElement(element);\n\n  {\n    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);\n  }\n\n  setCurrentlyValidatingElement(null);\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  if (typeof node !== 'object') {\n    return;\n  }\n\n  if (Array.isArray(node)) {\n    for (var i = 0; i < node.length; i++) {\n      var child = node[i];\n\n      if (isValidElement(child)) {\n        validateExplicitKey(child, parentType);\n      }\n    }\n  } else if (isValidElement(node)) {\n    // This element was passed in a valid location.\n    if (node._store) {\n      node._store.validated = true;\n    }\n  } else if (node) {\n    var iteratorFn = getIteratorFn(node);\n\n    if (typeof iteratorFn === 'function') {\n      // Entry iterators used to provide implicit keys,\n      // but now we print a separate warning for them later.\n      if (iteratorFn !== node.entries) {\n        var iterator = iteratorFn.call(node);\n        var step;\n\n        while (!(step = iterator.next()).done) {\n          if (isValidElement(step.value)) {\n            validateExplicitKey(step.value, parentType);\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var name = getComponentName(type);\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      setCurrentlyValidatingElement(element);\n      checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\n      setCurrentlyValidatingElement(null);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true;\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    setCurrentlyValidatingElement(fragment);\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n    }\n\n    setCurrentlyValidatingElement(null);\n  }\n}\nfunction createElementWithValidation(type, props, children) {\n  var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n  // succeed and there will likely be errors in render.\n\n  if (!validType) {\n    var info = '';\n\n    if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n      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.\";\n    }\n\n    var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n    if (sourceInfo) {\n      info += sourceInfo;\n    } else {\n      info += getDeclarationErrorAddendum();\n    }\n\n    var typeString;\n\n    if (type === null) {\n      typeString = 'null';\n    } else if (Array.isArray(type)) {\n      typeString = 'array';\n    } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n      typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n      info = ' Did you accidentally export a JSX literal instead of a component?';\n    } else {\n      typeString = typeof type;\n    }\n\n    {\n      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);\n    }\n  }\n\n  var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n  // TODO: Drop this when these are no longer allowed as the type argument.\n\n  if (element == null) {\n    return element;\n  } // Skip key warning if the type isn't valid since our key validation logic\n  // doesn't expect a non-string/function type and can throw confusing errors.\n  // We don't want exception behavior to differ between dev and prod.\n  // (Rendering will throw with a helpful message and as soon as the type is\n  // fixed, the key warnings will appear.)\n\n\n  if (validType) {\n    for (var i = 2; i < arguments.length; i++) {\n      validateChildKeys(arguments[i], type);\n    }\n  }\n\n  if (type === REACT_FRAGMENT_TYPE) {\n    validateFragmentProps(element);\n  } else {\n    validatePropTypes(element);\n  }\n\n  return element;\n}\nvar didWarnAboutDeprecatedCreateFactory = false;\nfunction createFactoryWithValidation(type) {\n  var validatedFactory = createElementWithValidation.bind(null, type);\n  validatedFactory.type = type;\n\n  {\n    if (!didWarnAboutDeprecatedCreateFactory) {\n      didWarnAboutDeprecatedCreateFactory = true;\n\n      warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n    } // Legacy hook: remove it\n\n\n    Object.defineProperty(validatedFactory, 'type', {\n      enumerable: false,\n      get: function () {\n        warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n\n        Object.defineProperty(this, 'type', {\n          value: type\n        });\n        return type;\n      }\n    });\n  }\n\n  return validatedFactory;\n}\nfunction cloneElementWithValidation(element, props, children) {\n  var newElement = cloneElement.apply(this, arguments);\n\n  for (var i = 2; i < arguments.length; i++) {\n    validateChildKeys(arguments[i], newElement.type);\n  }\n\n  validatePropTypes(newElement);\n  return newElement;\n}\n\n{\n\n  try {\n    var frozenObject = Object.freeze({});\n    var testMap = new Map([[frozenObject, null]]);\n    var testSet = new Set([frozenObject]); // This is necessary for Rollup to not consider these unused.\n    // https://github.com/rollup/rollup/issues/1771\n    // TODO: we can remove these if Rollup fixes the bug.\n\n    testMap.set(0, 0);\n    testSet.add(0);\n  } catch (e) {\n  }\n}\n\nvar createElement$1 =  createElementWithValidation ;\nvar cloneElement$1 =  cloneElementWithValidation ;\nvar createFactory =  createFactoryWithValidation ;\nvar Children = {\n  map: mapChildren,\n  forEach: forEachChildren,\n  count: countChildren,\n  toArray: toArray,\n  only: onlyChild\n};\n\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\nexports.cloneElement = cloneElement$1;\nexports.createContext = createContext;\nexports.createElement = createElement$1;\nexports.createFactory = createFactory;\nexports.createRef = createRef;\nexports.forwardRef = forwardRef;\nexports.isValidElement = isValidElement;\nexports.lazy = lazy;\nexports.memo = memo;\nexports.useCallback = useCallback;\nexports.useContext = useContext;\nexports.useDebugValue = useDebugValue;\nexports.useEffect = useEffect;\nexports.useImperativeHandle = useImperativeHandle;\nexports.useLayoutEffect = useLayoutEffect;\nexports.useMemo = useMemo;\nexports.useReducer = useReducer;\nexports.useRef = useRef;\nexports.useState = useState;\nexports.version = ReactVersion;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react/cjs/react.development.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/react/index.js":
+/*!*************************************************!*\
+  !*** ./jaas-client/node_modules/react/index.js ***!
+  \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"./jaas-client/node_modules/react/cjs/react.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/react/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/resolve-pathname/esm/resolve-pathname.js":
+/*!***************************************************************************!*\
+  !*** ./jaas-client/node_modules/resolve-pathname/esm/resolve-pathname.js ***!
+  \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nfunction isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n  if (from === undefined) from = '';\n\n  var toParts = (to && to.split('/')) || [];\n  var fromParts = (from && from.split('/')) || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n  if (\n    mustEndAbs &&\n    fromParts[0] !== '' &&\n    (!fromParts[0] || !isAbsolute(fromParts[0]))\n  )\n    fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (resolvePathname);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/resolve-pathname/esm/resolve-pathname.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/scheduler/cjs/scheduler-tracing.development.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/scheduler/cjs/scheduler-tracing.development.js ***!
+  \*********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/** @license React v0.19.1\n * scheduler-tracing.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar DEFAULT_THREAD_ID = 0; // Counters used to generate unique IDs.\n\nvar interactionIDCounter = 0;\nvar threadIDCounter = 0; // Set of currently traced interactions.\n// Interactions \"stack\"–\n// Meaning that newly traced interactions are appended to the previously active set.\n// When an interaction goes out of scope, the previous set (if any) is restored.\n\nexports.__interactionsRef = null; // Listener(s) to notify when interactions begin and end.\n\nexports.__subscriberRef = null;\n\n{\n  exports.__interactionsRef = {\n    current: new Set()\n  };\n  exports.__subscriberRef = {\n    current: null\n  };\n}\nfunction unstable_clear(callback) {\n\n  var prevInteractions = exports.__interactionsRef.current;\n  exports.__interactionsRef.current = new Set();\n\n  try {\n    return callback();\n  } finally {\n    exports.__interactionsRef.current = prevInteractions;\n  }\n}\nfunction unstable_getCurrent() {\n  {\n    return exports.__interactionsRef.current;\n  }\n}\nfunction unstable_getThreadID() {\n  return ++threadIDCounter;\n}\nfunction unstable_trace(name, timestamp, callback) {\n  var threadID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_THREAD_ID;\n\n  var interaction = {\n    __count: 1,\n    id: interactionIDCounter++,\n    name: name,\n    timestamp: timestamp\n  };\n  var prevInteractions = exports.__interactionsRef.current; // Traced interactions should stack/accumulate.\n  // To do that, clone the current interactions.\n  // The previous set will be restored upon completion.\n\n  var interactions = new Set(prevInteractions);\n  interactions.add(interaction);\n  exports.__interactionsRef.current = interactions;\n  var subscriber = exports.__subscriberRef.current;\n  var returnValue;\n\n  try {\n    if (subscriber !== null) {\n      subscriber.onInteractionTraced(interaction);\n    }\n  } finally {\n    try {\n      if (subscriber !== null) {\n        subscriber.onWorkStarted(interactions, threadID);\n      }\n    } finally {\n      try {\n        returnValue = callback();\n      } finally {\n        exports.__interactionsRef.current = prevInteractions;\n\n        try {\n          if (subscriber !== null) {\n            subscriber.onWorkStopped(interactions, threadID);\n          }\n        } finally {\n          interaction.__count--; // If no async work was scheduled for this interaction,\n          // Notify subscribers that it's completed.\n\n          if (subscriber !== null && interaction.__count === 0) {\n            subscriber.onInteractionScheduledWorkCompleted(interaction);\n          }\n        }\n      }\n    }\n  }\n\n  return returnValue;\n}\nfunction unstable_wrap(callback) {\n  var threadID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THREAD_ID;\n\n  var wrappedInteractions = exports.__interactionsRef.current;\n  var subscriber = exports.__subscriberRef.current;\n\n  if (subscriber !== null) {\n    subscriber.onWorkScheduled(wrappedInteractions, threadID);\n  } // Update the pending async work count for the current interactions.\n  // Update after calling subscribers in case of error.\n\n\n  wrappedInteractions.forEach(function (interaction) {\n    interaction.__count++;\n  });\n  var hasRun = false;\n\n  function wrapped() {\n    var prevInteractions = exports.__interactionsRef.current;\n    exports.__interactionsRef.current = wrappedInteractions;\n    subscriber = exports.__subscriberRef.current;\n\n    try {\n      var returnValue;\n\n      try {\n        if (subscriber !== null) {\n          subscriber.onWorkStarted(wrappedInteractions, threadID);\n        }\n      } finally {\n        try {\n          returnValue = callback.apply(undefined, arguments);\n        } finally {\n          exports.__interactionsRef.current = prevInteractions;\n\n          if (subscriber !== null) {\n            subscriber.onWorkStopped(wrappedInteractions, threadID);\n          }\n        }\n      }\n\n      return returnValue;\n    } finally {\n      if (!hasRun) {\n        // We only expect a wrapped function to be executed once,\n        // But in the event that it's executed more than once–\n        // Only decrement the outstanding interaction counts once.\n        hasRun = true; // Update pending async counts for all wrapped interactions.\n        // If this was the last scheduled async work for any of them,\n        // Mark them as completed.\n\n        wrappedInteractions.forEach(function (interaction) {\n          interaction.__count--;\n\n          if (subscriber !== null && interaction.__count === 0) {\n            subscriber.onInteractionScheduledWorkCompleted(interaction);\n          }\n        });\n      }\n    }\n  }\n\n  wrapped.cancel = function cancel() {\n    subscriber = exports.__subscriberRef.current;\n\n    try {\n      if (subscriber !== null) {\n        subscriber.onWorkCanceled(wrappedInteractions, threadID);\n      }\n    } finally {\n      // Update pending async counts for all wrapped interactions.\n      // If this was the last scheduled async work for any of them,\n      // Mark them as completed.\n      wrappedInteractions.forEach(function (interaction) {\n        interaction.__count--;\n\n        if (subscriber && interaction.__count === 0) {\n          subscriber.onInteractionScheduledWorkCompleted(interaction);\n        }\n      });\n    }\n  };\n\n  return wrapped;\n}\n\nvar subscribers = null;\n\n{\n  subscribers = new Set();\n}\n\nfunction unstable_subscribe(subscriber) {\n  {\n    subscribers.add(subscriber);\n\n    if (subscribers.size === 1) {\n      exports.__subscriberRef.current = {\n        onInteractionScheduledWorkCompleted: onInteractionScheduledWorkCompleted,\n        onInteractionTraced: onInteractionTraced,\n        onWorkCanceled: onWorkCanceled,\n        onWorkScheduled: onWorkScheduled,\n        onWorkStarted: onWorkStarted,\n        onWorkStopped: onWorkStopped\n      };\n    }\n  }\n}\nfunction unstable_unsubscribe(subscriber) {\n  {\n    subscribers.delete(subscriber);\n\n    if (subscribers.size === 0) {\n      exports.__subscriberRef.current = null;\n    }\n  }\n}\n\nfunction onInteractionTraced(interaction) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onInteractionTraced(interaction);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onInteractionScheduledWorkCompleted(interaction) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onInteractionScheduledWorkCompleted(interaction);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onWorkScheduled(interactions, threadID) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onWorkScheduled(interactions, threadID);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onWorkStarted(interactions, threadID) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onWorkStarted(interactions, threadID);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onWorkStopped(interactions, threadID) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onWorkStopped(interactions, threadID);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nfunction onWorkCanceled(interactions, threadID) {\n  var didCatchError = false;\n  var caughtError = null;\n  subscribers.forEach(function (subscriber) {\n    try {\n      subscriber.onWorkCanceled(interactions, threadID);\n    } catch (error) {\n      if (!didCatchError) {\n        didCatchError = true;\n        caughtError = error;\n      }\n    }\n  });\n\n  if (didCatchError) {\n    throw caughtError;\n  }\n}\n\nexports.unstable_clear = unstable_clear;\nexports.unstable_getCurrent = unstable_getCurrent;\nexports.unstable_getThreadID = unstable_getThreadID;\nexports.unstable_subscribe = unstable_subscribe;\nexports.unstable_trace = unstable_trace;\nexports.unstable_unsubscribe = unstable_unsubscribe;\nexports.unstable_wrap = unstable_wrap;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/scheduler/cjs/scheduler-tracing.development.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/scheduler/cjs/scheduler.development.js":
+/*!*************************************************************************!*\
+  !*** ./jaas-client/node_modules/scheduler/cjs/scheduler.development.js ***!
+  \*************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/** @license React v0.19.1\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar enableSchedulerDebugging = false;\nvar enableProfiling = true;\n\nvar requestHostCallback;\nvar requestHostTimeout;\nvar cancelHostTimeout;\nvar shouldYieldToHost;\nvar requestPaint;\n\nif ( // If Scheduler runs in a non-DOM environment, it falls back to a naive\n// implementation using setTimeout.\ntypeof window === 'undefined' || // Check if MessageChannel is supported, too.\ntypeof MessageChannel !== 'function') {\n  // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore,\n  // fallback to a naive implementation.\n  var _callback = null;\n  var _timeoutID = null;\n\n  var _flushCallback = function () {\n    if (_callback !== null) {\n      try {\n        var currentTime = exports.unstable_now();\n        var hasRemainingTime = true;\n\n        _callback(hasRemainingTime, currentTime);\n\n        _callback = null;\n      } catch (e) {\n        setTimeout(_flushCallback, 0);\n        throw e;\n      }\n    }\n  };\n\n  var initialTime = Date.now();\n\n  exports.unstable_now = function () {\n    return Date.now() - initialTime;\n  };\n\n  requestHostCallback = function (cb) {\n    if (_callback !== null) {\n      // Protect against re-entrancy.\n      setTimeout(requestHostCallback, 0, cb);\n    } else {\n      _callback = cb;\n      setTimeout(_flushCallback, 0);\n    }\n  };\n\n  requestHostTimeout = function (cb, ms) {\n    _timeoutID = setTimeout(cb, ms);\n  };\n\n  cancelHostTimeout = function () {\n    clearTimeout(_timeoutID);\n  };\n\n  shouldYieldToHost = function () {\n    return false;\n  };\n\n  requestPaint = exports.unstable_forceFrameRate = function () {};\n} else {\n  // Capture local references to native APIs, in case a polyfill overrides them.\n  var performance = window.performance;\n  var _Date = window.Date;\n  var _setTimeout = window.setTimeout;\n  var _clearTimeout = window.clearTimeout;\n\n  if (typeof console !== 'undefined') {\n    // TODO: Scheduler no longer requires these methods to be polyfilled. But\n    // maybe we want to continue warning if they don't exist, to preserve the\n    // option to rely on it in the future?\n    var requestAnimationFrame = window.requestAnimationFrame;\n    var cancelAnimationFrame = window.cancelAnimationFrame; // TODO: Remove fb.me link\n\n    if (typeof requestAnimationFrame !== 'function') {\n      // Using console['error'] to evade Babel and ESLint\n      console['error'](\"This browser doesn't support requestAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n    }\n\n    if (typeof cancelAnimationFrame !== 'function') {\n      // Using console['error'] to evade Babel and ESLint\n      console['error'](\"This browser doesn't support cancelAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n    }\n  }\n\n  if (typeof performance === 'object' && typeof performance.now === 'function') {\n    exports.unstable_now = function () {\n      return performance.now();\n    };\n  } else {\n    var _initialTime = _Date.now();\n\n    exports.unstable_now = function () {\n      return _Date.now() - _initialTime;\n    };\n  }\n\n  var isMessageLoopRunning = false;\n  var scheduledHostCallback = null;\n  var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n  // thread, like user events. By default, it yields multiple times per frame.\n  // It does not attempt to align with frame boundaries, since most tasks don't\n  // need to be frame aligned; for those that do, use requestAnimationFrame.\n\n  var yieldInterval = 5;\n  var deadline = 0; // TODO: Make this configurable\n\n  {\n    // `isInputPending` is not available. Since we have no way of knowing if\n    // there's pending input, always yield at the end of the frame.\n    shouldYieldToHost = function () {\n      return exports.unstable_now() >= deadline;\n    }; // Since we yield every frame regardless, `requestPaint` has no effect.\n\n\n    requestPaint = function () {};\n  }\n\n  exports.unstable_forceFrameRate = function (fps) {\n    if (fps < 0 || fps > 125) {\n      // Using console['error'] to evade Babel and ESLint\n      console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing framerates higher than 125 fps is not unsupported');\n      return;\n    }\n\n    if (fps > 0) {\n      yieldInterval = Math.floor(1000 / fps);\n    } else {\n      // reset the framerate\n      yieldInterval = 5;\n    }\n  };\n\n  var performWorkUntilDeadline = function () {\n    if (scheduledHostCallback !== null) {\n      var currentTime = exports.unstable_now(); // Yield after `yieldInterval` ms, regardless of where we are in the vsync\n      // cycle. This means there's always time remaining at the beginning of\n      // the message event.\n\n      deadline = currentTime + yieldInterval;\n      var hasTimeRemaining = true;\n\n      try {\n        var hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n\n        if (!hasMoreWork) {\n          isMessageLoopRunning = false;\n          scheduledHostCallback = null;\n        } else {\n          // If there's more work, schedule the next message event at the end\n          // of the preceding one.\n          port.postMessage(null);\n        }\n      } catch (error) {\n        // If a scheduler task throws, exit the current browser task so the\n        // error can be observed.\n        port.postMessage(null);\n        throw error;\n      }\n    } else {\n      isMessageLoopRunning = false;\n    } // Yielding to the browser will give it a chance to paint, so we can\n  };\n\n  var channel = new MessageChannel();\n  var port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n\n  requestHostCallback = function (callback) {\n    scheduledHostCallback = callback;\n\n    if (!isMessageLoopRunning) {\n      isMessageLoopRunning = true;\n      port.postMessage(null);\n    }\n  };\n\n  requestHostTimeout = function (callback, ms) {\n    taskTimeoutID = _setTimeout(function () {\n      callback(exports.unstable_now());\n    }, ms);\n  };\n\n  cancelHostTimeout = function () {\n    _clearTimeout(taskTimeoutID);\n\n    taskTimeoutID = -1;\n  };\n}\n\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  siftUp(heap, node, index);\n}\nfunction peek(heap) {\n  var first = heap[0];\n  return first === undefined ? null : first;\n}\nfunction pop(heap) {\n  var first = heap[0];\n\n  if (first !== undefined) {\n    var last = heap.pop();\n\n    if (last !== first) {\n      heap[0] = last;\n      siftDown(heap, last, 0);\n    }\n\n    return first;\n  } else {\n    return null;\n  }\n}\n\nfunction siftUp(heap, node, i) {\n  var index = i;\n\n  while (true) {\n    var parentIndex = index - 1 >>> 1;\n    var parent = heap[parentIndex];\n\n    if (parent !== undefined && compare(parent, node) > 0) {\n      // The parent is larger. Swap positions.\n      heap[parentIndex] = node;\n      heap[index] = parent;\n      index = parentIndex;\n    } else {\n      // The parent is smaller. Exit.\n      return;\n    }\n  }\n}\n\nfunction siftDown(heap, node, i) {\n  var index = i;\n  var length = heap.length;\n\n  while (index < length) {\n    var leftIndex = (index + 1) * 2 - 1;\n    var left = heap[leftIndex];\n    var rightIndex = leftIndex + 1;\n    var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n    if (left !== undefined && compare(left, node) < 0) {\n      if (right !== undefined && compare(right, left) < 0) {\n        heap[index] = right;\n        heap[rightIndex] = node;\n        index = rightIndex;\n      } else {\n        heap[index] = left;\n        heap[leftIndex] = node;\n        index = leftIndex;\n      }\n    } else if (right !== undefined && compare(right, node) < 0) {\n      heap[index] = right;\n      heap[rightIndex] = node;\n      index = rightIndex;\n    } else {\n      // Neither child is smaller. Exit.\n      return;\n    }\n  }\n}\n\nfunction compare(a, b) {\n  // Compare sort index first, then task id.\n  var diff = a.sortIndex - b.sortIndex;\n  return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar NoPriority = 0;\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nvar runIdCounter = 0;\nvar mainThreadIdCounter = 0;\nvar profilingStateSize = 4;\nvar sharedProfilingBuffer =  // $FlowFixMe Flow doesn't know about SharedArrayBuffer\ntypeof SharedArrayBuffer === 'function' ? new SharedArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : // $FlowFixMe Flow doesn't know about ArrayBuffer\ntypeof ArrayBuffer === 'function' ? new ArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : null // Don't crash the init path on IE9\n;\nvar profilingState =  sharedProfilingBuffer !== null ? new Int32Array(sharedProfilingBuffer) : []; // We can't read this but it helps save bytes for null checks\n\nvar PRIORITY = 0;\nvar CURRENT_TASK_ID = 1;\nvar CURRENT_RUN_ID = 2;\nvar QUEUE_SIZE = 3;\n\n{\n  profilingState[PRIORITY] = NoPriority; // This is maintained with a counter, because the size of the priority queue\n  // array might include canceled tasks.\n\n  profilingState[QUEUE_SIZE] = 0;\n  profilingState[CURRENT_TASK_ID] = 0;\n} // Bytes per element is 4\n\n\nvar INITIAL_EVENT_LOG_SIZE = 131072;\nvar MAX_EVENT_LOG_SIZE = 524288; // Equivalent to 2 megabytes\n\nvar eventLogSize = 0;\nvar eventLogBuffer = null;\nvar eventLog = null;\nvar eventLogIndex = 0;\nvar TaskStartEvent = 1;\nvar TaskCompleteEvent = 2;\nvar TaskErrorEvent = 3;\nvar TaskCancelEvent = 4;\nvar TaskRunEvent = 5;\nvar TaskYieldEvent = 6;\nvar SchedulerSuspendEvent = 7;\nvar SchedulerResumeEvent = 8;\n\nfunction logEvent(entries) {\n  if (eventLog !== null) {\n    var offset = eventLogIndex;\n    eventLogIndex += entries.length;\n\n    if (eventLogIndex + 1 > eventLogSize) {\n      eventLogSize *= 2;\n\n      if (eventLogSize > MAX_EVENT_LOG_SIZE) {\n        // Using console['error'] to evade Babel and ESLint\n        console['error'](\"Scheduler Profiling: Event log exceeded maximum size. Don't \" + 'forget to call `stopLoggingProfilingEvents()`.');\n        stopLoggingProfilingEvents();\n        return;\n      }\n\n      var newEventLog = new Int32Array(eventLogSize * 4);\n      newEventLog.set(eventLog);\n      eventLogBuffer = newEventLog.buffer;\n      eventLog = newEventLog;\n    }\n\n    eventLog.set(entries, offset);\n  }\n}\n\nfunction startLoggingProfilingEvents() {\n  eventLogSize = INITIAL_EVENT_LOG_SIZE;\n  eventLogBuffer = new ArrayBuffer(eventLogSize * 4);\n  eventLog = new Int32Array(eventLogBuffer);\n  eventLogIndex = 0;\n}\nfunction stopLoggingProfilingEvents() {\n  var buffer = eventLogBuffer;\n  eventLogSize = 0;\n  eventLogBuffer = null;\n  eventLog = null;\n  eventLogIndex = 0;\n  return buffer;\n}\nfunction markTaskStart(task, ms) {\n  {\n    profilingState[QUEUE_SIZE]++;\n\n    if (eventLog !== null) {\n      // performance.now returns a float, representing milliseconds. When the\n      // event is logged, it's coerced to an int. Convert to microseconds to\n      // maintain extra degrees of precision.\n      logEvent([TaskStartEvent, ms * 1000, task.id, task.priorityLevel]);\n    }\n  }\n}\nfunction markTaskCompleted(task, ms) {\n  {\n    profilingState[PRIORITY] = NoPriority;\n    profilingState[CURRENT_TASK_ID] = 0;\n    profilingState[QUEUE_SIZE]--;\n\n    if (eventLog !== null) {\n      logEvent([TaskCompleteEvent, ms * 1000, task.id]);\n    }\n  }\n}\nfunction markTaskCanceled(task, ms) {\n  {\n    profilingState[QUEUE_SIZE]--;\n\n    if (eventLog !== null) {\n      logEvent([TaskCancelEvent, ms * 1000, task.id]);\n    }\n  }\n}\nfunction markTaskErrored(task, ms) {\n  {\n    profilingState[PRIORITY] = NoPriority;\n    profilingState[CURRENT_TASK_ID] = 0;\n    profilingState[QUEUE_SIZE]--;\n\n    if (eventLog !== null) {\n      logEvent([TaskErrorEvent, ms * 1000, task.id]);\n    }\n  }\n}\nfunction markTaskRun(task, ms) {\n  {\n    runIdCounter++;\n    profilingState[PRIORITY] = task.priorityLevel;\n    profilingState[CURRENT_TASK_ID] = task.id;\n    profilingState[CURRENT_RUN_ID] = runIdCounter;\n\n    if (eventLog !== null) {\n      logEvent([TaskRunEvent, ms * 1000, task.id, runIdCounter]);\n    }\n  }\n}\nfunction markTaskYield(task, ms) {\n  {\n    profilingState[PRIORITY] = NoPriority;\n    profilingState[CURRENT_TASK_ID] = 0;\n    profilingState[CURRENT_RUN_ID] = 0;\n\n    if (eventLog !== null) {\n      logEvent([TaskYieldEvent, ms * 1000, task.id, runIdCounter]);\n    }\n  }\n}\nfunction markSchedulerSuspended(ms) {\n  {\n    mainThreadIdCounter++;\n\n    if (eventLog !== null) {\n      logEvent([SchedulerSuspendEvent, ms * 1000, mainThreadIdCounter]);\n    }\n  }\n}\nfunction markSchedulerUnsuspended(ms) {\n  {\n    if (eventLog !== null) {\n      logEvent([SchedulerResumeEvent, ms * 1000, mainThreadIdCounter]);\n    }\n  }\n}\n\n/* eslint-disable no-var */\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\nvar maxSigned31BitInt = 1073741823; // Times out immediately\n\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\nvar USER_BLOCKING_PRIORITY = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\nvar IDLE_PRIORITY = maxSigned31BitInt; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrancy.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false;\n\nfunction advanceTimers(currentTime) {\n  // Check for tasks that are no longer delayed and add them to the queue.\n  var timer = peek(timerQueue);\n\n  while (timer !== null) {\n    if (timer.callback === null) {\n      // Timer was cancelled.\n      pop(timerQueue);\n    } else if (timer.startTime <= currentTime) {\n      // Timer fired. Transfer to the task queue.\n      pop(timerQueue);\n      timer.sortIndex = timer.expirationTime;\n      push(taskQueue, timer);\n\n      {\n        markTaskStart(timer, currentTime);\n        timer.isQueued = true;\n      }\n    } else {\n      // Remaining timers are pending.\n      return;\n    }\n\n    timer = peek(timerQueue);\n  }\n}\n\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = false;\n  advanceTimers(currentTime);\n\n  if (!isHostCallbackScheduled) {\n    if (peek(taskQueue) !== null) {\n      isHostCallbackScheduled = true;\n      requestHostCallback(flushWork);\n    } else {\n      var firstTimer = peek(timerQueue);\n\n      if (firstTimer !== null) {\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n      }\n    }\n  }\n}\n\nfunction flushWork(hasTimeRemaining, initialTime) {\n  {\n    markSchedulerUnsuspended(initialTime);\n  } // We'll need a host callback the next time work is scheduled.\n\n\n  isHostCallbackScheduled = false;\n\n  if (isHostTimeoutScheduled) {\n    // We scheduled a timeout but it's no longer needed. Cancel it.\n    isHostTimeoutScheduled = false;\n    cancelHostTimeout();\n  }\n\n  isPerformingWork = true;\n  var previousPriorityLevel = currentPriorityLevel;\n\n  try {\n    if (enableProfiling) {\n      try {\n        return workLoop(hasTimeRemaining, initialTime);\n      } catch (error) {\n        if (currentTask !== null) {\n          var currentTime = exports.unstable_now();\n          markTaskErrored(currentTask, currentTime);\n          currentTask.isQueued = false;\n        }\n\n        throw error;\n      }\n    } else {\n      // No catch in prod codepath.\n      return workLoop(hasTimeRemaining, initialTime);\n    }\n  } finally {\n    currentTask = null;\n    currentPriorityLevel = previousPriorityLevel;\n    isPerformingWork = false;\n\n    {\n      var _currentTime = exports.unstable_now();\n\n      markSchedulerSuspended(_currentTime);\n    }\n  }\n}\n\nfunction workLoop(hasTimeRemaining, initialTime) {\n  var currentTime = initialTime;\n  advanceTimers(currentTime);\n  currentTask = peek(taskQueue);\n\n  while (currentTask !== null && !(enableSchedulerDebugging )) {\n    if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n      // This currentTask hasn't expired, and we've reached the deadline.\n      break;\n    }\n\n    var callback = currentTask.callback;\n\n    if (callback !== null) {\n      currentTask.callback = null;\n      currentPriorityLevel = currentTask.priorityLevel;\n      var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n      markTaskRun(currentTask, currentTime);\n      var continuationCallback = callback(didUserCallbackTimeout);\n      currentTime = exports.unstable_now();\n\n      if (typeof continuationCallback === 'function') {\n        currentTask.callback = continuationCallback;\n        markTaskYield(currentTask, currentTime);\n      } else {\n        {\n          markTaskCompleted(currentTask, currentTime);\n          currentTask.isQueued = false;\n        }\n\n        if (currentTask === peek(taskQueue)) {\n          pop(taskQueue);\n        }\n      }\n\n      advanceTimers(currentTime);\n    } else {\n      pop(taskQueue);\n    }\n\n    currentTask = peek(taskQueue);\n  } // Return whether there's additional work\n\n\n  if (currentTask !== null) {\n    return true;\n  } else {\n    var firstTimer = peek(timerQueue);\n\n    if (firstTimer !== null) {\n      requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n\n    return false;\n  }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case ImmediatePriority:\n    case UserBlockingPriority:\n    case NormalPriority:\n    case LowPriority:\n    case IdlePriority:\n      break;\n\n    default:\n      priorityLevel = NormalPriority;\n  }\n\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n}\n\nfunction unstable_next(eventHandler) {\n  var priorityLevel;\n\n  switch (currentPriorityLevel) {\n    case ImmediatePriority:\n    case UserBlockingPriority:\n    case NormalPriority:\n      // Shift down to normal priority\n      priorityLevel = NormalPriority;\n      break;\n\n    default:\n      // Anything lower than normal priority should remain at the current level.\n      priorityLevel = currentPriorityLevel;\n      break;\n  }\n\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n}\n\nfunction unstable_wrapCallback(callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    // This is a fork of runWithPriority, inlined for performance.\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n}\n\nfunction timeoutForPriorityLevel(priorityLevel) {\n  switch (priorityLevel) {\n    case ImmediatePriority:\n      return IMMEDIATE_PRIORITY_TIMEOUT;\n\n    case UserBlockingPriority:\n      return USER_BLOCKING_PRIORITY;\n\n    case IdlePriority:\n      return IDLE_PRIORITY;\n\n    case LowPriority:\n      return LOW_PRIORITY_TIMEOUT;\n\n    case NormalPriority:\n    default:\n      return NORMAL_PRIORITY_TIMEOUT;\n  }\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n  var currentTime = exports.unstable_now();\n  var startTime;\n  var timeout;\n\n  if (typeof options === 'object' && options !== null) {\n    var delay = options.delay;\n\n    if (typeof delay === 'number' && delay > 0) {\n      startTime = currentTime + delay;\n    } else {\n      startTime = currentTime;\n    }\n\n    timeout = typeof options.timeout === 'number' ? options.timeout : timeoutForPriorityLevel(priorityLevel);\n  } else {\n    timeout = timeoutForPriorityLevel(priorityLevel);\n    startTime = currentTime;\n  }\n\n  var expirationTime = startTime + timeout;\n  var newTask = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: startTime,\n    expirationTime: expirationTime,\n    sortIndex: -1\n  };\n\n  {\n    newTask.isQueued = false;\n  }\n\n  if (startTime > currentTime) {\n    // This is a delayed task.\n    newTask.sortIndex = startTime;\n    push(timerQueue, newTask);\n\n    if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n      // All tasks are delayed, and this is the task with the earliest delay.\n      if (isHostTimeoutScheduled) {\n        // Cancel an existing timeout.\n        cancelHostTimeout();\n      } else {\n        isHostTimeoutScheduled = true;\n      } // Schedule a timeout.\n\n\n      requestHostTimeout(handleTimeout, startTime - currentTime);\n    }\n  } else {\n    newTask.sortIndex = expirationTime;\n    push(taskQueue, newTask);\n\n    {\n      markTaskStart(newTask, currentTime);\n      newTask.isQueued = true;\n    } // Schedule a host callback, if needed. If we're already performing work,\n    // wait until the next time we yield.\n\n\n    if (!isHostCallbackScheduled && !isPerformingWork) {\n      isHostCallbackScheduled = true;\n      requestHostCallback(flushWork);\n    }\n  }\n\n  return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n  if (!isHostCallbackScheduled && !isPerformingWork) {\n    isHostCallbackScheduled = true;\n    requestHostCallback(flushWork);\n  }\n}\n\nfunction unstable_getFirstCallbackNode() {\n  return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n  {\n    if (task.isQueued) {\n      var currentTime = exports.unstable_now();\n      markTaskCanceled(task, currentTime);\n      task.isQueued = false;\n    }\n  } // Null out the callback to indicate the task has been canceled. (Can't\n  // remove from the queue because you can't remove arbitrary nodes from an\n  // array based heap, only the first one.)\n\n\n  task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n  return currentPriorityLevel;\n}\n\nfunction unstable_shouldYield() {\n  var currentTime = exports.unstable_now();\n  advanceTimers(currentTime);\n  var firstTask = peek(taskQueue);\n  return firstTask !== currentTask && currentTask !== null && firstTask !== null && firstTask.callback !== null && firstTask.startTime <= currentTime && firstTask.expirationTime < currentTask.expirationTime || shouldYieldToHost();\n}\n\nvar unstable_requestPaint = requestPaint;\nvar unstable_Profiling =  {\n  startLoggingProfilingEvents: startLoggingProfilingEvents,\n  stopLoggingProfilingEvents: stopLoggingProfilingEvents,\n  sharedProfilingBuffer: sharedProfilingBuffer\n} ;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = unstable_requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = unstable_shouldYield;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n  })();\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/scheduler/cjs/scheduler.development.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/scheduler/index.js":
+/*!*****************************************************!*\
+  !*** ./jaas-client/node_modules/scheduler/index.js ***!
+  \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"./jaas-client/node_modules/scheduler/cjs/scheduler.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/scheduler/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/scheduler/tracing.js":
+/*!*******************************************************!*\
+  !*** ./jaas-client/node_modules/scheduler/tracing.js ***!
+  \*******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/scheduler-tracing.development.js */ \"./jaas-client/node_modules/scheduler/cjs/scheduler-tracing.development.js\");\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/scheduler/tracing.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-client/lib/index.js":
+/*!****************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-client/lib/index.js ***!
+  \****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\n/**\n * Module dependencies.\n */\n\nvar url = __webpack_require__(/*! ./url */ \"./jaas-client/node_modules/socket.io-client/lib/url.js\");\nvar parser = __webpack_require__(/*! socket.io-parser */ \"./jaas-client/node_modules/socket.io-parser/index.js\");\nvar Manager = __webpack_require__(/*! ./manager */ \"./jaas-client/node_modules/socket.io-client/lib/manager.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = __webpack_require__(/*! ./manager */ \"./jaas-client/node_modules/socket.io-client/lib/manager.js\");\nexports.Socket = __webpack_require__(/*! ./socket */ \"./jaas-client/node_modules/socket.io-client/lib/socket.js\");\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-client/lib/manager.js":
+/*!******************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-client/lib/manager.js ***!
+  \******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\n/**\n * Module dependencies.\n */\n\nvar eio = __webpack_require__(/*! engine.io-client */ \"./jaas-client/node_modules/engine.io-client/lib/index.js\");\nvar Socket = __webpack_require__(/*! ./socket */ \"./jaas-client/node_modules/socket.io-client/lib/socket.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js\");\nvar parser = __webpack_require__(/*! socket.io-parser */ \"./jaas-client/node_modules/socket.io-parser/index.js\");\nvar on = __webpack_require__(/*! ./on */ \"./jaas-client/node_modules/socket.io-client/lib/on.js\");\nvar bind = __webpack_require__(/*! component-bind */ \"./jaas-client/node_modules/component-bind/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('socket.io-client:manager');\nvar indexOf = __webpack_require__(/*! indexof */ \"./jaas-client/node_modules/indexof/index.js\");\nvar Backoff = __webpack_require__(/*! backo2 */ \"./jaas-client/node_modules/backo2/index.js\");\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/manager.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-client/lib/on.js":
+/*!*************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-client/lib/on.js ***!
+  \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/on.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-client/lib/socket.js":
+/*!*****************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-client/lib/socket.js ***!
+  \*****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\n/**\n * Module dependencies.\n */\n\nvar parser = __webpack_require__(/*! socket.io-parser */ \"./jaas-client/node_modules/socket.io-parser/index.js\");\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js\");\nvar toArray = __webpack_require__(/*! to-array */ \"./jaas-client/node_modules/to-array/index.js\");\nvar on = __webpack_require__(/*! ./on */ \"./jaas-client/node_modules/socket.io-client/lib/on.js\");\nvar bind = __webpack_require__(/*! component-bind */ \"./jaas-client/node_modules/component-bind/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('socket.io-client:socket');\nvar parseqs = __webpack_require__(/*! parseqs */ \"./jaas-client/node_modules/parseqs/index.js\");\nvar hasBin = __webpack_require__(/*! has-binary2 */ \"./jaas-client/node_modules/has-binary2/index.js\");\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/socket.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-client/lib/url.js":
+/*!**************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-client/lib/url.js ***!
+  \**************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\n/**\n * Module dependencies.\n */\n\nvar parseuri = __webpack_require__(/*! parseuri */ \"./jaas-client/node_modules/parseuri/index.js\");\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/debug/src/browser.js\")('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/lib/url.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js":
+/*!*******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js ***!
+  \*******************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (true) {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-client/node_modules/component-emitter/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-parser/binary.js":
+/*!*************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-parser/binary.js ***!
+  \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = __webpack_require__(/*! isarray */ \"./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js\");\nvar isBuf = __webpack_require__(/*! ./is-buffer */ \"./jaas-client/node_modules/socket.io-parser/is-buffer.js\");\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/binary.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-parser/index.js":
+/*!************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-parser/index.js ***!
+  \************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\n/**\n * Module dependencies.\n */\n\nvar debug = __webpack_require__(/*! debug */ \"./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js\")('socket.io-parser');\nvar Emitter = __webpack_require__(/*! component-emitter */ \"./jaas-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js\");\nvar binary = __webpack_require__(/*! ./binary */ \"./jaas-client/node_modules/socket.io-parser/binary.js\");\nvar isArray = __webpack_require__(/*! isarray */ \"./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js\");\nvar isBuf = __webpack_require__(/*! ./is-buffer */ \"./jaas-client/node_modules/socket.io-parser/is-buffer.js\");\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-parser/is-buffer.js":
+/*!****************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-parser/is-buffer.js ***!
+  \****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/* WEBPACK VAR INJECTION */(function(Buffer) {\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/is-buffer.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js":
+/*!*******************************************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js ***!
+  \*******************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (true) {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js":
+/*!*************************************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js ***!
+  \*************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/* WEBPACK VAR INJECTION */(function(process) {/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = __webpack_require__(/*! ./debug */ \"./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js\");\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../../node_modules/process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js":
+/*!***********************************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js ***!
+  \***********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = __webpack_require__(/*! ms */ \"./jaas-client/node_modules/socket.io-parser/node_modules/ms/index.js\");\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n\n  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  if (name[name.length - 1] === '*') {\n    return true;\n  }\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js":
+/*!*********************************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js ***!
+  \*********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/isarray/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/socket.io-parser/node_modules/ms/index.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/socket.io-parser/node_modules/ms/index.js ***!
+  \****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/socket.io-parser/node_modules/ms/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/soundmanager2/script/soundmanager2.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/soundmanager2/script/soundmanager2.js ***!
+  \************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_RESULT__;/** @license\r\n *\r\n * SoundManager 2: JavaScript Sound for the Web\r\n * ----------------------------------------------\r\n * http://schillmania.com/projects/soundmanager2/\r\n *\r\n * Copyright (c) 2007, Scott Schiller. All rights reserved.\r\n * Code provided under the BSD License:\r\n * http://schillmania.com/projects/soundmanager2/license.txt\r\n *\r\n * V2.97a.20170601\r\n */\r\n\r\n/**\r\n * About this file\r\n * -------------------------------------------------------------------------------------\r\n * This is the fully-commented source version of the SoundManager 2 API,\r\n * recommended for use during development and testing.\r\n *\r\n * See soundmanager2-nodebug-jsmin.js for an optimized build (~11KB with gzip.)\r\n * http://schillmania.com/projects/soundmanager2/doc/getstarted/#basic-inclusion\r\n * Alternately, serve this file with gzip for 75% compression savings (~30KB over HTTP.)\r\n *\r\n * You may notice <d> and </d> comments in this source; these are delimiters for\r\n * debug blocks which are removed in the -nodebug builds, further optimizing code size.\r\n *\r\n * Also, as you may note: Whoa, reliable cross-platform/device audio support is hard! ;)\r\n */\r\n\r\n(function SM2(window, _undefined) {\r\n\r\n/* global Audio, document, window, navigator, define, module, SM2_DEFER, opera, setTimeout, setInterval, clearTimeout, sm2Debugger */\r\n\r\n'use strict';\r\n\r\nif (!window || !window.document) {\r\n\r\n  // Don't cross the [environment] streams. SM2 expects to be running in a browser, not under node.js etc.\r\n  // Additionally, if a browser somehow manages to fail this test, as Egon said: \"It would be bad.\"\r\n\r\n  throw new Error('SoundManager requires a browser with window and document objects.');\r\n\r\n}\r\n\r\nvar soundManager = null;\r\n\r\n/**\r\n * The SoundManager constructor.\r\n *\r\n * @constructor\r\n * @param {string} smURL Optional: Path to SWF files\r\n * @param {string} smID Optional: The ID to use for the SWF container element\r\n * @this {SoundManager}\r\n * @return {SoundManager} The new SoundManager instance\r\n */\r\n\r\nfunction SoundManager(smURL, smID) {\r\n\r\n  /**\r\n   * soundManager configuration options list\r\n   * defines top-level configuration properties to be applied to the soundManager instance (eg. soundManager.flashVersion)\r\n   * to set these properties, use the setup() method - eg., soundManager.setup({url: '/swf/', flashVersion: 9})\r\n   */\r\n\r\n  this.setupOptions = {\r\n\r\n    url: (smURL || null),             // path (directory) where SoundManager 2 SWFs exist, eg., /path/to/swfs/\r\n    flashVersion: 8,                  // flash build to use (8 or 9.) Some API features require 9.\r\n    debugMode: true,                  // enable debugging output (console.log() with HTML fallback)\r\n    debugFlash: false,                // enable debugging output inside SWF, troubleshoot Flash/browser issues\r\n    useConsole: true,                 // use console.log() if available (otherwise, writes to #soundmanager-debug element)\r\n    consoleOnly: true,                // if console is being used, do not create/write to #soundmanager-debug\r\n    waitForWindowLoad: false,         // force SM2 to wait for window.onload() before trying to call soundManager.onload()\r\n    bgColor: '#ffffff',               // SWF background color. N/A when wmode = 'transparent'\r\n    useHighPerformance: false,        // position:fixed flash movie can help increase js/flash speed, minimize lag\r\n    flashPollingInterval: null,       // msec affecting whileplaying/loading callback frequency. If null, default of 50 msec is used.\r\n    html5PollingInterval: null,       // msec affecting whileplaying() for HTML5 audio, excluding mobile devices. If null, native HTML5 update events are used.\r\n    flashLoadTimeout: 1000,           // msec to wait for flash movie to load before failing (0 = infinity)\r\n    wmode: null,                      // flash rendering mode - null, 'transparent', or 'opaque' (last two allow z-index to work)\r\n    allowScriptAccess: 'always',      // for scripting the SWF (object/embed property), 'always' or 'sameDomain'\r\n    useFlashBlock: false,             // *requires flashblock.css, see demos* - allow recovery from flash blockers. Wait indefinitely and apply timeout CSS to SWF, if applicable.\r\n    useHTML5Audio: true,              // use HTML5 Audio() where API is supported (most Safari, Chrome versions), Firefox (MP3/MP4 support varies.) Ideally, transparent vs. Flash API where possible.\r\n    forceUseGlobalHTML5Audio: false,  // if true, a single Audio() object is used for all sounds - and only one can play at a time.\r\n    ignoreMobileRestrictions: false,  // if true, SM2 will not apply global HTML5 audio rules to mobile UAs. iOS > 7 and WebViews may allow multiple Audio() instances.\r\n    html5Test: /^(probably|maybe)$/i, // HTML5 Audio() format support test. Use /^probably$/i; if you want to be more conservative.\r\n    preferFlash: false,               // overrides useHTML5audio, will use Flash for MP3/MP4/AAC if present. Potential option if HTML5 playback with these formats is quirky.\r\n    noSWFCache: false,                // if true, appends ?ts={date} to break aggressive SWF caching.\r\n    idPrefix: 'sound'                 // if an id is not provided to createSound(), this prefix is used for generated IDs - 'sound0', 'sound1' etc.\r\n\r\n  };\r\n\r\n  this.defaultOptions = {\r\n\r\n    /**\r\n     * the default configuration for sound objects made with createSound() and related methods\r\n     * eg., volume, auto-load behaviour and so forth\r\n     */\r\n\r\n    autoLoad: false,        // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can)\r\n    autoPlay: false,        // enable playing of file as soon as possible (much faster if \"stream\" is true)\r\n    from: null,             // position to start playback within a sound (msec), default = beginning\r\n    loops: 1,               // how many times to repeat the sound (position will wrap around to 0, setPosition() will break out of loop when >0)\r\n    onid3: null,            // callback function for \"ID3 data is added/available\"\r\n    onerror: null,          // callback function for \"load failed\" (or, playback/network/decode error under HTML5.)\r\n    onload: null,           // callback function for \"load finished\"\r\n    whileloading: null,     // callback function for \"download progress update\" (X of Y bytes received)\r\n    onplay: null,           // callback for \"play\" start\r\n    onpause: null,          // callback for \"pause\"\r\n    onresume: null,         // callback for \"resume\" (pause toggle)\r\n    whileplaying: null,     // callback during play (position update)\r\n    onposition: null,       // object containing times and function callbacks for positions of interest\r\n    onstop: null,           // callback for \"user stop\"\r\n    onfinish: null,         // callback function for \"sound finished playing\"\r\n    multiShot: true,        // let sounds \"restart\" or layer on top of each other when played multiple times, rather than one-shot/one at a time\r\n    multiShotEvents: false, // fire multiple sound events (currently onfinish() only) when multiShot is enabled\r\n    position: null,         // offset (milliseconds) to seek to within loaded sound data.\r\n    pan: 0,                 // \"pan\" settings, left-to-right, -100 to 100\r\n    playbackRate: 1,        // rate at which to play the sound (HTML5-only)\r\n    stream: true,           // allows playing before entire file has loaded (recommended)\r\n    to: null,               // position to end playback within a sound (msec), default = end\r\n    type: null,             // MIME-like hint for file pattern / canPlay() tests, eg. audio/mp3\r\n    usePolicyFile: false,   // enable crossdomain.xml request for audio on remote domains (for ID3/waveform access)\r\n    volume: 100             // self-explanatory. 0-100, the latter being the max.\r\n\r\n  };\r\n\r\n  this.flash9Options = {\r\n\r\n    /**\r\n     * flash 9-only options,\r\n     * merged into defaultOptions if flash 9 is being used\r\n     */\r\n\r\n    onfailure: null,        // callback function for when playing fails (Flash 9, MovieStar + RTMP-only)\r\n    isMovieStar: null,      // \"MovieStar\" MPEG4 audio mode. Null (default) = auto detect MP4, AAC etc. based on URL. true = force on, ignore URL\r\n    usePeakData: false,     // enable left/right channel peak (level) data\r\n    useWaveformData: false, // enable sound spectrum (raw waveform data) - NOTE: May increase CPU load.\r\n    useEQData: false,       // enable sound EQ (frequency spectrum data) - NOTE: May increase CPU load.\r\n    onbufferchange: null,   // callback for \"isBuffering\" property change\r\n    ondataerror: null       // callback for waveform/eq data access error (flash playing audio in other tabs/domains)\r\n\r\n  };\r\n\r\n  this.movieStarOptions = {\r\n\r\n    /**\r\n     * flash 9.0r115+ MPEG4 audio options,\r\n     * merged into defaultOptions if flash 9+movieStar mode is enabled\r\n     */\r\n\r\n    bufferTime: 3,          // seconds of data to buffer before playback begins (null = flash default of 0.1 seconds - if AAC playback is gappy, try increasing.)\r\n    serverURL: null,        // rtmp: FMS or FMIS server to connect to, required when requesting media via RTMP or one of its variants\r\n    onconnect: null,        // rtmp: callback for connection to flash media server\r\n    duration: null          // rtmp: song duration (msec)\r\n\r\n  };\r\n\r\n  this.audioFormats = {\r\n\r\n    /**\r\n     * determines HTML5 support + flash requirements.\r\n     * if no support (via flash and/or HTML5) for a \"required\" format, SM2 will fail to start.\r\n     * flash fallback is used for MP3 or MP4 if HTML5 can't play it (or if preferFlash = true)\r\n     */\r\n\r\n    mp3: {\r\n      type: ['audio/mpeg; codecs=\"mp3\"', 'audio/mpeg', 'audio/mp3', 'audio/MPA', 'audio/mpa-robust'],\r\n      required: true\r\n    },\r\n\r\n    mp4: {\r\n      related: ['aac', 'm4a', 'm4b'], // additional formats under the MP4 container\r\n      type: ['audio/mp4; codecs=\"mp4a.40.2\"', 'audio/aac', 'audio/x-m4a', 'audio/MP4A-LATM', 'audio/mpeg4-generic'],\r\n      required: false\r\n    },\r\n\r\n    ogg: {\r\n      type: ['audio/ogg; codecs=vorbis'],\r\n      required: false\r\n    },\r\n\r\n    opus: {\r\n      type: ['audio/ogg; codecs=opus', 'audio/opus'],\r\n      required: false\r\n    },\r\n\r\n    wav: {\r\n      type: ['audio/wav; codecs=\"1\"', 'audio/wav', 'audio/wave', 'audio/x-wav'],\r\n      required: false\r\n    },\r\n\r\n    flac: {\r\n      type: ['audio/flac'],\r\n      required: false\r\n    }\r\n\r\n  };\r\n\r\n  // HTML attributes (id + class names) for the SWF container\r\n\r\n  this.movieID = 'sm2-container';\r\n  this.id = (smID || 'sm2movie');\r\n\r\n  this.debugID = 'soundmanager-debug';\r\n  this.debugURLParam = /([#?&])debug=1/i;\r\n\r\n  // dynamic attributes\r\n\r\n  this.versionNumber = 'V2.97a.20170601';\r\n  this.version = null;\r\n  this.movieURL = null;\r\n  this.altURL = null;\r\n  this.swfLoaded = false;\r\n  this.enabled = false;\r\n  this.oMC = null;\r\n  this.sounds = {};\r\n  this.soundIDs = [];\r\n  this.muted = false;\r\n  this.didFlashBlock = false;\r\n  this.filePattern = null;\r\n\r\n  this.filePatterns = {\r\n    flash8: /\\.mp3(\\?.*)?$/i,\r\n    flash9: /\\.mp3(\\?.*)?$/i\r\n  };\r\n\r\n  // support indicators, set at init\r\n\r\n  this.features = {\r\n    buffering: false,\r\n    peakData: false,\r\n    waveformData: false,\r\n    eqData: false,\r\n    movieStar: false\r\n  };\r\n\r\n  // flash sandbox info, used primarily in troubleshooting\r\n\r\n  this.sandbox = {\r\n    // <d>\r\n    type: null,\r\n    types: {\r\n      remote: 'remote (domain-based) rules',\r\n      localWithFile: 'local with file access (no internet access)',\r\n      localWithNetwork: 'local with network (internet access only, no local access)',\r\n      localTrusted: 'local, trusted (local+internet access)'\r\n    },\r\n    description: null,\r\n    noRemote: null,\r\n    noLocal: null\r\n    // </d>\r\n  };\r\n\r\n  /**\r\n   * format support (html5/flash)\r\n   * stores canPlayType() results based on audioFormats.\r\n   * eg. { mp3: boolean, mp4: boolean }\r\n   * treat as read-only.\r\n   */\r\n\r\n  this.html5 = {\r\n    usingFlash: null // set if/when flash fallback is needed\r\n  };\r\n\r\n  // file type support hash\r\n  this.flash = {};\r\n\r\n  // determined at init time\r\n  this.html5Only = false;\r\n\r\n  // used for special cases (eg. iPad/iPhone/palm OS?)\r\n  this.ignoreFlash = false;\r\n\r\n  /**\r\n   * a few private internals (OK, a lot. :D)\r\n   */\r\n\r\n  var SMSound,\r\n  sm2 = this, globalHTML5Audio = null, flash = null, sm = 'soundManager', smc = sm + ': ', h5 = 'HTML5::', id, ua = navigator.userAgent, wl = window.location.href.toString(), doc = document, doNothing, setProperties, init, fV, on_queue = [], debugOpen = true, debugTS, didAppend = false, appendSuccess = false, didInit = false, disabled = false, windowLoaded = false, _wDS, wdCount = 0, initComplete, mixin, assign, extraOptions, addOnEvent, processOnEvents, initUserOnload, delayWaitForEI, waitForEI, rebootIntoHTML5, setVersionInfo, handleFocus, strings, initMovie, domContentLoaded, winOnLoad, didDCLoaded, getDocument, createMovie, catchError, setPolling, initDebug, debugLevels = ['log', 'info', 'warn', 'error'], defaultFlashVersion = 8, disableObject, failSafely, normalizeMovieURL, oRemoved = null, oRemovedHTML = null, str, flashBlockHandler, getSWFCSS, swfCSS, toggleDebug, loopFix, policyFix, complain, idCheck, waitingForEI = false, initPending = false, startTimer, stopTimer, timerExecute, h5TimerCount = 0, h5IntervalTimer = null, parseURL, messages = [],\r\n  canIgnoreFlash, needsFlash = null, featureCheck, html5OK, html5CanPlay, html5ErrorCodes, html5Ext, html5Unload, domContentLoadedIE, testHTML5, event, slice = Array.prototype.slice, useGlobalHTML5Audio = false, lastGlobalHTML5URL, hasFlash, detectFlash, badSafariFix, html5_events, showSupport, flushMessages, wrapCallback, idCounter = 0, didSetup, msecScale = 1000,\r\n  is_iDevice = ua.match(/(ipad|iphone|ipod)/i), isAndroid = ua.match(/android/i), isIE = ua.match(/msie|trident/i),\r\n  isWebkit = ua.match(/webkit/i),\r\n  isSafari = (ua.match(/safari/i) && !ua.match(/chrome/i)),\r\n  isOpera = (ua.match(/opera/i)),\r\n  mobileHTML5 = (ua.match(/(mobile|pre\\/|xoom)/i) || is_iDevice || isAndroid),\r\n  isBadSafari = (!wl.match(/usehtml5audio/i) && !wl.match(/sm2-ignorebadua/i) && isSafari && !ua.match(/silk/i) && ua.match(/OS\\sX\\s10_6_([3-7])/i)), // Safari 4 and 5 (excluding Kindle Fire, \"Silk\") occasionally fail to load/play HTML5 audio on Snow Leopard 10.6.3 through 10.6.7 due to bug(s) in QuickTime X and/or other underlying frameworks. :/ Confirmed bug. https://bugs.webkit.org/show_bug.cgi?id=32159\r\n  hasConsole = (window.console !== _undefined && console.log !== _undefined),\r\n  isFocused = (doc.hasFocus !== _undefined ? doc.hasFocus() : null),\r\n  tryInitOnFocus = (isSafari && (doc.hasFocus === _undefined || !doc.hasFocus())),\r\n  okToDisable = !tryInitOnFocus,\r\n  flashMIME = /(mp3|mp4|mpa|m4a|m4b)/i,\r\n  emptyURL = 'about:blank', // safe URL to unload, or load nothing from (flash 8 + most HTML5 UAs)\r\n  emptyWAV = 'data:audio/wave;base64,/UklGRiYAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQIAAAD//w==', // tiny WAV for HTML5 unloading\r\n  overHTTP = (doc.location ? doc.location.protocol.match(/http/i) : null),\r\n  http = (!overHTTP ? '//' : ''),\r\n  // mp3, mp4, aac etc.\r\n  netStreamMimeTypes = /^\\s*audio\\/(?:x-)?(?:mpeg4|aac|flv|mov|mp4|m4v|m4a|m4b|mp4v|3gp|3g2)\\s*(?:$|;)/i,\r\n  // Flash v9.0r115+ \"moviestar\" formats\r\n  netStreamTypes = ['mpeg4', 'aac', 'flv', 'mov', 'mp4', 'm4v', 'f4v', 'm4a', 'm4b', 'mp4v', '3gp', '3g2'],\r\n  netStreamPattern = new RegExp('\\\\.(' + netStreamTypes.join('|') + ')(\\\\?.*)?$', 'i');\r\n\r\n  this.mimePattern = /^\\s*audio\\/(?:x-)?(?:mp(?:eg|3))\\s*(?:$|;)/i; // default mp3 set\r\n\r\n  // use altURL if not \"online\"\r\n  this.useAltURL = !overHTTP;\r\n\r\n  swfCSS = {\r\n    swfBox: 'sm2-object-box',\r\n    swfDefault: 'movieContainer',\r\n    swfError: 'swf_error', // SWF loaded, but SM2 couldn't start (other error)\r\n    swfTimedout: 'swf_timedout',\r\n    swfLoaded: 'swf_loaded',\r\n    swfUnblocked: 'swf_unblocked', // or loaded OK\r\n    sm2Debug: 'sm2_debug',\r\n    highPerf: 'high_performance',\r\n    flashDebug: 'flash_debug'\r\n  };\r\n\r\n  /**\r\n   * HTML5 error codes, per W3C\r\n   * Error code 1, MEDIA_ERR_ABORTED: Client aborted download at user's request.\r\n   * Error code 2, MEDIA_ERR_NETWORK: A network error of some description caused the user agent to stop fetching the media resource, after the resource was established to be usable.\r\n   * Error code 3, MEDIA_ERR_DECODE: An error of some description occurred while decoding the media resource, after the resource was established to be usable.\r\n   * Error code 4, MEDIA_ERR_SRC_NOT_SUPPORTED: Media (audio file) not supported (\"not usable.\")\r\n   * Reference: https://html.spec.whatwg.org/multipage/embedded-content.html#error-codes\r\n   */\r\n  html5ErrorCodes = [\r\n    null,\r\n    'MEDIA_ERR_ABORTED',\r\n    'MEDIA_ERR_NETWORK',\r\n    'MEDIA_ERR_DECODE',\r\n    'MEDIA_ERR_SRC_NOT_SUPPORTED'\r\n  ];\r\n\r\n  /**\r\n   * basic HTML5 Audio() support test\r\n   * try...catch because of IE 9 \"not implemented\" nonsense\r\n   * https://github.com/Modernizr/Modernizr/issues/224\r\n   */\r\n\r\n  this.hasHTML5 = (function() {\r\n    try {\r\n      // new Audio(null) for stupid Opera 9.64 case, which throws not_enough_arguments exception otherwise.\r\n      return (Audio !== _undefined && (isOpera && opera !== _undefined && opera.version() < 10 ? new Audio(null) : new Audio()).canPlayType !== _undefined);\r\n    } catch(e) {\r\n      return false;\r\n    }\r\n  }());\r\n\r\n  /**\r\n   * Public SoundManager API\r\n   * -----------------------\r\n   */\r\n\r\n  /**\r\n   * Configures top-level soundManager properties.\r\n   *\r\n   * @param {object} options Option parameters, eg. { flashVersion: 9, url: '/path/to/swfs/' }\r\n   * onready and ontimeout are also accepted parameters. call soundManager.setup() to see the full list.\r\n   */\r\n\r\n  this.setup = function(options) {\r\n\r\n    var noURL = (!sm2.url);\r\n\r\n    // warn if flash options have already been applied\r\n\r\n    if (options !== _undefined && didInit && needsFlash && sm2.ok() && (options.flashVersion !== _undefined || options.url !== _undefined || options.html5Test !== _undefined)) {\r\n      complain(str('setupLate'));\r\n    }\r\n\r\n    // TODO: defer: true?\r\n\r\n    assign(options);\r\n\r\n    if (!useGlobalHTML5Audio) {\r\n\r\n      if (mobileHTML5) {\r\n\r\n        // force the singleton HTML5 pattern on mobile, by default.\r\n        if (!sm2.setupOptions.ignoreMobileRestrictions || sm2.setupOptions.forceUseGlobalHTML5Audio) {\r\n          messages.push(strings.globalHTML5);\r\n          useGlobalHTML5Audio = true;\r\n        }\r\n\r\n      } else if (sm2.setupOptions.forceUseGlobalHTML5Audio) {\r\n\r\n        // only apply singleton HTML5 on desktop if forced.\r\n        messages.push(strings.globalHTML5);\r\n        useGlobalHTML5Audio = true;\r\n\r\n      }\r\n\r\n    }\r\n\r\n    if (!didSetup && mobileHTML5) {\r\n\r\n      if (sm2.setupOptions.ignoreMobileRestrictions) {\r\n\r\n        messages.push(strings.ignoreMobile);\r\n\r\n      } else {\r\n\r\n        // prefer HTML5 for mobile + tablet-like devices, probably more reliable vs. flash at this point.\r\n\r\n        // <d>\r\n        if (!sm2.setupOptions.useHTML5Audio || sm2.setupOptions.preferFlash) {\r\n          // notify that defaults are being changed.\r\n          sm2._wD(strings.mobileUA);\r\n        }\r\n        // </d>\r\n\r\n        sm2.setupOptions.useHTML5Audio = true;\r\n        sm2.setupOptions.preferFlash = false;\r\n\r\n        if (is_iDevice) {\r\n\r\n          // no flash here.\r\n          sm2.ignoreFlash = true;\r\n\r\n        } else if ((isAndroid && !ua.match(/android\\s2\\.3/i)) || !isAndroid) {\r\n\r\n          /**\r\n           * Android devices tend to work better with a single audio instance, specifically for chained playback of sounds in sequence.\r\n           * Common use case: exiting sound onfinish() -> createSound() -> play()\r\n           * Presuming similar restrictions for other mobile, non-Android, non-iOS devices.\r\n           */\r\n\r\n          // <d>\r\n          sm2._wD(strings.globalHTML5);\r\n          // </d>\r\n\r\n          useGlobalHTML5Audio = true;\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    // special case 1: \"Late setup\". SM2 loaded normally, but user didn't assign flash URL eg., setup({url:...}) before SM2 init. Treat as delayed init.\r\n\r\n    if (options) {\r\n\r\n      if (noURL && didDCLoaded && options.url !== _undefined) {\r\n        sm2.beginDelayedInit();\r\n      }\r\n\r\n      // special case 2: If lazy-loading SM2 (DOMContentLoaded has already happened) and user calls setup() with url: parameter, try to init ASAP.\r\n\r\n      if (!didDCLoaded && options.url !== _undefined && doc.readyState === 'complete') {\r\n        setTimeout(domContentLoaded, 1);\r\n      }\r\n\r\n    }\r\n\r\n    didSetup = true;\r\n\r\n    return sm2;\r\n\r\n  };\r\n\r\n  this.ok = function() {\r\n\r\n    return (needsFlash ? (didInit && !disabled) : (sm2.useHTML5Audio && sm2.hasHTML5));\r\n\r\n  };\r\n\r\n  this.supported = this.ok; // legacy\r\n\r\n  this.getMovie = function(movie_id) {\r\n\r\n    // safety net: some old browsers differ on SWF references, possibly related to ExternalInterface / flash version\r\n    return id(movie_id) || doc[movie_id] || window[movie_id];\r\n\r\n  };\r\n\r\n  /**\r\n   * Creates a SMSound sound object instance. Can also be overloaded, e.g., createSound('mySound', '/some.mp3');\r\n   *\r\n   * @param {object} oOptions Sound options (at minimum, url parameter is required.)\r\n   * @return {object} SMSound The new SMSound object.\r\n   */\r\n\r\n  this.createSound = function(oOptions, _url) {\r\n\r\n    var cs, cs_string, options, oSound = null;\r\n\r\n    // <d>\r\n    cs = sm + '.createSound(): ';\r\n    cs_string = cs + str(!didInit ? 'notReady' : 'notOK');\r\n    // </d>\r\n\r\n    if (!didInit || !sm2.ok()) {\r\n      complain(cs_string);\r\n      return false;\r\n    }\r\n\r\n    if (_url !== _undefined) {\r\n      // function overloading in JS! :) ... assume simple createSound(id, url) use case.\r\n      oOptions = {\r\n        id: oOptions,\r\n        url: _url\r\n      };\r\n    }\r\n\r\n    // inherit from defaultOptions\r\n    options = mixin(oOptions);\r\n\r\n    options.url = parseURL(options.url);\r\n\r\n    // generate an id, if needed.\r\n    if (options.id === _undefined) {\r\n      options.id = sm2.setupOptions.idPrefix + (idCounter++);\r\n    }\r\n\r\n    // <d>\r\n    if (options.id.toString().charAt(0).match(/^[0-9]$/)) {\r\n      sm2._wD(cs + str('badID', options.id), 2);\r\n    }\r\n\r\n    sm2._wD(cs + options.id + (options.url ? ' (' + options.url + ')' : ''), 1);\r\n    // </d>\r\n\r\n    if (idCheck(options.id, true)) {\r\n      sm2._wD(cs + options.id + ' exists', 1);\r\n      return sm2.sounds[options.id];\r\n    }\r\n\r\n    function make() {\r\n\r\n      options = loopFix(options);\r\n      sm2.sounds[options.id] = new SMSound(options);\r\n      sm2.soundIDs.push(options.id);\r\n      return sm2.sounds[options.id];\r\n\r\n    }\r\n\r\n    if (html5OK(options)) {\r\n\r\n      oSound = make();\r\n      // <d>\r\n      if (!sm2.html5Only) {\r\n        sm2._wD(options.id + ': Using HTML5');\r\n      }\r\n      // </d>\r\n      oSound._setup_html5(options);\r\n\r\n    } else {\r\n\r\n      if (sm2.html5Only) {\r\n        sm2._wD(options.id + ': No HTML5 support for this sound, and no Flash. Exiting.');\r\n        return make();\r\n      }\r\n\r\n      // TODO: Move HTML5/flash checks into generic URL parsing/handling function.\r\n\r\n      if (sm2.html5.usingFlash && options.url && options.url.match(/data:/i)) {\r\n        // data: URIs not supported by Flash, either.\r\n        sm2._wD(options.id + ': data: URIs not supported via Flash. Exiting.');\r\n        return make();\r\n      }\r\n\r\n      if (fV > 8) {\r\n        if (options.isMovieStar === null) {\r\n          // attempt to detect MPEG-4 formats\r\n          options.isMovieStar = !!(options.serverURL || (options.type ? options.type.match(netStreamMimeTypes) : false) || (options.url && options.url.match(netStreamPattern)));\r\n        }\r\n        // <d>\r\n        if (options.isMovieStar) {\r\n          sm2._wD(cs + 'using MovieStar handling');\r\n          if (options.loops > 1) {\r\n            _wDS('noNSLoop');\r\n          }\r\n        }\r\n        // </d>\r\n      }\r\n\r\n      options = policyFix(options, cs);\r\n      oSound = make();\r\n\r\n      if (fV === 8) {\r\n        flash._createSound(options.id, options.loops || 1, options.usePolicyFile);\r\n      } else {\r\n        flash._createSound(options.id, options.url, options.usePeakData, options.useWaveformData, options.useEQData, options.isMovieStar, (options.isMovieStar ? options.bufferTime : false), options.loops || 1, options.serverURL, options.duration || null, options.autoPlay, true, options.autoLoad, options.usePolicyFile);\r\n        if (!options.serverURL) {\r\n          // We are connected immediately\r\n          oSound.connected = true;\r\n          if (options.onconnect) {\r\n            options.onconnect.apply(oSound);\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!options.serverURL && (options.autoLoad || options.autoPlay)) {\r\n        // call load for non-rtmp streams\r\n        oSound.load(options);\r\n      }\r\n\r\n    }\r\n\r\n    // rtmp will play in onconnect\r\n    if (!options.serverURL && options.autoPlay) {\r\n      oSound.play();\r\n    }\r\n\r\n    return oSound;\r\n\r\n  };\r\n\r\n  /**\r\n   * Destroys a SMSound sound object instance.\r\n   *\r\n   * @param {string} sID The ID of the sound to destroy\r\n   */\r\n\r\n  this.destroySound = function(sID, _bFromSound) {\r\n\r\n    // explicitly destroy a sound before normal page unload, etc.\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    var oS = sm2.sounds[sID], i;\r\n\r\n    oS.stop();\r\n\r\n    // Disable all callbacks after stop(), when the sound is being destroyed\r\n    oS._iO = {};\r\n\r\n    oS.unload();\r\n\r\n    for (i = 0; i < sm2.soundIDs.length; i++) {\r\n      if (sm2.soundIDs[i] === sID) {\r\n        sm2.soundIDs.splice(i, 1);\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!_bFromSound) {\r\n      // ignore if being called from SMSound instance\r\n      oS.destruct(true);\r\n    }\r\n\r\n    oS = null;\r\n    delete sm2.sounds[sID];\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the load() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {object} oOptions Optional: Sound options\r\n   */\r\n\r\n  this.load = function(sID, oOptions) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].load(oOptions);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the unload() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   */\r\n\r\n  this.unload = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].unload();\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the onPosition() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nPosition The position to watch for\r\n   * @param {function} oMethod The relevant callback to fire\r\n   * @param {object} oScope Optional: The scope to apply the callback to\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.onPosition = function(sID, nPosition, oMethod, oScope) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].onposition(nPosition, oMethod, oScope);\r\n\r\n  };\r\n\r\n  // legacy/backwards-compability: lower-case method name\r\n  this.onposition = this.onPosition;\r\n\r\n  /**\r\n   * Calls the clearOnPosition() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nPosition The position to watch for\r\n   * @param {function} oMethod Optional: The relevant callback to fire\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.clearOnPosition = function(sID, nPosition, oMethod) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].clearOnPosition(nPosition, oMethod);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the play() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {object} oOptions Optional: Sound options\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.play = function(sID, oOptions) {\r\n\r\n    var result = null,\r\n        // legacy function-overloading use case: play('mySound', '/path/to/some.mp3');\r\n        overloaded = (oOptions && !(oOptions instanceof Object));\r\n\r\n    if (!didInit || !sm2.ok()) {\r\n      complain(sm + '.play(): ' + str(!didInit ? 'notReady' : 'notOK'));\r\n      return false;\r\n    }\r\n\r\n    if (!idCheck(sID, overloaded)) {\r\n\r\n      // no sound found for the given ID. Bail.\r\n      if (!overloaded) return false;\r\n\r\n      if (overloaded) {\r\n        oOptions = {\r\n          url: oOptions\r\n        };\r\n      }\r\n\r\n      if (oOptions && oOptions.url) {\r\n        // overloading use case, create+play: .play('someID', {url:'/path/to.mp3'});\r\n        sm2._wD(sm + '.play(): Attempting to create \"' + sID + '\"', 1);\r\n        oOptions.id = sID;\r\n        result = sm2.createSound(oOptions).play();\r\n      }\r\n\r\n    } else if (overloaded) {\r\n\r\n      // existing sound object case\r\n      oOptions = {\r\n        url: oOptions\r\n      };\r\n\r\n    }\r\n\r\n    if (result === null) {\r\n      // default case\r\n      result = sm2.sounds[sID].play(oOptions);\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  // just for convenience\r\n  this.start = this.play;\r\n\r\n  /**\r\n   * Calls the setPlaybackRate() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.setPlaybackRate = function(sID, rate, allowOverride) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].setPlaybackRate(rate, allowOverride);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the setPosition() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nMsecOffset Position (milliseconds)\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.setPosition = function(sID, nMsecOffset) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].setPosition(nMsecOffset);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the stop() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.stop = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    sm2._wD(sm + '.stop(' + sID + ')', 1);\r\n\r\n    return sm2.sounds[sID].stop();\r\n\r\n  };\r\n\r\n  /**\r\n   * Stops all currently-playing sounds.\r\n   */\r\n\r\n  this.stopAll = function() {\r\n\r\n    var oSound;\r\n    sm2._wD(sm + '.stopAll()', 1);\r\n\r\n    for (oSound in sm2.sounds) {\r\n      if (sm2.sounds.hasOwnProperty(oSound)) {\r\n        // apply only to sound objects\r\n        sm2.sounds[oSound].stop();\r\n      }\r\n    }\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the pause() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.pause = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].pause();\r\n\r\n  };\r\n\r\n  /**\r\n   * Pauses all currently-playing sounds.\r\n   */\r\n\r\n  this.pauseAll = function() {\r\n\r\n    var i;\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n      sm2.sounds[sm2.soundIDs[i]].pause();\r\n    }\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the resume() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.resume = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].resume();\r\n\r\n  };\r\n\r\n  /**\r\n   * Resumes all currently-paused sounds.\r\n   */\r\n\r\n  this.resumeAll = function() {\r\n\r\n    var i;\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n      sm2.sounds[sm2.soundIDs[i]].resume();\r\n    }\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the togglePause() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.togglePause = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].togglePause();\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the setPan() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nPan The pan value (-100 to 100)\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.setPan = function(sID, nPan) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].setPan(nPan);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the setVolume() method of a SMSound object by ID\r\n   * Overloaded case: pass only volume argument eg., setVolume(50) to apply to all sounds.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @param {number} nVol The volume value (0 to 100)\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.setVolume = function(sID, nVol) {\r\n\r\n    // setVolume(50) function overloading case - apply to all sounds\r\n\r\n    var i, j;\r\n\r\n    if (sID !== _undefined && !isNaN(sID) && nVol === _undefined) {\r\n      for (i = 0, j = sm2.soundIDs.length; i < j; i++) {\r\n        sm2.sounds[sm2.soundIDs[i]].setVolume(sID);\r\n      }\r\n      return false;\r\n    }\r\n\r\n    // setVolume('mySound', 50) case\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].setVolume(nVol);\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the mute() method of either a single SMSound object by ID, or all sound objects.\r\n   *\r\n   * @param {string} sID Optional: The ID of the sound (if omitted, all sounds will be used.)\r\n   */\r\n\r\n  this.mute = function(sID) {\r\n\r\n    var i = 0;\r\n\r\n    if (sID instanceof String) {\r\n      sID = null;\r\n    }\r\n\r\n    if (!sID) {\r\n\r\n      sm2._wD(sm + '.mute(): Muting all sounds');\r\n      for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n        sm2.sounds[sm2.soundIDs[i]].mute();\r\n      }\r\n      sm2.muted = true;\r\n\r\n    } else {\r\n\r\n      if (!idCheck(sID)) return false;\r\n\r\n      sm2._wD(sm + '.mute(): Muting \"' + sID + '\"');\r\n      return sm2.sounds[sID].mute();\r\n\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  /**\r\n   * Mutes all sounds.\r\n   */\r\n\r\n  this.muteAll = function() {\r\n\r\n    sm2.mute();\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the unmute() method of either a single SMSound object by ID, or all sound objects.\r\n   *\r\n   * @param {string} sID Optional: The ID of the sound (if omitted, all sounds will be used.)\r\n   */\r\n\r\n  this.unmute = function(sID) {\r\n\r\n    var i;\r\n\r\n    if (sID instanceof String) {\r\n      sID = null;\r\n    }\r\n\r\n    if (!sID) {\r\n\r\n      sm2._wD(sm + '.unmute(): Unmuting all sounds');\r\n      for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n        sm2.sounds[sm2.soundIDs[i]].unmute();\r\n      }\r\n      sm2.muted = false;\r\n\r\n    } else {\r\n\r\n      if (!idCheck(sID)) return false;\r\n\r\n      sm2._wD(sm + '.unmute(): Unmuting \"' + sID + '\"');\r\n\r\n      return sm2.sounds[sID].unmute();\r\n\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  /**\r\n   * Unmutes all sounds.\r\n   */\r\n\r\n  this.unmuteAll = function() {\r\n\r\n    sm2.unmute();\r\n\r\n  };\r\n\r\n  /**\r\n   * Calls the toggleMute() method of a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.toggleMute = function(sID) {\r\n\r\n    if (!idCheck(sID)) return false;\r\n\r\n    return sm2.sounds[sID].toggleMute();\r\n\r\n  };\r\n\r\n  /**\r\n   * Retrieves the memory used by the flash plugin.\r\n   *\r\n   * @return {number} The amount of memory in use\r\n   */\r\n\r\n  this.getMemoryUse = function() {\r\n\r\n    // flash-only\r\n    var ram = 0;\r\n\r\n    if (flash && fV !== 8) {\r\n      ram = parseInt(flash._getMemoryUse(), 10);\r\n    }\r\n\r\n    return ram;\r\n\r\n  };\r\n\r\n  /**\r\n   * Undocumented: NOPs soundManager and all SMSound objects.\r\n   */\r\n\r\n  this.disable = function(bNoDisable) {\r\n\r\n    // destroy all functions\r\n    var i;\r\n\r\n    if (bNoDisable === _undefined) {\r\n      bNoDisable = false;\r\n    }\r\n\r\n    // already disabled?\r\n    if (disabled) return false;\r\n\r\n    disabled = true;\r\n\r\n    _wDS('shutdown', 1);\r\n\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n      disableObject(sm2.sounds[sm2.soundIDs[i]]);\r\n    }\r\n\r\n    disableObject(sm2);\r\n\r\n    // fire \"complete\", despite fail\r\n    initComplete(bNoDisable);\r\n\r\n    event.remove(window, 'load', initUserOnload);\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  /**\r\n   * Determines playability of a MIME type, eg. 'audio/mp3'.\r\n   */\r\n\r\n  this.canPlayMIME = function(sMIME) {\r\n\r\n    var result;\r\n\r\n    if (sm2.hasHTML5) {\r\n      result = html5CanPlay({\r\n        type: sMIME\r\n      });\r\n    }\r\n\r\n    if (!result && needsFlash) {\r\n      // if flash 9, test netStream (movieStar) types as well.\r\n      result = (sMIME && sm2.ok() ? !!((fV > 8 ? sMIME.match(netStreamMimeTypes) : null) || sMIME.match(sm2.mimePattern)) : null); // TODO: make less \"weird\" (per JSLint)\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Determines playability of a URL based on audio support.\r\n   *\r\n   * @param {string} sURL The URL to test\r\n   * @return {boolean} URL playability\r\n   */\r\n\r\n  this.canPlayURL = function(sURL) {\r\n\r\n    var result;\r\n\r\n    if (sm2.hasHTML5) {\r\n      result = html5CanPlay({\r\n        url: sURL\r\n      });\r\n    }\r\n\r\n    if (!result && needsFlash) {\r\n      result = (sURL && sm2.ok() ? !!(sURL.match(sm2.filePattern)) : null);\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Determines playability of an HTML DOM &lt;a&gt; object (or similar object literal) based on audio support.\r\n   *\r\n   * @param {object} oLink an HTML DOM &lt;a&gt; object or object literal including href and/or type attributes\r\n   * @return {boolean} URL playability\r\n   */\r\n\r\n  this.canPlayLink = function(oLink) {\r\n\r\n    if (oLink.type !== _undefined && oLink.type && sm2.canPlayMIME(oLink.type)) return true;\r\n\r\n    return sm2.canPlayURL(oLink.href);\r\n\r\n  };\r\n\r\n  /**\r\n   * Retrieves a SMSound object by ID.\r\n   *\r\n   * @param {string} sID The ID of the sound\r\n   * @return {SMSound} The SMSound object\r\n   */\r\n\r\n  this.getSoundById = function(sID, _suppressDebug) {\r\n\r\n    if (!sID) return null;\r\n\r\n    var result = sm2.sounds[sID];\r\n\r\n    // <d>\r\n    if (!result && !_suppressDebug) {\r\n      sm2._wD(sm + '.getSoundById(): Sound \"' + sID + '\" not found.', 2);\r\n    }\r\n    // </d>\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Queues a callback for execution when SoundManager has successfully initialized.\r\n   *\r\n   * @param {function} oMethod The callback method to fire\r\n   * @param {object} oScope Optional: The scope to apply to the callback\r\n   */\r\n\r\n  this.onready = function(oMethod, oScope) {\r\n\r\n    var sType = 'onready',\r\n        result = false;\r\n\r\n    if (typeof oMethod === 'function') {\r\n\r\n      // <d>\r\n      if (didInit) {\r\n        sm2._wD(str('queue', sType));\r\n      }\r\n      // </d>\r\n\r\n      if (!oScope) {\r\n        oScope = window;\r\n      }\r\n\r\n      addOnEvent(sType, oMethod, oScope);\r\n      processOnEvents();\r\n\r\n      result = true;\r\n\r\n    } else {\r\n\r\n      throw str('needFunction', sType);\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Queues a callback for execution when SoundManager has failed to initialize.\r\n   *\r\n   * @param {function} oMethod The callback method to fire\r\n   * @param {object} oScope Optional: The scope to apply to the callback\r\n   */\r\n\r\n  this.ontimeout = function(oMethod, oScope) {\r\n\r\n    var sType = 'ontimeout',\r\n        result = false;\r\n\r\n    if (typeof oMethod === 'function') {\r\n\r\n      // <d>\r\n      if (didInit) {\r\n        sm2._wD(str('queue', sType));\r\n      }\r\n      // </d>\r\n\r\n      if (!oScope) {\r\n        oScope = window;\r\n      }\r\n\r\n      addOnEvent(sType, oMethod, oScope);\r\n      processOnEvents({ type: sType });\r\n\r\n      result = true;\r\n\r\n    } else {\r\n\r\n      throw str('needFunction', sType);\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * Writes console.log()-style debug output to a console or in-browser element.\r\n   * Applies when debugMode = true\r\n   *\r\n   * @param {string} sText The console message\r\n   * @param {object} nType Optional log level (number), or object. Number case: Log type/style where 0 = 'info', 1 = 'warn', 2 = 'error'. Object case: Object to be dumped.\r\n   */\r\n\r\n  this._writeDebug = function(sText, sTypeOrObject) {\r\n\r\n    // pseudo-private console.log()-style output\r\n    // <d>\r\n\r\n    var sDID = 'soundmanager-debug', o, oItem;\r\n\r\n    if (!sm2.setupOptions.debugMode) return false;\r\n\r\n    if (hasConsole && sm2.useConsole) {\r\n      if (sTypeOrObject && typeof sTypeOrObject === 'object') {\r\n        // object passed; dump to console.\r\n        console.log(sText, sTypeOrObject);\r\n      } else if (debugLevels[sTypeOrObject] !== _undefined) {\r\n        console[debugLevels[sTypeOrObject]](sText);\r\n      } else {\r\n        console.log(sText);\r\n      }\r\n      if (sm2.consoleOnly) return true;\r\n    }\r\n\r\n    o = id(sDID);\r\n\r\n    if (!o) return false;\r\n\r\n    oItem = doc.createElement('div');\r\n\r\n    if (++wdCount % 2 === 0) {\r\n      oItem.className = 'sm2-alt';\r\n    }\r\n\r\n    if (sTypeOrObject === _undefined) {\r\n      sTypeOrObject = 0;\r\n    } else {\r\n      sTypeOrObject = parseInt(sTypeOrObject, 10);\r\n    }\r\n\r\n    oItem.appendChild(doc.createTextNode(sText));\r\n\r\n    if (sTypeOrObject) {\r\n      if (sTypeOrObject >= 2) {\r\n        oItem.style.fontWeight = 'bold';\r\n      }\r\n      if (sTypeOrObject === 3) {\r\n        oItem.style.color = '#ff3333';\r\n      }\r\n    }\r\n\r\n    // top-to-bottom\r\n    // o.appendChild(oItem);\r\n\r\n    // bottom-to-top\r\n    o.insertBefore(oItem, o.firstChild);\r\n\r\n    o = null;\r\n    // </d>\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  // <d>\r\n  // last-resort debugging option\r\n  if (wl.indexOf('sm2-debug=alert') !== -1) {\r\n    this._writeDebug = function(sText) {\r\n      window.alert(sText);\r\n    };\r\n  }\r\n  // </d>\r\n\r\n  // alias\r\n  this._wD = this._writeDebug;\r\n\r\n  /**\r\n   * Provides debug / state information on all SMSound objects.\r\n   */\r\n\r\n  this._debug = function() {\r\n\r\n    // <d>\r\n    var i, j;\r\n    _wDS('currentObj', 1);\r\n\r\n    for (i = 0, j = sm2.soundIDs.length; i < j; i++) {\r\n      sm2.sounds[sm2.soundIDs[i]]._debug();\r\n    }\r\n    // </d>\r\n\r\n  };\r\n\r\n  /**\r\n   * Restarts and re-initializes the SoundManager instance.\r\n   *\r\n   * @param {boolean} resetEvents Optional: When true, removes all registered onready and ontimeout event callbacks.\r\n   * @param {boolean} excludeInit Options: When true, does not call beginDelayedInit() (which would restart SM2).\r\n   * @return {object} soundManager The soundManager instance.\r\n   */\r\n\r\n  this.reboot = function(resetEvents, excludeInit) {\r\n\r\n    // reset some (or all) state, and re-init unless otherwise specified.\r\n\r\n    // <d>\r\n    if (sm2.soundIDs.length) {\r\n      sm2._wD('Destroying ' + sm2.soundIDs.length + ' SMSound object' + (sm2.soundIDs.length !== 1 ? 's' : '') + '...');\r\n    }\r\n    // </d>\r\n\r\n    var i, j, k;\r\n\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n      sm2.sounds[sm2.soundIDs[i]].destruct();\r\n    }\r\n\r\n    // trash ze flash (remove from the DOM)\r\n\r\n    if (flash) {\r\n\r\n      try {\r\n\r\n        if (isIE) {\r\n          oRemovedHTML = flash.innerHTML;\r\n        }\r\n\r\n        oRemoved = flash.parentNode.removeChild(flash);\r\n\r\n      } catch(e) {\r\n\r\n        // Remove failed? May be due to flash blockers silently removing the SWF object/embed node from the DOM. Warn and continue.\r\n\r\n        _wDS('badRemove', 2);\r\n\r\n      }\r\n\r\n    }\r\n\r\n    // actually, force recreate of movie.\r\n\r\n    oRemovedHTML = oRemoved = needsFlash = flash = null;\r\n\r\n    sm2.enabled = didDCLoaded = didInit = waitingForEI = initPending = didAppend = appendSuccess = disabled = useGlobalHTML5Audio = sm2.swfLoaded = false;\r\n\r\n    sm2.soundIDs = [];\r\n    sm2.sounds = {};\r\n\r\n    idCounter = 0;\r\n    didSetup = false;\r\n\r\n    if (!resetEvents) {\r\n      // reset callbacks for onready, ontimeout etc. so that they will fire again on re-init\r\n      for (i in on_queue) {\r\n        if (on_queue.hasOwnProperty(i)) {\r\n          for (j = 0, k = on_queue[i].length; j < k; j++) {\r\n            on_queue[i][j].fired = false;\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // remove all callbacks entirely\r\n      on_queue = [];\r\n    }\r\n\r\n    // <d>\r\n    if (!excludeInit) {\r\n      sm2._wD(sm + ': Rebooting...');\r\n    }\r\n    // </d>\r\n\r\n    // reset HTML5 and flash canPlay test results\r\n\r\n    sm2.html5 = {\r\n      usingFlash: null\r\n    };\r\n\r\n    sm2.flash = {};\r\n\r\n    // reset device-specific HTML/flash mode switches\r\n\r\n    sm2.html5Only = false;\r\n    sm2.ignoreFlash = false;\r\n\r\n    window.setTimeout(function() {\r\n\r\n      // by default, re-init\r\n\r\n      if (!excludeInit) {\r\n        sm2.beginDelayedInit();\r\n      }\r\n\r\n    }, 20);\r\n\r\n    return sm2;\r\n\r\n  };\r\n\r\n  this.reset = function() {\r\n\r\n    /**\r\n     * Shuts down and restores the SoundManager instance to its original loaded state, without an explicit reboot. All onready/ontimeout handlers are removed.\r\n     * After this call, SM2 may be re-initialized via soundManager.beginDelayedInit().\r\n     * @return {object} soundManager The soundManager instance.\r\n     */\r\n\r\n    _wDS('reset');\r\n\r\n    return sm2.reboot(true, true);\r\n\r\n  };\r\n\r\n  /**\r\n   * Undocumented: Determines the SM2 flash movie's load progress.\r\n   *\r\n   * @return {number or null} Percent loaded, or if invalid/unsupported, null.\r\n   */\r\n\r\n  this.getMoviePercent = function() {\r\n\r\n    /**\r\n     * Interesting syntax notes...\r\n     * Flash/ExternalInterface (ActiveX/NPAPI) bridge methods are not typeof \"function\" nor instanceof Function, but are still valid.\r\n     * Furthermore, using (flash && flash.PercentLoaded) causes IE to throw \"object doesn't support this property or method\".\r\n     * Thus, 'in' syntax must be used.\r\n     */\r\n\r\n    return (flash && 'PercentLoaded' in flash ? flash.PercentLoaded() : null);\r\n\r\n  };\r\n\r\n  /**\r\n   * Additional helper for manually invoking SM2's init process after DOM Ready / window.onload().\r\n   */\r\n\r\n  this.beginDelayedInit = function() {\r\n\r\n    windowLoaded = true;\r\n    domContentLoaded();\r\n\r\n    setTimeout(function() {\r\n\r\n      if (initPending) return false;\r\n\r\n      createMovie();\r\n      initMovie();\r\n      initPending = true;\r\n\r\n      return true;\r\n\r\n    }, 20);\r\n\r\n    delayWaitForEI();\r\n\r\n  };\r\n\r\n  /**\r\n   * Destroys the SoundManager instance and all SMSound instances.\r\n   */\r\n\r\n  this.destruct = function() {\r\n\r\n    sm2._wD(sm + '.destruct()');\r\n    sm2.disable(true);\r\n\r\n  };\r\n\r\n  /**\r\n   * SMSound() (sound object) constructor\r\n   * ------------------------------------\r\n   *\r\n   * @param {object} oOptions Sound options (id and url are required attributes)\r\n   * @return {SMSound} The new SMSound object\r\n   */\r\n\r\n  SMSound = function(oOptions) {\r\n\r\n    var s = this, resetProperties, add_html5_events, remove_html5_events, stop_html5_timer, start_html5_timer, attachOnPosition, onplay_called = false, onPositionItems = [], onPositionFired = 0, detachOnPosition, applyFromTo, lastURL = null, lastHTML5State, urlOmitted;\r\n\r\n    lastHTML5State = {\r\n      // tracks duration + position (time)\r\n      duration: null,\r\n      time: null\r\n    };\r\n\r\n    this.id = oOptions.id;\r\n\r\n    // legacy\r\n    this.sID = this.id;\r\n\r\n    this.url = oOptions.url;\r\n    this.options = mixin(oOptions);\r\n\r\n    // per-play-instance-specific options\r\n    this.instanceOptions = this.options;\r\n\r\n    // short alias\r\n    this._iO = this.instanceOptions;\r\n\r\n    // assign property defaults\r\n    this.pan = this.options.pan;\r\n    this.volume = this.options.volume;\r\n\r\n    // whether or not this object is using HTML5\r\n    this.isHTML5 = false;\r\n\r\n    // internal HTML5 Audio() object reference\r\n    this._a = null;\r\n\r\n    // for flash 8 special-case createSound() without url, followed by load/play with url case\r\n    urlOmitted = (!this.url);\r\n\r\n    /**\r\n     * SMSound() public methods\r\n     * ------------------------\r\n     */\r\n\r\n    this.id3 = {};\r\n\r\n    /**\r\n     * Writes SMSound object parameters to debug console\r\n     */\r\n\r\n    this._debug = function() {\r\n\r\n      // <d>\r\n      sm2._wD(s.id + ': Merged options:', s.options);\r\n      // </d>\r\n\r\n    };\r\n\r\n    /**\r\n     * Begins loading a sound per its *url*.\r\n     *\r\n     * @param {object} options Optional: Sound options\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.load = function(options) {\r\n\r\n      var oSound = null, instanceOptions;\r\n\r\n      if (options !== _undefined) {\r\n        s._iO = mixin(options, s.options);\r\n      } else {\r\n        options = s.options;\r\n        s._iO = options;\r\n        if (lastURL && lastURL !== s.url) {\r\n          _wDS('manURL');\r\n          s._iO.url = s.url;\r\n          s.url = null;\r\n        }\r\n      }\r\n\r\n      if (!s._iO.url) {\r\n        s._iO.url = s.url;\r\n      }\r\n\r\n      s._iO.url = parseURL(s._iO.url);\r\n\r\n      // ensure we're in sync\r\n      s.instanceOptions = s._iO;\r\n\r\n      // local shortcut\r\n      instanceOptions = s._iO;\r\n\r\n      sm2._wD(s.id + ': load (' + instanceOptions.url + ')');\r\n\r\n      if (!instanceOptions.url && !s.url) {\r\n        sm2._wD(s.id + ': load(): url is unassigned. Exiting.', 2);\r\n        return s;\r\n      }\r\n\r\n      // <d>\r\n      if (!s.isHTML5 && fV === 8 && !s.url && !instanceOptions.autoPlay) {\r\n        // flash 8 load() -> play() won't work before onload has fired.\r\n        sm2._wD(s.id + ': Flash 8 load() limitation: Wait for onload() before calling play().', 1);\r\n      }\r\n      // </d>\r\n\r\n      if (instanceOptions.url === s.url && s.readyState !== 0 && s.readyState !== 2) {\r\n        _wDS('onURL', 1);\r\n        // if loaded and an onload() exists, fire immediately.\r\n        if (s.readyState === 3 && instanceOptions.onload) {\r\n          // assume success based on truthy duration.\r\n          wrapCallback(s, function() {\r\n            instanceOptions.onload.apply(s, [(!!s.duration)]);\r\n          });\r\n        }\r\n        return s;\r\n      }\r\n\r\n      // reset a few state properties\r\n\r\n      s.loaded = false;\r\n      s.readyState = 1;\r\n      s.playState = 0;\r\n      s.id3 = {};\r\n\r\n      // TODO: If switching from HTML5 -> flash (or vice versa), stop currently-playing audio.\r\n\r\n      if (html5OK(instanceOptions)) {\r\n\r\n        oSound = s._setup_html5(instanceOptions);\r\n\r\n        if (!oSound._called_load) {\r\n\r\n          s._html5_canplay = false;\r\n\r\n          // TODO: review called_load / html5_canplay logic\r\n\r\n          // if url provided directly to load(), assign it here.\r\n\r\n          if (s.url !== instanceOptions.url) {\r\n\r\n            sm2._wD(_wDS('manURL') + ': ' + instanceOptions.url);\r\n\r\n            s._a.src = instanceOptions.url;\r\n\r\n            // TODO: review / re-apply all relevant options (volume, loop, onposition etc.)\r\n\r\n            // reset position for new URL\r\n            s.setPosition(0);\r\n\r\n          }\r\n\r\n          // given explicit load call, try to preload.\r\n\r\n          // early HTML5 implementation (non-standard)\r\n          s._a.autobuffer = 'auto';\r\n\r\n          // standard property, values: none / metadata / auto\r\n          // reference: http://msdn.microsoft.com/en-us/library/ie/ff974759%28v=vs.85%29.aspx\r\n          s._a.preload = 'auto';\r\n\r\n          s._a._called_load = true;\r\n\r\n        } else {\r\n\r\n          sm2._wD(s.id + ': Ignoring request to load again');\r\n\r\n        }\r\n\r\n      } else {\r\n\r\n        if (sm2.html5Only) {\r\n          sm2._wD(s.id + ': No flash support. Exiting.');\r\n          return s;\r\n        }\r\n\r\n        if (s._iO.url && s._iO.url.match(/data:/i)) {\r\n          // data: URIs not supported by Flash, either.\r\n          sm2._wD(s.id + ': data: URIs not supported via Flash. Exiting.');\r\n          return s;\r\n        }\r\n\r\n        try {\r\n          s.isHTML5 = false;\r\n          s._iO = policyFix(loopFix(instanceOptions));\r\n          // if we have \"position\", disable auto-play as we'll be seeking to that position at onload().\r\n          if (s._iO.autoPlay && (s._iO.position || s._iO.from)) {\r\n            sm2._wD(s.id + ': Disabling autoPlay because of non-zero offset case');\r\n            s._iO.autoPlay = false;\r\n          }\r\n          // re-assign local shortcut\r\n          instanceOptions = s._iO;\r\n          if (fV === 8) {\r\n            flash._load(s.id, instanceOptions.url, instanceOptions.stream, instanceOptions.autoPlay, instanceOptions.usePolicyFile);\r\n          } else {\r\n            flash._load(s.id, instanceOptions.url, !!(instanceOptions.stream), !!(instanceOptions.autoPlay), instanceOptions.loops || 1, !!(instanceOptions.autoLoad), instanceOptions.usePolicyFile);\r\n          }\r\n        } catch(e) {\r\n          _wDS('smError', 2);\r\n          debugTS('onload', false);\r\n          catchError({\r\n            type: 'SMSOUND_LOAD_JS_EXCEPTION',\r\n            fatal: true\r\n          });\r\n        }\r\n\r\n      }\r\n\r\n      // after all of this, ensure sound url is up to date.\r\n      s.url = instanceOptions.url;\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Unloads a sound, canceling any open HTTP requests.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.unload = function() {\r\n\r\n      // Flash 8/AS2 can't \"close\" a stream - fake it by loading an empty URL\r\n      // Flash 9/AS3: Close stream, preventing further load\r\n      // HTML5: Most UAs will use empty URL\r\n\r\n      if (s.readyState !== 0) {\r\n\r\n        sm2._wD(s.id + ': unload()');\r\n\r\n        if (!s.isHTML5) {\r\n\r\n          if (fV === 8) {\r\n            flash._unload(s.id, emptyURL);\r\n          } else {\r\n            flash._unload(s.id);\r\n          }\r\n\r\n        } else {\r\n\r\n          stop_html5_timer();\r\n\r\n          if (s._a) {\r\n\r\n            s._a.pause();\r\n\r\n            // update empty URL, too\r\n            lastURL = html5Unload(s._a);\r\n\r\n          }\r\n\r\n        }\r\n\r\n        // reset load/status flags\r\n        resetProperties();\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Unloads and destroys a sound.\r\n     */\r\n\r\n    this.destruct = function(_bFromSM) {\r\n\r\n      sm2._wD(s.id + ': Destruct');\r\n\r\n      if (!s.isHTML5) {\r\n\r\n        // kill sound within Flash\r\n        // Disable the onfailure handler\r\n        s._iO.onfailure = null;\r\n        flash._destroySound(s.id);\r\n\r\n      } else {\r\n\r\n        stop_html5_timer();\r\n\r\n        if (s._a) {\r\n          s._a.pause();\r\n          html5Unload(s._a);\r\n          if (!useGlobalHTML5Audio) {\r\n            remove_html5_events();\r\n          }\r\n          // break obvious circular reference\r\n          s._a._s = null;\r\n          s._a = null;\r\n        }\r\n\r\n      }\r\n\r\n      if (!_bFromSM) {\r\n        // ensure deletion from controller\r\n        sm2.destroySound(s.id, true);\r\n      }\r\n\r\n    };\r\n\r\n    /**\r\n     * Begins playing a sound.\r\n     *\r\n     * @param {object} options Optional: Sound options\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.play = function(options, _updatePlayState) {\r\n\r\n      var fN, allowMulti, a, onready,\r\n          audioClone, onended, oncanplay,\r\n          startOK = true;\r\n\r\n      // <d>\r\n      fN = s.id + ': play(): ';\r\n      // </d>\r\n\r\n      // default to true\r\n      _updatePlayState = (_updatePlayState === _undefined ? true : _updatePlayState);\r\n\r\n      if (!options) {\r\n        options = {};\r\n      }\r\n\r\n      // first, use local URL (if specified)\r\n      if (s.url) {\r\n        s._iO.url = s.url;\r\n      }\r\n\r\n      // mix in any options defined at createSound()\r\n      s._iO = mixin(s._iO, s.options);\r\n\r\n      // mix in any options specific to this method\r\n      s._iO = mixin(options, s._iO);\r\n\r\n      s._iO.url = parseURL(s._iO.url);\r\n\r\n      s.instanceOptions = s._iO;\r\n\r\n      // RTMP-only\r\n      if (!s.isHTML5 && s._iO.serverURL && !s.connected) {\r\n        if (!s.getAutoPlay()) {\r\n          sm2._wD(fN + ' Netstream not connected yet - setting autoPlay');\r\n          s.setAutoPlay(true);\r\n        }\r\n        // play will be called in onconnect()\r\n        return s;\r\n      }\r\n\r\n      if (html5OK(s._iO)) {\r\n        s._setup_html5(s._iO);\r\n        start_html5_timer();\r\n      }\r\n\r\n      if (s.playState === 1 && !s.paused) {\r\n\r\n        allowMulti = s._iO.multiShot;\r\n\r\n        if (!allowMulti) {\r\n\r\n          sm2._wD(fN + 'Already playing (one-shot)', 1);\r\n\r\n          if (s.isHTML5) {\r\n            // go back to original position.\r\n            s.setPosition(s._iO.position);\r\n          }\r\n\r\n          return s;\r\n\r\n        }\r\n\r\n        sm2._wD(fN + 'Already playing (multi-shot)', 1);\r\n\r\n      }\r\n\r\n      // edge case: play() with explicit URL parameter\r\n      if (options.url && options.url !== s.url) {\r\n\r\n        // special case for createSound() followed by load() / play() with url; avoid double-load case.\r\n        if (!s.readyState && !s.isHTML5 && fV === 8 && urlOmitted) {\r\n\r\n          urlOmitted = false;\r\n\r\n        } else {\r\n\r\n          // load using merged options\r\n          s.load(s._iO);\r\n\r\n        }\r\n\r\n      }\r\n\r\n      if (!s.loaded) {\r\n\r\n        if (s.readyState === 0) {\r\n\r\n          sm2._wD(fN + 'Attempting to load');\r\n\r\n          // try to get this sound playing ASAP\r\n          if (!s.isHTML5 && !sm2.html5Only) {\r\n\r\n            // flash: assign directly because setAutoPlay() increments the instanceCount\r\n            s._iO.autoPlay = true;\r\n            s.load(s._iO);\r\n\r\n          } else if (s.isHTML5) {\r\n\r\n            // iOS needs this when recycling sounds, loading a new URL on an existing object.\r\n            s.load(s._iO);\r\n\r\n          } else {\r\n\r\n            sm2._wD(fN + 'Unsupported type. Exiting.');\r\n\r\n            return s;\r\n\r\n          }\r\n\r\n          // HTML5 hack - re-set instanceOptions?\r\n          s.instanceOptions = s._iO;\r\n\r\n        } else if (s.readyState === 2) {\r\n\r\n          sm2._wD(fN + 'Could not load - exiting', 2);\r\n\r\n          return s;\r\n\r\n        } else {\r\n\r\n          sm2._wD(fN + 'Loading - attempting to play...');\r\n\r\n        }\r\n\r\n      } else {\r\n\r\n        // \"play()\"\r\n        sm2._wD(fN.substr(0, fN.lastIndexOf(':')));\r\n\r\n      }\r\n\r\n      if (!s.isHTML5 && fV === 9 && s.position > 0 && s.position === s.duration) {\r\n        // flash 9 needs a position reset if play() is called while at the end of a sound.\r\n        sm2._wD(fN + 'Sound at end, resetting to position: 0');\r\n        options.position = 0;\r\n      }\r\n\r\n      /**\r\n       * Streams will pause when their buffer is full if they are being loaded.\r\n       * In this case paused is true, but the song hasn't started playing yet.\r\n       * If we just call resume() the onplay() callback will never be called.\r\n       * So only call resume() if the position is > 0.\r\n       * Another reason is because options like volume won't have been applied yet.\r\n       * For normal sounds, just resume.\r\n       */\r\n\r\n      if (s.paused && s.position >= 0 && (!s._iO.serverURL || s.position > 0)) {\r\n\r\n        // https://gist.github.com/37b17df75cc4d7a90bf6\r\n        sm2._wD(fN + 'Resuming from paused state', 1);\r\n        s.resume();\r\n\r\n      } else {\r\n\r\n        s._iO = mixin(options, s._iO);\r\n\r\n        /**\r\n         * Preload in the event of play() with position under Flash,\r\n         * or from/to parameters and non-RTMP case\r\n         */\r\n        if (((!s.isHTML5 && s._iO.position !== null && s._iO.position > 0) || (s._iO.from !== null && s._iO.from > 0) || s._iO.to !== null) && s.instanceCount === 0 && s.playState === 0 && !s._iO.serverURL) {\r\n\r\n          onready = function() {\r\n            // sound \"canplay\" or onload()\r\n            // re-apply position/from/to to instance options, and start playback\r\n            s._iO = mixin(options, s._iO);\r\n            s.play(s._iO);\r\n          };\r\n\r\n          // HTML5 needs to at least have \"canplay\" fired before seeking.\r\n          if (s.isHTML5 && !s._html5_canplay) {\r\n\r\n            // this hasn't been loaded yet. load it first, and then do this again.\r\n            sm2._wD(fN + 'Beginning load for non-zero offset case');\r\n\r\n            s.load({\r\n              // note: custom HTML5-only event added for from/to implementation.\r\n              _oncanplay: onready\r\n            });\r\n\r\n          } else if (!s.isHTML5 && !s.loaded && (!s.readyState || s.readyState !== 2)) {\r\n\r\n            // to be safe, preload the whole thing in Flash.\r\n\r\n            sm2._wD(fN + 'Preloading for non-zero offset case');\r\n\r\n            s.load({\r\n              onload: onready\r\n            });\r\n\r\n          }\r\n\r\n          // otherwise, we're ready to go. re-apply local options, and continue\r\n\r\n          s._iO = applyFromTo();\r\n\r\n        }\r\n\r\n        // sm2._wD(fN + 'Starting to play');\r\n\r\n        // increment instance counter, where enabled + supported\r\n        if (!s.instanceCount || s._iO.multiShotEvents || (s.isHTML5 && s._iO.multiShot && !useGlobalHTML5Audio) || (!s.isHTML5 && fV > 8 && !s.getAutoPlay())) {\r\n          s.instanceCount++;\r\n        }\r\n\r\n        // if first play and onposition parameters exist, apply them now\r\n        if (s._iO.onposition && s.playState === 0) {\r\n          attachOnPosition(s);\r\n        }\r\n\r\n        s.playState = 1;\r\n        s.paused = false;\r\n\r\n        s.position = (s._iO.position !== _undefined && !isNaN(s._iO.position) ? s._iO.position : 0);\r\n\r\n        if (!s.isHTML5) {\r\n          s._iO = policyFix(loopFix(s._iO));\r\n        }\r\n\r\n        if (s._iO.onplay && _updatePlayState) {\r\n          s._iO.onplay.apply(s);\r\n          onplay_called = true;\r\n        }\r\n\r\n        s.setVolume(s._iO.volume, true);\r\n        s.setPan(s._iO.pan, true);\r\n\r\n        if (s._iO.playbackRate !== 1) {\r\n          s.setPlaybackRate(s._iO.playbackRate);\r\n        }\r\n\r\n        if (!s.isHTML5) {\r\n\r\n          startOK = flash._start(s.id, s._iO.loops || 1, (fV === 9 ? s.position : s.position / msecScale), s._iO.multiShot || false);\r\n\r\n          if (fV === 9 && !startOK) {\r\n            // edge case: no sound hardware, or 32-channel flash ceiling hit.\r\n            // applies only to Flash 9, non-NetStream/MovieStar sounds.\r\n            // http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Sound.html#play%28%29\r\n            sm2._wD(fN + 'No sound hardware, or 32-sound ceiling hit', 2);\r\n            if (s._iO.onplayerror) {\r\n              s._iO.onplayerror.apply(s);\r\n            }\r\n\r\n          }\r\n\r\n        } else if (s.instanceCount < 2) {\r\n\r\n            // HTML5 single-instance case\r\n\r\n            start_html5_timer();\r\n\r\n            a = s._setup_html5();\r\n\r\n            s.setPosition(s._iO.position);\r\n\r\n            a.play();\r\n\r\n          } else {\r\n\r\n            // HTML5 multi-shot case\r\n\r\n            sm2._wD(s.id + ': Cloning Audio() for instance #' + s.instanceCount + '...');\r\n\r\n            audioClone = new Audio(s._iO.url);\r\n\r\n            onended = function() {\r\n              event.remove(audioClone, 'ended', onended);\r\n              s._onfinish(s);\r\n              // cleanup\r\n              html5Unload(audioClone);\r\n              audioClone = null;\r\n            };\r\n\r\n            oncanplay = function() {\r\n              event.remove(audioClone, 'canplay', oncanplay);\r\n              try {\r\n                audioClone.currentTime = s._iO.position / msecScale;\r\n              } catch(err) {\r\n                complain(s.id + ': multiShot play() failed to apply position of ' + (s._iO.position / msecScale));\r\n              }\r\n              audioClone.play();\r\n            };\r\n\r\n            event.add(audioClone, 'ended', onended);\r\n\r\n            // apply volume to clones, too\r\n            if (s._iO.volume !== _undefined) {\r\n              audioClone.volume = Math.max(0, Math.min(1, s._iO.volume / 100));\r\n            }\r\n\r\n            // playing multiple muted sounds? if you do this, you're weird ;) - but let's cover it.\r\n            if (s.muted) {\r\n              audioClone.muted = true;\r\n            }\r\n\r\n            if (s._iO.position) {\r\n              // HTML5 audio can't seek before onplay() event has fired.\r\n              // wait for canplay, then seek to position and start playback.\r\n              event.add(audioClone, 'canplay', oncanplay);\r\n            } else {\r\n              // begin playback at currentTime: 0\r\n              audioClone.play();\r\n            }\r\n\r\n          }\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    // just for convenience\r\n    this.start = this.play;\r\n\r\n    /**\r\n     * Stops playing a sound (and optionally, all sounds)\r\n     *\r\n     * @param {boolean} bAll Optional: Whether to stop all sounds\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.stop = function(bAll) {\r\n\r\n      var instanceOptions = s._iO,\r\n          originalPosition;\r\n\r\n      if (s.playState === 1) {\r\n\r\n        sm2._wD(s.id + ': stop()');\r\n\r\n        s._onbufferchange(0);\r\n        s._resetOnPosition(0);\r\n        s.paused = false;\r\n\r\n        if (!s.isHTML5) {\r\n          s.playState = 0;\r\n        }\r\n\r\n        // remove onPosition listeners, if any\r\n        detachOnPosition();\r\n\r\n        // and \"to\" position, if set\r\n        if (instanceOptions.to) {\r\n          s.clearOnPosition(instanceOptions.to);\r\n        }\r\n\r\n        if (!s.isHTML5) {\r\n\r\n          flash._stop(s.id, bAll);\r\n\r\n          // hack for netStream: just unload\r\n          if (instanceOptions.serverURL) {\r\n            s.unload();\r\n          }\r\n\r\n        } else if (s._a) {\r\n\r\n            originalPosition = s.position;\r\n\r\n            // act like Flash, though\r\n            s.setPosition(0);\r\n\r\n            // hack: reflect old position for onstop() (also like Flash)\r\n            s.position = originalPosition;\r\n\r\n            // html5 has no stop()\r\n            // NOTE: pausing means iOS requires interaction to resume.\r\n            s._a.pause();\r\n\r\n            s.playState = 0;\r\n\r\n            // and update UI\r\n            s._onTimer();\r\n\r\n            stop_html5_timer();\r\n\r\n          }\r\n\r\n        s.instanceCount = 0;\r\n        s._iO = {};\r\n\r\n        if (instanceOptions.onstop) {\r\n          instanceOptions.onstop.apply(s);\r\n        }\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Undocumented/internal: Sets autoPlay for RTMP.\r\n     *\r\n     * @param {boolean} autoPlay state\r\n     */\r\n\r\n    this.setAutoPlay = function(autoPlay) {\r\n\r\n      sm2._wD(s.id + ': Autoplay turned ' + (autoPlay ? 'on' : 'off'));\r\n      s._iO.autoPlay = autoPlay;\r\n\r\n      if (!s.isHTML5) {\r\n        flash._setAutoPlay(s.id, autoPlay);\r\n        if (autoPlay) {\r\n          // only increment the instanceCount if the sound isn't loaded (TODO: verify RTMP)\r\n          if (!s.instanceCount && s.readyState === 1) {\r\n            s.instanceCount++;\r\n            sm2._wD(s.id + ': Incremented instance count to ' + s.instanceCount);\r\n          }\r\n        }\r\n      }\r\n\r\n    };\r\n\r\n    /**\r\n     * Undocumented/internal: Returns the autoPlay boolean.\r\n     *\r\n     * @return {boolean} The current autoPlay value\r\n     */\r\n\r\n    this.getAutoPlay = function() {\r\n\r\n      return s._iO.autoPlay;\r\n\r\n    };\r\n\r\n    /**\r\n     * Sets the playback rate of a sound (HTML5-only.)\r\n     *\r\n     * @param {number} playbackRate (+/-)\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.setPlaybackRate = function(playbackRate) {\r\n\r\n      // Per Mozilla, limit acceptable values to prevent playback from stopping (unless allowOverride is truthy.)\r\n      // https://developer.mozilla.org/en-US/Apps/Build/Audio_and_video_delivery/WebAudio_playbackRate_explained\r\n      var normalizedRate = Math.max(0.5, Math.min(4, playbackRate));\r\n\r\n      // <d>\r\n      if (normalizedRate !== playbackRate) {\r\n        sm2._wD(s.id + ': setPlaybackRate(' + playbackRate + '): limiting rate to ' + normalizedRate, 2);\r\n      }\r\n      // </d>\r\n\r\n      if (s.isHTML5) {\r\n        try {\r\n          s._iO.playbackRate = normalizedRate;\r\n          s._a.playbackRate = normalizedRate;\r\n        } catch(e) {\r\n          sm2._wD(s.id + ': setPlaybackRate(' + normalizedRate + ') failed: ' + e.message, 2);\r\n        }\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Sets the position of a sound.\r\n     *\r\n     * @param {number} nMsecOffset Position (milliseconds)\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.setPosition = function(nMsecOffset) {\r\n\r\n      if (nMsecOffset === _undefined) {\r\n        nMsecOffset = 0;\r\n      }\r\n\r\n      var position, position1K,\r\n          // Use the duration from the instance options, if we don't have a track duration yet.\r\n          // position >= 0 and <= current available (loaded) duration\r\n          offset = (s.isHTML5 ? Math.max(nMsecOffset, 0) : Math.min(s.duration || s._iO.duration, Math.max(nMsecOffset, 0)));\r\n\r\n      s.position = offset;\r\n      position1K = s.position / msecScale;\r\n      s._resetOnPosition(s.position);\r\n      s._iO.position = offset;\r\n\r\n      if (!s.isHTML5) {\r\n\r\n        position = (fV === 9 ? s.position : position1K);\r\n\r\n        if (s.readyState && s.readyState !== 2) {\r\n          // if paused or not playing, will not resume (by playing)\r\n          flash._setPosition(s.id, position, (s.paused || !s.playState), s._iO.multiShot);\r\n        }\r\n\r\n      } else if (s._a) {\r\n\r\n        // Set the position in the canplay handler if the sound is not ready yet\r\n        if (s._html5_canplay) {\r\n\r\n          if (s._a.currentTime.toFixed(3) !== position1K.toFixed(3)) {\r\n\r\n            /**\r\n             * DOM/JS errors/exceptions to watch out for:\r\n             * if seek is beyond (loaded?) position, \"DOM exception 11\"\r\n             * \"INDEX_SIZE_ERR\": DOM exception 1\r\n             */\r\n            sm2._wD(s.id + ': setPosition(' + position1K + ')');\r\n\r\n            try {\r\n              s._a.currentTime = position1K;\r\n              if (s.playState === 0 || s.paused) {\r\n                // allow seek without auto-play/resume\r\n                s._a.pause();\r\n              }\r\n            } catch(e) {\r\n              sm2._wD(s.id + ': setPosition(' + position1K + ') failed: ' + e.message, 2);\r\n            }\r\n\r\n          }\r\n\r\n        } else if (position1K) {\r\n\r\n          // warn on non-zero seek attempts\r\n          sm2._wD(s.id + ': setPosition(' + position1K + '): Cannot seek yet, sound not ready', 2);\r\n          return s;\r\n\r\n        }\r\n\r\n        if (s.paused) {\r\n\r\n          // if paused, refresh UI right away by forcing update\r\n          s._onTimer(true);\r\n\r\n        }\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Pauses sound playback.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.pause = function(_bCallFlash) {\r\n\r\n      if (s.paused || (s.playState === 0 && s.readyState !== 1)) return s;\r\n\r\n      sm2._wD(s.id + ': pause()');\r\n      s.paused = true;\r\n\r\n      if (!s.isHTML5) {\r\n        if (_bCallFlash || _bCallFlash === _undefined) {\r\n          flash._pause(s.id, s._iO.multiShot);\r\n        }\r\n      } else {\r\n        s._setup_html5().pause();\r\n        stop_html5_timer();\r\n      }\r\n\r\n      if (s._iO.onpause) {\r\n        s._iO.onpause.apply(s);\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Resumes sound playback.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    /**\r\n     * When auto-loaded streams pause on buffer full they have a playState of 0.\r\n     * We need to make sure that the playState is set to 1 when these streams \"resume\".\r\n     * When a paused stream is resumed, we need to trigger the onplay() callback if it\r\n     * hasn't been called already. In this case since the sound is being played for the\r\n     * first time, I think it's more appropriate to call onplay() rather than onresume().\r\n     */\r\n\r\n    this.resume = function() {\r\n\r\n      var instanceOptions = s._iO;\r\n\r\n      if (!s.paused) return s;\r\n\r\n      sm2._wD(s.id + ': resume()');\r\n      s.paused = false;\r\n      s.playState = 1;\r\n\r\n      if (!s.isHTML5) {\r\n\r\n        if (instanceOptions.isMovieStar && !instanceOptions.serverURL) {\r\n          // Bizarre Webkit bug (Chrome reported via 8tracks.com dudes): AAC content paused for 30+ seconds(?) will not resume without a reposition.\r\n          s.setPosition(s.position);\r\n        }\r\n\r\n        // flash method is toggle-based (pause/resume)\r\n        flash._pause(s.id, instanceOptions.multiShot);\r\n\r\n      } else {\r\n\r\n        s._setup_html5().play();\r\n        start_html5_timer();\r\n\r\n      }\r\n\r\n      if (!onplay_called && instanceOptions.onplay) {\r\n\r\n        instanceOptions.onplay.apply(s);\r\n        onplay_called = true;\r\n\r\n      } else if (instanceOptions.onresume) {\r\n\r\n        instanceOptions.onresume.apply(s);\r\n\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Toggles sound playback.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.togglePause = function() {\r\n\r\n      sm2._wD(s.id + ': togglePause()');\r\n\r\n      if (s.playState === 0) {\r\n        s.play({\r\n          position: (fV === 9 && !s.isHTML5 ? s.position : s.position / msecScale)\r\n        });\r\n        return s;\r\n      }\r\n\r\n      if (s.paused) {\r\n        s.resume();\r\n      } else {\r\n        s.pause();\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Sets the panning (L-R) effect.\r\n     *\r\n     * @param {number} nPan The pan value (-100 to 100)\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.setPan = function(nPan, bInstanceOnly) {\r\n\r\n      if (nPan === _undefined) {\r\n        nPan = 0;\r\n      }\r\n\r\n      if (bInstanceOnly === _undefined) {\r\n        bInstanceOnly = false;\r\n      }\r\n\r\n      if (!s.isHTML5) {\r\n        flash._setPan(s.id, nPan);\r\n      } // else { no HTML5 pan? }\r\n\r\n      s._iO.pan = nPan;\r\n\r\n      if (!bInstanceOnly) {\r\n        s.pan = nPan;\r\n        s.options.pan = nPan;\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Sets the volume.\r\n     *\r\n     * @param {number} nVol The volume value (0 to 100)\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.setVolume = function(nVol, _bInstanceOnly) {\r\n\r\n      /**\r\n       * Note: Setting volume has no effect on iOS \"special snowflake\" devices.\r\n       * Hardware volume control overrides software, and volume\r\n       * will always return 1 per Apple docs. (iOS 4 + 5.)\r\n       * http://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/AddingSoundtoCanvasAnimations/AddingSoundtoCanvasAnimations.html\r\n       */\r\n\r\n      if (nVol === _undefined) {\r\n        nVol = 100;\r\n      }\r\n\r\n      if (_bInstanceOnly === _undefined) {\r\n        _bInstanceOnly = false;\r\n      }\r\n\r\n      if (!s.isHTML5) {\r\n\r\n        flash._setVolume(s.id, (sm2.muted && !s.muted) || s.muted ? 0 : nVol);\r\n\r\n      } else if (s._a) {\r\n\r\n        if (sm2.muted && !s.muted) {\r\n          s.muted = true;\r\n          s._a.muted = true;\r\n        }\r\n\r\n        // valid range for native HTML5 Audio(): 0-1\r\n        s._a.volume = Math.max(0, Math.min(1, nVol / 100));\r\n\r\n      }\r\n\r\n      s._iO.volume = nVol;\r\n\r\n      if (!_bInstanceOnly) {\r\n        s.volume = nVol;\r\n        s.options.volume = nVol;\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Mutes the sound.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.mute = function() {\r\n\r\n      s.muted = true;\r\n\r\n      if (!s.isHTML5) {\r\n        flash._setVolume(s.id, 0);\r\n      } else if (s._a) {\r\n        s._a.muted = true;\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Unmutes the sound.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.unmute = function() {\r\n\r\n      s.muted = false;\r\n      var hasIO = (s._iO.volume !== _undefined);\r\n\r\n      if (!s.isHTML5) {\r\n        flash._setVolume(s.id, hasIO ? s._iO.volume : s.options.volume);\r\n      } else if (s._a) {\r\n        s._a.muted = false;\r\n      }\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    /**\r\n     * Toggles the muted state of a sound.\r\n     *\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.toggleMute = function() {\r\n\r\n      return (s.muted ? s.unmute() : s.mute());\r\n\r\n    };\r\n\r\n    /**\r\n     * Registers a callback to be fired when a sound reaches a given position during playback.\r\n     *\r\n     * @param {number} nPosition The position to watch for\r\n     * @param {function} oMethod The relevant callback to fire\r\n     * @param {object} oScope Optional: The scope to apply the callback to\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.onPosition = function(nPosition, oMethod, oScope) {\r\n\r\n      // TODO: basic dupe checking?\r\n\r\n      onPositionItems.push({\r\n        position: parseInt(nPosition, 10),\r\n        method: oMethod,\r\n        scope: (oScope !== _undefined ? oScope : s),\r\n        fired: false\r\n      });\r\n\r\n      return s;\r\n\r\n    };\r\n\r\n    // legacy/backwards-compability: lower-case method name\r\n    this.onposition = this.onPosition;\r\n\r\n    /**\r\n     * Removes registered callback(s) from a sound, by position and/or callback.\r\n     *\r\n     * @param {number} nPosition The position to clear callback(s) for\r\n     * @param {function} oMethod Optional: Identify one callback to be removed when multiple listeners exist for one position\r\n     * @return {SMSound} The SMSound object\r\n     */\r\n\r\n    this.clearOnPosition = function(nPosition, oMethod) {\r\n\r\n      var i;\r\n\r\n      nPosition = parseInt(nPosition, 10);\r\n\r\n      if (isNaN(nPosition)) {\r\n        // safety check\r\n        return;\r\n      }\r\n\r\n      for (i = 0; i < onPositionItems.length; i++) {\r\n\r\n        if (nPosition === onPositionItems[i].position) {\r\n          // remove this item if no method was specified, or, if the method matches\r\n\r\n          if (!oMethod || (oMethod === onPositionItems[i].method)) {\r\n\r\n            if (onPositionItems[i].fired) {\r\n              // decrement \"fired\" counter, too\r\n              onPositionFired--;\r\n            }\r\n\r\n            onPositionItems.splice(i, 1);\r\n\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this._processOnPosition = function() {\r\n\r\n      var i, item, j = onPositionItems.length;\r\n\r\n      if (!j || !s.playState || onPositionFired >= j) return false;\r\n\r\n      for (i = j - 1; i >= 0; i--) {\r\n\r\n        item = onPositionItems[i];\r\n\r\n        if (!item.fired && s.position >= item.position) {\r\n\r\n          item.fired = true;\r\n          onPositionFired++;\r\n          item.method.apply(item.scope, [item.position]);\r\n\r\n          //  reset j -- onPositionItems.length can be changed in the item callback above... occasionally breaking the loop.\r\n          j = onPositionItems.length;\r\n\r\n        }\r\n\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    this._resetOnPosition = function(nPosition) {\r\n\r\n      // reset \"fired\" for items interested in this position\r\n      var i, item, j = onPositionItems.length;\r\n\r\n      if (!j) return false;\r\n\r\n      for (i = j - 1; i >= 0; i--) {\r\n\r\n        item = onPositionItems[i];\r\n\r\n        if (item.fired && nPosition <= item.position) {\r\n          item.fired = false;\r\n          onPositionFired--;\r\n        }\r\n\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    /**\r\n     * SMSound() private internals\r\n     * --------------------------------\r\n     */\r\n\r\n    applyFromTo = function() {\r\n\r\n      var instanceOptions = s._iO,\r\n          f = instanceOptions.from,\r\n          t = instanceOptions.to,\r\n          start, end;\r\n\r\n      end = function() {\r\n\r\n        // end has been reached.\r\n        sm2._wD(s.id + ': \"To\" time of ' + t + ' reached.');\r\n\r\n        // detach listener\r\n        s.clearOnPosition(t, end);\r\n\r\n        // stop should clear this, too\r\n        s.stop();\r\n\r\n      };\r\n\r\n      start = function() {\r\n\r\n        sm2._wD(s.id + ': Playing \"from\" ' + f);\r\n\r\n        // add listener for end\r\n        if (t !== null && !isNaN(t)) {\r\n          s.onPosition(t, end);\r\n        }\r\n\r\n      };\r\n\r\n      if (f !== null && !isNaN(f)) {\r\n\r\n        // apply to instance options, guaranteeing correct start position.\r\n        instanceOptions.position = f;\r\n\r\n        // multiShot timing can't be tracked, so prevent that.\r\n        instanceOptions.multiShot = false;\r\n\r\n        start();\r\n\r\n      }\r\n\r\n      // return updated instanceOptions including starting position\r\n      return instanceOptions;\r\n\r\n    };\r\n\r\n    attachOnPosition = function() {\r\n\r\n      var item,\r\n          op = s._iO.onposition;\r\n\r\n      // attach onposition things, if any, now.\r\n\r\n      if (op) {\r\n\r\n        for (item in op) {\r\n          if (op.hasOwnProperty(item)) {\r\n            s.onPosition(parseInt(item, 10), op[item]);\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    detachOnPosition = function() {\r\n\r\n      var item,\r\n          op = s._iO.onposition;\r\n\r\n      // detach any onposition()-style listeners.\r\n\r\n      if (op) {\r\n\r\n        for (item in op) {\r\n          if (op.hasOwnProperty(item)) {\r\n            s.clearOnPosition(parseInt(item, 10));\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    start_html5_timer = function() {\r\n\r\n      if (s.isHTML5) {\r\n        startTimer(s);\r\n      }\r\n\r\n    };\r\n\r\n    stop_html5_timer = function() {\r\n\r\n      if (s.isHTML5) {\r\n        stopTimer(s);\r\n      }\r\n\r\n    };\r\n\r\n    resetProperties = function(retainPosition) {\r\n\r\n      if (!retainPosition) {\r\n        onPositionItems = [];\r\n        onPositionFired = 0;\r\n      }\r\n\r\n      onplay_called = false;\r\n\r\n      s._hasTimer = null;\r\n      s._a = null;\r\n      s._html5_canplay = false;\r\n      s.bytesLoaded = null;\r\n      s.bytesTotal = null;\r\n      s.duration = (s._iO && s._iO.duration ? s._iO.duration : null);\r\n      s.durationEstimate = null;\r\n      s.buffered = [];\r\n\r\n      // legacy: 1D array\r\n      s.eqData = [];\r\n\r\n      s.eqData.left = [];\r\n      s.eqData.right = [];\r\n\r\n      s.failures = 0;\r\n      s.isBuffering = false;\r\n      s.instanceOptions = {};\r\n      s.instanceCount = 0;\r\n      s.loaded = false;\r\n      s.metadata = {};\r\n\r\n      // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success\r\n      s.readyState = 0;\r\n\r\n      s.muted = false;\r\n      s.paused = false;\r\n\r\n      s.peakData = {\r\n        left: 0,\r\n        right: 0\r\n      };\r\n\r\n      s.waveformData = {\r\n        left: [],\r\n        right: []\r\n      };\r\n\r\n      s.playState = 0;\r\n      s.position = null;\r\n\r\n      s.id3 = {};\r\n\r\n    };\r\n\r\n    resetProperties();\r\n\r\n    /**\r\n     * Pseudo-private SMSound internals\r\n     * --------------------------------\r\n     */\r\n\r\n    this._onTimer = function(bForce) {\r\n\r\n      /**\r\n       * HTML5-only _whileplaying() etc.\r\n       * called from both HTML5 native events, and polling/interval-based timers\r\n       * mimics flash and fires only when time/duration change, so as to be polling-friendly\r\n       */\r\n\r\n      var duration, isNew = false, time, x = {};\r\n\r\n      if (s._hasTimer || bForce) {\r\n\r\n        // TODO: May not need to track readyState (1 = loading)\r\n\r\n        if (s._a && (bForce || ((s.playState > 0 || s.readyState === 1) && !s.paused))) {\r\n\r\n          duration = s._get_html5_duration();\r\n\r\n          if (duration !== lastHTML5State.duration) {\r\n\r\n            lastHTML5State.duration = duration;\r\n            s.duration = duration;\r\n            isNew = true;\r\n\r\n          }\r\n\r\n          // TODO: investigate why this goes wack if not set/re-set each time.\r\n          s.durationEstimate = s.duration;\r\n\r\n          time = (s._a.currentTime * msecScale || 0);\r\n\r\n          if (time !== lastHTML5State.time) {\r\n\r\n            lastHTML5State.time = time;\r\n            isNew = true;\r\n\r\n          }\r\n\r\n          if (isNew || bForce) {\r\n\r\n            s._whileplaying(time, x, x, x, x);\r\n\r\n          }\r\n\r\n        }/* else {\r\n\r\n          // sm2._wD('_onTimer: Warn for \"'+s.id+'\": '+(!s._a?'Could not find element. ':'')+(s.playState === 0?'playState bad, 0?':'playState = '+s.playState+', OK'));\r\n\r\n          return false;\r\n\r\n        }*/\r\n\r\n      }\r\n\r\n      return isNew;\r\n\r\n    };\r\n\r\n    this._get_html5_duration = function() {\r\n\r\n      var instanceOptions = s._iO,\r\n          // if audio object exists, use its duration - else, instance option duration (if provided - it's a hack, really, and should be retired) OR null\r\n          d = (s._a && s._a.duration ? s._a.duration * msecScale : (instanceOptions && instanceOptions.duration ? instanceOptions.duration : null)),\r\n          result = (d && !isNaN(d) && d !== Infinity ? d : null);\r\n\r\n      return result;\r\n\r\n    };\r\n\r\n    this._apply_loop = function(a, nLoops) {\r\n\r\n      /**\r\n       * boolean instead of \"loop\", for webkit? - spec says string. http://www.w3.org/TR/html-markup/audio.html#audio.attrs.loop\r\n       * note that loop is either off or infinite under HTML5, unlike Flash which allows arbitrary loop counts to be specified.\r\n       */\r\n\r\n      // <d>\r\n      if (!a.loop && nLoops > 1) {\r\n        sm2._wD('Note: Native HTML5 looping is infinite.', 1);\r\n      }\r\n      // </d>\r\n\r\n      a.loop = (nLoops > 1 ? 'loop' : '');\r\n\r\n    };\r\n\r\n    this._setup_html5 = function(options) {\r\n\r\n      var instanceOptions = mixin(s._iO, options),\r\n          a = useGlobalHTML5Audio ? globalHTML5Audio : s._a,\r\n          dURL = decodeURI(instanceOptions.url),\r\n          sameURL;\r\n\r\n      /**\r\n       * \"First things first, I, Poppa...\" (reset the previous state of the old sound, if playing)\r\n       * Fixes case with devices that can only play one sound at a time\r\n       * Otherwise, other sounds in mid-play will be terminated without warning and in a stuck state\r\n       */\r\n\r\n      if (useGlobalHTML5Audio) {\r\n\r\n        if (dURL === decodeURI(lastGlobalHTML5URL)) {\r\n          // global HTML5 audio: re-use of URL\r\n          sameURL = true;\r\n        }\r\n\r\n      } else if (dURL === decodeURI(lastURL)) {\r\n\r\n        // options URL is the same as the \"last\" URL, and we used (loaded) it\r\n        sameURL = true;\r\n\r\n      }\r\n\r\n      if (a) {\r\n\r\n        if (a._s) {\r\n\r\n          if (useGlobalHTML5Audio) {\r\n\r\n            if (a._s && a._s.playState && !sameURL) {\r\n\r\n              // global HTML5 audio case, and loading a new URL. stop the currently-playing one.\r\n              a._s.stop();\r\n\r\n            }\r\n\r\n          } else if (!useGlobalHTML5Audio && dURL === decodeURI(lastURL)) {\r\n\r\n            // non-global HTML5 reuse case: same url, ignore request\r\n            s._apply_loop(a, instanceOptions.loops);\r\n\r\n            return a;\r\n\r\n          }\r\n\r\n        }\r\n\r\n        if (!sameURL) {\r\n\r\n          // don't retain onPosition() stuff with new URLs.\r\n\r\n          if (lastURL) {\r\n            resetProperties(false);\r\n          }\r\n\r\n          // assign new HTML5 URL\r\n\r\n          a.src = instanceOptions.url;\r\n\r\n          s.url = instanceOptions.url;\r\n\r\n          lastURL = instanceOptions.url;\r\n\r\n          lastGlobalHTML5URL = instanceOptions.url;\r\n\r\n          a._called_load = false;\r\n\r\n        }\r\n\r\n      } else {\r\n\r\n        if (instanceOptions.autoLoad || instanceOptions.autoPlay) {\r\n\r\n          s._a = new Audio(instanceOptions.url);\r\n          s._a.load();\r\n\r\n        } else {\r\n\r\n          // null for stupid Opera 9.64 case\r\n          s._a = (isOpera && opera.version() < 10 ? new Audio(null) : new Audio());\r\n\r\n        }\r\n\r\n        // assign local reference\r\n        a = s._a;\r\n\r\n        a._called_load = false;\r\n\r\n        if (useGlobalHTML5Audio) {\r\n\r\n          globalHTML5Audio = a;\r\n\r\n        }\r\n\r\n      }\r\n\r\n      s.isHTML5 = true;\r\n\r\n      // store a ref on the track\r\n      s._a = a;\r\n\r\n      // store a ref on the audio\r\n      a._s = s;\r\n\r\n      add_html5_events();\r\n\r\n      s._apply_loop(a, instanceOptions.loops);\r\n\r\n      if (instanceOptions.autoLoad || instanceOptions.autoPlay) {\r\n\r\n        s.load();\r\n\r\n      } else {\r\n\r\n        // early HTML5 implementation (non-standard)\r\n        a.autobuffer = false;\r\n\r\n        // standard ('none' is also an option.)\r\n        a.preload = 'auto';\r\n\r\n      }\r\n\r\n      return a;\r\n\r\n    };\r\n\r\n    add_html5_events = function() {\r\n\r\n      if (s._a._added_events) return false;\r\n\r\n      var f;\r\n\r\n      function add(oEvt, oFn, bCapture) {\r\n        return s._a ? s._a.addEventListener(oEvt, oFn, bCapture || false) : null;\r\n      }\r\n\r\n      s._a._added_events = true;\r\n\r\n      for (f in html5_events) {\r\n        if (html5_events.hasOwnProperty(f)) {\r\n          add(f, html5_events[f]);\r\n        }\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    remove_html5_events = function() {\r\n\r\n      // Remove event listeners\r\n\r\n      var f;\r\n\r\n      function remove(oEvt, oFn, bCapture) {\r\n        return (s._a ? s._a.removeEventListener(oEvt, oFn, bCapture || false) : null);\r\n      }\r\n\r\n      sm2._wD(s.id + ': Removing event listeners');\r\n      s._a._added_events = false;\r\n\r\n      for (f in html5_events) {\r\n        if (html5_events.hasOwnProperty(f)) {\r\n          remove(f, html5_events[f]);\r\n        }\r\n      }\r\n\r\n    };\r\n\r\n    /**\r\n     * Pseudo-private event internals\r\n     * ------------------------------\r\n     */\r\n\r\n    this._onload = function(nSuccess) {\r\n\r\n      var fN,\r\n          // check for duration to prevent false positives from flash 8 when loading from cache.\r\n          loadOK = !!nSuccess || (!s.isHTML5 && fV === 8 && s.duration);\r\n\r\n      // <d>\r\n      fN = s.id + ': ';\r\n      sm2._wD(fN + (loadOK ? 'onload()' : 'Failed to load / invalid sound?' + (!s.duration ? ' Zero-length duration reported.' : ' -') + ' (' + s.url + ')'), (loadOK ? 1 : 2));\r\n\r\n      if (!loadOK && !s.isHTML5) {\r\n        if (sm2.sandbox.noRemote === true) {\r\n          sm2._wD(fN + str('noNet'), 1);\r\n        }\r\n        if (sm2.sandbox.noLocal === true) {\r\n          sm2._wD(fN + str('noLocal'), 1);\r\n        }\r\n      }\r\n      // </d>\r\n\r\n      s.loaded = loadOK;\r\n      s.readyState = (loadOK ? 3 : 2);\r\n      s._onbufferchange(0);\r\n\r\n      if (!loadOK && !s.isHTML5) {\r\n        // note: no error code from Flash.\r\n        s._onerror();\r\n      }\r\n\r\n      if (s._iO.onload) {\r\n        wrapCallback(s, function() {\r\n          s._iO.onload.apply(s, [loadOK]);\r\n        });\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    this._onerror = function(errorCode, description) {\r\n\r\n      // https://html.spec.whatwg.org/multipage/embedded-content.html#error-codes\r\n      if (s._iO.onerror) {\r\n        wrapCallback(s, function() {\r\n          s._iO.onerror.apply(s, [errorCode, description]);\r\n        });\r\n      }\r\n\r\n    };\r\n\r\n    this._onbufferchange = function(nIsBuffering) {\r\n\r\n      // ignore if not playing\r\n      if (s.playState === 0) return false;\r\n\r\n      if ((nIsBuffering && s.isBuffering) || (!nIsBuffering && !s.isBuffering)) return false;\r\n\r\n      s.isBuffering = (nIsBuffering === 1);\r\n\r\n      if (s._iO.onbufferchange) {\r\n        sm2._wD(s.id + ': Buffer state change: ' + nIsBuffering);\r\n        s._iO.onbufferchange.apply(s, [nIsBuffering]);\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    /**\r\n     * Playback may have stopped due to buffering, or related reason.\r\n     * This state can be encountered on iOS < 6 when auto-play is blocked.\r\n     */\r\n\r\n    this._onsuspend = function() {\r\n\r\n      if (s._iO.onsuspend) {\r\n        sm2._wD(s.id + ': Playback suspended');\r\n        s._iO.onsuspend.apply(s);\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    /**\r\n     * flash 9/movieStar + RTMP-only method, should fire only once at most\r\n     * at this point we just recreate failed sounds rather than trying to reconnect\r\n     */\r\n\r\n    this._onfailure = function(msg, level, code) {\r\n\r\n      s.failures++;\r\n      sm2._wD(s.id + ': Failure (' + s.failures + '): ' + msg);\r\n\r\n      if (s._iO.onfailure && s.failures === 1) {\r\n        s._iO.onfailure(msg, level, code);\r\n      } else {\r\n        sm2._wD(s.id + ': Ignoring failure');\r\n      }\r\n\r\n    };\r\n\r\n    /**\r\n     * flash 9/movieStar + RTMP-only method for unhandled warnings/exceptions from Flash\r\n     * e.g., RTMP \"method missing\" warning (non-fatal) for getStreamLength on server\r\n     */\r\n\r\n    this._onwarning = function(msg, level, code) {\r\n\r\n      if (s._iO.onwarning) {\r\n        s._iO.onwarning(msg, level, code);\r\n      }\r\n\r\n    };\r\n\r\n    this._onfinish = function() {\r\n\r\n      // store local copy before it gets trashed...\r\n      var io_onfinish = s._iO.onfinish;\r\n\r\n      s._onbufferchange(0);\r\n      s._resetOnPosition(0);\r\n\r\n      // reset some state items\r\n      if (s.instanceCount) {\r\n\r\n        s.instanceCount--;\r\n\r\n        if (!s.instanceCount) {\r\n\r\n          // remove onPosition listeners, if any\r\n          detachOnPosition();\r\n\r\n          // reset instance options\r\n          s.playState = 0;\r\n          s.paused = false;\r\n          s.instanceCount = 0;\r\n          s.instanceOptions = {};\r\n          s._iO = {};\r\n          stop_html5_timer();\r\n\r\n          // reset position, too\r\n          if (s.isHTML5) {\r\n            s.position = 0;\r\n          }\r\n\r\n        }\r\n\r\n        if (!s.instanceCount || s._iO.multiShotEvents) {\r\n          // fire onfinish for last, or every instance\r\n          if (io_onfinish) {\r\n            sm2._wD(s.id + ': onfinish()');\r\n            wrapCallback(s, function() {\r\n              io_onfinish.apply(s);\r\n            });\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this._whileloading = function(nBytesLoaded, nBytesTotal, nDuration, nBufferLength) {\r\n\r\n      var instanceOptions = s._iO;\r\n\r\n      s.bytesLoaded = nBytesLoaded;\r\n      s.bytesTotal = nBytesTotal;\r\n      s.duration = Math.floor(nDuration);\r\n      s.bufferLength = nBufferLength;\r\n\r\n      if (!s.isHTML5 && !instanceOptions.isMovieStar) {\r\n\r\n        if (instanceOptions.duration) {\r\n          // use duration from options, if specified and larger. nobody should be specifying duration in options, actually, and it should be retired.\r\n          s.durationEstimate = (s.duration > instanceOptions.duration) ? s.duration : instanceOptions.duration;\r\n        } else {\r\n          s.durationEstimate = parseInt((s.bytesTotal / s.bytesLoaded) * s.duration, 10);\r\n        }\r\n\r\n      } else {\r\n\r\n        s.durationEstimate = s.duration;\r\n\r\n      }\r\n\r\n      // for flash, reflect sequential-load-style buffering\r\n      if (!s.isHTML5) {\r\n        s.buffered = [{\r\n          start: 0,\r\n          end: s.duration\r\n        }];\r\n      }\r\n\r\n      // allow whileloading to fire even if \"load\" fired under HTML5, due to HTTP range/partials\r\n      if ((s.readyState !== 3 || s.isHTML5) && instanceOptions.whileloading) {\r\n        instanceOptions.whileloading.apply(s);\r\n      }\r\n\r\n    };\r\n\r\n    this._whileplaying = function(nPosition, oPeakData, oWaveformDataLeft, oWaveformDataRight, oEQData) {\r\n\r\n      var instanceOptions = s._iO,\r\n          eqLeft;\r\n\r\n      // flash safety net\r\n      if (isNaN(nPosition) || nPosition === null) return false;\r\n\r\n      // Safari HTML5 play() may return small -ve values when starting from position: 0, eg. -50.120396875. Unexpected/invalid per W3, I think. Normalize to 0.\r\n      s.position = Math.max(0, nPosition);\r\n\r\n      s._processOnPosition();\r\n\r\n      if (!s.isHTML5 && fV > 8) {\r\n\r\n        if (instanceOptions.usePeakData && oPeakData !== _undefined && oPeakData) {\r\n          s.peakData = {\r\n            left: oPeakData.leftPeak,\r\n            right: oPeakData.rightPeak\r\n          };\r\n        }\r\n\r\n        if (instanceOptions.useWaveformData && oWaveformDataLeft !== _undefined && oWaveformDataLeft) {\r\n          s.waveformData = {\r\n            left: oWaveformDataLeft.split(','),\r\n            right: oWaveformDataRight.split(',')\r\n          };\r\n        }\r\n\r\n        if (instanceOptions.useEQData) {\r\n          if (oEQData !== _undefined && oEQData && oEQData.leftEQ) {\r\n            eqLeft = oEQData.leftEQ.split(',');\r\n            s.eqData = eqLeft;\r\n            s.eqData.left = eqLeft;\r\n            if (oEQData.rightEQ !== _undefined && oEQData.rightEQ) {\r\n              s.eqData.right = oEQData.rightEQ.split(',');\r\n            }\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n      if (s.playState === 1) {\r\n\r\n        // special case/hack: ensure buffering is false if loading from cache (and not yet started)\r\n        if (!s.isHTML5 && fV === 8 && !s.position && s.isBuffering) {\r\n          s._onbufferchange(0);\r\n        }\r\n\r\n        if (instanceOptions.whileplaying) {\r\n          // flash may call after actual finish\r\n          instanceOptions.whileplaying.apply(s);\r\n        }\r\n\r\n      }\r\n\r\n      return true;\r\n\r\n    };\r\n\r\n    this._oncaptiondata = function(oData) {\r\n\r\n      /**\r\n       * internal: flash 9 + NetStream (MovieStar/RTMP-only) feature\r\n       *\r\n       * @param {object} oData\r\n       */\r\n\r\n      sm2._wD(s.id + ': Caption data received.');\r\n\r\n      s.captiondata = oData;\r\n\r\n      if (s._iO.oncaptiondata) {\r\n        s._iO.oncaptiondata.apply(s, [oData]);\r\n      }\r\n\r\n    };\r\n\r\n    this._onmetadata = function(oMDProps, oMDData) {\r\n\r\n      /**\r\n       * internal: flash 9 + NetStream (MovieStar/RTMP-only) feature\r\n       * RTMP may include song title, MovieStar content may include encoding info\r\n       *\r\n       * @param {array} oMDProps (names)\r\n       * @param {array} oMDData (values)\r\n       */\r\n\r\n      sm2._wD(s.id + ': Metadata received.');\r\n\r\n      var oData = {}, i, j;\r\n\r\n      for (i = 0, j = oMDProps.length; i < j; i++) {\r\n        oData[oMDProps[i]] = oMDData[i];\r\n      }\r\n\r\n      s.metadata = oData;\r\n\r\n      if (s._iO.onmetadata) {\r\n        s._iO.onmetadata.call(s, s.metadata);\r\n      }\r\n\r\n    };\r\n\r\n    this._onid3 = function(oID3Props, oID3Data) {\r\n\r\n      /**\r\n       * internal: flash 8 + flash 9 ID3 feature\r\n       * may include artist, song title etc.\r\n       *\r\n       * @param {array} oID3Props (names)\r\n       * @param {array} oID3Data (values)\r\n       */\r\n\r\n      sm2._wD(s.id + ': ID3 data received.');\r\n\r\n      var oData = [], i, j;\r\n\r\n      for (i = 0, j = oID3Props.length; i < j; i++) {\r\n        oData[oID3Props[i]] = oID3Data[i];\r\n      }\r\n\r\n      s.id3 = mixin(s.id3, oData);\r\n\r\n      if (s._iO.onid3) {\r\n        s._iO.onid3.apply(s);\r\n      }\r\n\r\n    };\r\n\r\n    // flash/RTMP-only\r\n\r\n    this._onconnect = function(bSuccess) {\r\n\r\n      bSuccess = (bSuccess === 1);\r\n      sm2._wD(s.id + ': ' + (bSuccess ? 'Connected.' : 'Failed to connect? - ' + s.url), (bSuccess ? 1 : 2));\r\n      s.connected = bSuccess;\r\n\r\n      if (bSuccess) {\r\n\r\n        s.failures = 0;\r\n\r\n        if (idCheck(s.id)) {\r\n          if (s.getAutoPlay()) {\r\n            // only update the play state if auto playing\r\n            s.play(_undefined, s.getAutoPlay());\r\n          } else if (s._iO.autoLoad) {\r\n            s.load();\r\n          }\r\n        }\r\n\r\n        if (s._iO.onconnect) {\r\n          s._iO.onconnect.apply(s, [bSuccess]);\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this._ondataerror = function(sError) {\r\n\r\n      // flash 9 wave/eq data handler\r\n      // hack: called at start, and end from flash at/after onfinish()\r\n      if (s.playState > 0) {\r\n        sm2._wD(s.id + ': Data error: ' + sError);\r\n        if (s._iO.ondataerror) {\r\n          s._iO.ondataerror.apply(s);\r\n        }\r\n      }\r\n\r\n    };\r\n\r\n    // <d>\r\n    this._debug();\r\n    // </d>\r\n\r\n  }; // SMSound()\r\n\r\n  /**\r\n   * Private SoundManager internals\r\n   * ------------------------------\r\n   */\r\n\r\n  getDocument = function() {\r\n\r\n    return (doc.body || doc.getElementsByTagName('div')[0]);\r\n\r\n  };\r\n\r\n  id = function(sID) {\r\n\r\n    return doc.getElementById(sID);\r\n\r\n  };\r\n\r\n  mixin = function(oMain, oAdd) {\r\n\r\n    // non-destructive merge\r\n    var o1 = (oMain || {}), o2, o;\r\n\r\n    // if unspecified, o2 is the default options object\r\n    o2 = (oAdd === _undefined ? sm2.defaultOptions : oAdd);\r\n\r\n    for (o in o2) {\r\n\r\n      if (o2.hasOwnProperty(o) && o1[o] === _undefined) {\r\n\r\n        if (typeof o2[o] !== 'object' || o2[o] === null) {\r\n\r\n          // assign directly\r\n          o1[o] = o2[o];\r\n\r\n        } else {\r\n\r\n          // recurse through o2\r\n          o1[o] = mixin(o1[o], o2[o]);\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return o1;\r\n\r\n  };\r\n\r\n  wrapCallback = function(oSound, callback) {\r\n\r\n    /**\r\n     * 03/03/2013: Fix for Flash Player 11.6.602.171 + Flash 8 (flashVersion = 8) SWF issue\r\n     * setTimeout() fix for certain SMSound callbacks like onload() and onfinish(), where subsequent calls like play() and load() fail when Flash Player 11.6.602.171 is installed, and using soundManager with flashVersion = 8 (which is the default).\r\n     * Not sure of exact cause. Suspect race condition and/or invalid (NaN-style) position argument trickling down to the next JS -> Flash _start() call, in the play() case.\r\n     * Fix: setTimeout() to yield, plus safer null / NaN checking on position argument provided to Flash.\r\n     * https://getsatisfaction.com/schillmania/topics/recent_chrome_update_seems_to_have_broken_my_sm2_audio_player\r\n     */\r\n    if (!oSound.isHTML5 && fV === 8) {\r\n      window.setTimeout(callback, 0);\r\n    } else {\r\n      callback();\r\n    }\r\n\r\n  };\r\n\r\n  // additional soundManager properties that soundManager.setup() will accept\r\n\r\n  extraOptions = {\r\n    onready: 1,\r\n    ontimeout: 1,\r\n    defaultOptions: 1,\r\n    flash9Options: 1,\r\n    movieStarOptions: 1\r\n  };\r\n\r\n  assign = function(o, oParent) {\r\n\r\n    /**\r\n     * recursive assignment of properties, soundManager.setup() helper\r\n     * allows property assignment based on whitelist\r\n     */\r\n\r\n    var i,\r\n        result = true,\r\n        hasParent = (oParent !== _undefined),\r\n        setupOptions = sm2.setupOptions,\r\n        bonusOptions = extraOptions;\r\n\r\n    // <d>\r\n\r\n    // if soundManager.setup() called, show accepted parameters.\r\n\r\n    if (o === _undefined) {\r\n\r\n      result = [];\r\n\r\n      for (i in setupOptions) {\r\n\r\n        if (setupOptions.hasOwnProperty(i)) {\r\n          result.push(i);\r\n        }\r\n\r\n      }\r\n\r\n      for (i in bonusOptions) {\r\n\r\n        if (bonusOptions.hasOwnProperty(i)) {\r\n\r\n          if (typeof sm2[i] === 'object') {\r\n            result.push(i + ': {...}');\r\n          } else if (sm2[i] instanceof Function) {\r\n            result.push(i + ': function() {...}');\r\n          } else {\r\n            result.push(i);\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n      sm2._wD(str('setup', result.join(', ')));\r\n\r\n      return false;\r\n\r\n    }\r\n\r\n    // </d>\r\n\r\n    for (i in o) {\r\n\r\n      if (o.hasOwnProperty(i)) {\r\n\r\n        // if not an {object} we want to recurse through...\r\n\r\n        if (typeof o[i] !== 'object' || o[i] === null || o[i] instanceof Array || o[i] instanceof RegExp) {\r\n\r\n          // check \"allowed\" options\r\n\r\n          if (hasParent && bonusOptions[oParent] !== _undefined) {\r\n\r\n            // valid recursive / nested object option, eg., { defaultOptions: { volume: 50 } }\r\n            sm2[oParent][i] = o[i];\r\n\r\n          } else if (setupOptions[i] !== _undefined) {\r\n\r\n            // special case: assign to setupOptions object, which soundManager property references\r\n            sm2.setupOptions[i] = o[i];\r\n\r\n            // assign directly to soundManager, too\r\n            sm2[i] = o[i];\r\n\r\n          } else if (bonusOptions[i] === _undefined) {\r\n\r\n            // invalid or disallowed parameter. complain.\r\n            complain(str((sm2[i] === _undefined ? 'setupUndef' : 'setupError'), i), 2);\r\n\r\n            result = false;\r\n\r\n          } else if (sm2[i] instanceof Function) {\r\n\r\n            /**\r\n             * valid extraOptions (bonusOptions) parameter.\r\n             * is it a method, like onready/ontimeout? call it.\r\n             * multiple parameters should be in an array, eg. soundManager.setup({onready: [myHandler, myScope]});\r\n             */\r\n            sm2[i].apply(sm2, (o[i] instanceof Array ? o[i] : [o[i]]));\r\n\r\n          } else {\r\n\r\n            // good old-fashioned direct assignment\r\n            sm2[i] = o[i];\r\n\r\n          }\r\n\r\n        } else if (bonusOptions[i] === _undefined) {\r\n\r\n          // recursion case, eg., { defaultOptions: { ... } }\r\n\r\n          // invalid or disallowed parameter. complain.\r\n          complain(str((sm2[i] === _undefined ? 'setupUndef' : 'setupError'), i), 2);\r\n\r\n          result = false;\r\n\r\n        } else {\r\n\r\n          // recurse through object\r\n          return assign(o[i], i);\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  function preferFlashCheck(kind) {\r\n\r\n    // whether flash should play a given type\r\n    return (sm2.preferFlash && hasFlash && !sm2.ignoreFlash && (sm2.flash[kind] !== _undefined && sm2.flash[kind]));\r\n\r\n  }\r\n\r\n  /**\r\n   * Internal DOM2-level event helpers\r\n   * ---------------------------------\r\n   */\r\n\r\n  event = (function() {\r\n\r\n    // normalize event methods\r\n    var old = (window.attachEvent),\r\n    evt = {\r\n      add: (old ? 'attachEvent' : 'addEventListener'),\r\n      remove: (old ? 'detachEvent' : 'removeEventListener')\r\n    };\r\n\r\n    // normalize \"on\" event prefix, optional capture argument\r\n    function getArgs(oArgs) {\r\n\r\n      var args = slice.call(oArgs),\r\n          len = args.length;\r\n\r\n      if (old) {\r\n        // prefix\r\n        args[1] = 'on' + args[1];\r\n        if (len > 3) {\r\n          // no capture\r\n          args.pop();\r\n        }\r\n      } else if (len === 3) {\r\n        args.push(false);\r\n      }\r\n\r\n      return args;\r\n\r\n    }\r\n\r\n    function apply(args, sType) {\r\n\r\n      // normalize and call the event method, with the proper arguments\r\n      var element = args.shift(),\r\n          method = [evt[sType]];\r\n\r\n      if (old) {\r\n        // old IE can't do apply().\r\n        element[method](args[0], args[1]);\r\n      } else {\r\n        element[method].apply(element, args);\r\n      }\r\n\r\n    }\r\n\r\n    function add() {\r\n      apply(getArgs(arguments), 'add');\r\n    }\r\n\r\n    function remove() {\r\n      apply(getArgs(arguments), 'remove');\r\n    }\r\n\r\n    return {\r\n      add: add,\r\n      remove: remove\r\n    };\r\n\r\n  }());\r\n\r\n  /**\r\n   * Internal HTML5 event handling\r\n   * -----------------------------\r\n   */\r\n\r\n  function html5_event(oFn) {\r\n\r\n    // wrap html5 event handlers so we don't call them on destroyed and/or unloaded sounds\r\n\r\n    return function(e) {\r\n\r\n      var s = this._s,\r\n          result;\r\n\r\n      if (!s || !s._a) {\r\n        // <d>\r\n        if (s && s.id) {\r\n          sm2._wD(s.id + ': Ignoring ' + e.type);\r\n        } else {\r\n          sm2._wD(h5 + 'Ignoring ' + e.type);\r\n        }\r\n        // </d>\r\n        result = null;\r\n      } else {\r\n        result = oFn.call(this, e);\r\n      }\r\n\r\n      return result;\r\n\r\n    };\r\n\r\n  }\r\n\r\n  html5_events = {\r\n\r\n    // HTML5 event-name-to-handler map\r\n\r\n    abort: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': abort');\r\n\r\n    }),\r\n\r\n    // enough has loaded to play\r\n\r\n    canplay: html5_event(function() {\r\n\r\n      var s = this._s,\r\n          position1K;\r\n\r\n      if (s._html5_canplay) {\r\n        // this event has already fired. ignore.\r\n        return;\r\n      }\r\n\r\n      s._html5_canplay = true;\r\n      sm2._wD(s.id + ': canplay');\r\n      s._onbufferchange(0);\r\n\r\n      // position according to instance options\r\n      position1K = (s._iO.position !== _undefined && !isNaN(s._iO.position) ? s._iO.position / msecScale : null);\r\n\r\n      // set the position if position was provided before the sound loaded\r\n      if (this.currentTime !== position1K) {\r\n        sm2._wD(s.id + ': canplay: Setting position to ' + position1K);\r\n        try {\r\n          this.currentTime = position1K;\r\n        } catch(ee) {\r\n          sm2._wD(s.id + ': canplay: Setting position of ' + position1K + ' failed: ' + ee.message, 2);\r\n        }\r\n      }\r\n\r\n      // hack for HTML5 from/to case\r\n      if (s._iO._oncanplay) {\r\n        s._iO._oncanplay();\r\n      }\r\n\r\n    }),\r\n\r\n    canplaythrough: html5_event(function() {\r\n\r\n      var s = this._s;\r\n\r\n      if (!s.loaded) {\r\n        s._onbufferchange(0);\r\n        s._whileloading(s.bytesLoaded, s.bytesTotal, s._get_html5_duration());\r\n        s._onload(true);\r\n      }\r\n\r\n    }),\r\n\r\n    durationchange: html5_event(function() {\r\n\r\n      // durationchange may fire at various times, probably the safest way to capture accurate/final duration.\r\n\r\n      var s = this._s,\r\n          duration;\r\n\r\n      duration = s._get_html5_duration();\r\n\r\n      if (!isNaN(duration) && duration !== s.duration) {\r\n\r\n        sm2._wD(this._s.id + ': durationchange (' + duration + ')' + (s.duration ? ', previously ' + s.duration : ''));\r\n\r\n        s.durationEstimate = s.duration = duration;\r\n\r\n      }\r\n\r\n    }),\r\n\r\n    // TODO: Reserved for potential use\r\n    /*\r\n    emptied: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': emptied');\r\n\r\n    }),\r\n    */\r\n\r\n    ended: html5_event(function() {\r\n\r\n      var s = this._s;\r\n\r\n      sm2._wD(s.id + ': ended');\r\n\r\n      s._onfinish();\r\n\r\n    }),\r\n\r\n    error: html5_event(function() {\r\n\r\n      var description = (html5ErrorCodes[this.error.code] || null);\r\n      sm2._wD(this._s.id + ': HTML5 error, code ' + this.error.code + (description ? ' (' + description + ')' : ''));\r\n      this._s._onload(false);\r\n      this._s._onerror(this.error.code, description);\r\n\r\n    }),\r\n\r\n    loadeddata: html5_event(function() {\r\n\r\n      var s = this._s;\r\n\r\n      sm2._wD(s.id + ': loadeddata');\r\n\r\n      // safari seems to nicely report progress events, eventually totalling 100%\r\n      if (!s._loaded && !isSafari) {\r\n        s.duration = s._get_html5_duration();\r\n      }\r\n\r\n    }),\r\n\r\n    loadedmetadata: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': loadedmetadata');\r\n\r\n    }),\r\n\r\n    loadstart: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': loadstart');\r\n      // assume buffering at first\r\n      this._s._onbufferchange(1);\r\n\r\n    }),\r\n\r\n    play: html5_event(function() {\r\n\r\n      // sm2._wD(this._s.id + ': play()');\r\n      // once play starts, no buffering\r\n      this._s._onbufferchange(0);\r\n\r\n    }),\r\n\r\n    playing: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': playing ' + String.fromCharCode(9835));\r\n      // once play starts, no buffering\r\n      this._s._onbufferchange(0);\r\n\r\n    }),\r\n\r\n    progress: html5_event(function(e) {\r\n\r\n      // note: can fire repeatedly after \"loaded\" event, due to use of HTTP range/partials\r\n\r\n      var s = this._s,\r\n          i, j, progStr, buffered = 0,\r\n          isProgress = (e.type === 'progress'),\r\n          ranges = e.target.buffered,\r\n          // firefox 3.6 implements e.loaded/total (bytes)\r\n          loaded = (e.loaded || 0),\r\n          total = (e.total || 1);\r\n\r\n      // reset the \"buffered\" (loaded byte ranges) array\r\n      s.buffered = [];\r\n\r\n      if (ranges && ranges.length) {\r\n\r\n        // if loaded is 0, try TimeRanges implementation as % of load\r\n        // https://developer.mozilla.org/en/DOM/TimeRanges\r\n\r\n        // re-build \"buffered\" array\r\n        // HTML5 returns seconds. SM2 API uses msec for setPosition() etc., whether Flash or HTML5.\r\n        for (i = 0, j = ranges.length; i < j; i++) {\r\n          s.buffered.push({\r\n            start: ranges.start(i) * msecScale,\r\n            end: ranges.end(i) * msecScale\r\n          });\r\n        }\r\n\r\n        // use the last value locally\r\n        buffered = (ranges.end(0) - ranges.start(0)) * msecScale;\r\n\r\n        // linear case, buffer sum; does not account for seeking and HTTP partials / byte ranges\r\n        loaded = Math.min(1, buffered / (e.target.duration * msecScale));\r\n\r\n        // <d>\r\n        if (isProgress && ranges.length > 1) {\r\n          progStr = [];\r\n          j = ranges.length;\r\n          for (i = 0; i < j; i++) {\r\n            progStr.push((e.target.buffered.start(i) * msecScale) + '-' + (e.target.buffered.end(i) * msecScale));\r\n          }\r\n          sm2._wD(this._s.id + ': progress, timeRanges: ' + progStr.join(', '));\r\n        }\r\n\r\n        if (isProgress && !isNaN(loaded)) {\r\n          sm2._wD(this._s.id + ': progress, ' + Math.floor(loaded * 100) + '% loaded');\r\n        }\r\n        // </d>\r\n\r\n      }\r\n\r\n      if (!isNaN(loaded)) {\r\n\r\n        // TODO: prevent calls with duplicate values.\r\n        s._whileloading(loaded, total, s._get_html5_duration());\r\n        if (loaded && total && loaded === total) {\r\n          // in case \"onload\" doesn't fire (eg. gecko 1.9.2)\r\n          html5_events.canplaythrough.call(this, e);\r\n        }\r\n\r\n      }\r\n\r\n    }),\r\n\r\n    ratechange: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': ratechange');\r\n\r\n    }),\r\n\r\n    suspend: html5_event(function(e) {\r\n\r\n      // download paused/stopped, may have finished (eg. onload)\r\n      var s = this._s;\r\n\r\n      sm2._wD(this._s.id + ': suspend');\r\n      html5_events.progress.call(this, e);\r\n      s._onsuspend();\r\n\r\n    }),\r\n\r\n    stalled: html5_event(function() {\r\n\r\n      sm2._wD(this._s.id + ': stalled');\r\n\r\n    }),\r\n\r\n    timeupdate: html5_event(function() {\r\n\r\n      this._s._onTimer();\r\n\r\n    }),\r\n\r\n    waiting: html5_event(function() {\r\n\r\n      var s = this._s;\r\n\r\n      // see also: seeking\r\n      sm2._wD(this._s.id + ': waiting');\r\n\r\n      // playback faster than download rate, etc.\r\n      s._onbufferchange(1);\r\n\r\n    })\r\n\r\n  };\r\n\r\n  html5OK = function(iO) {\r\n\r\n    // playability test based on URL or MIME type\r\n\r\n    var result;\r\n\r\n    if (!iO || (!iO.type && !iO.url && !iO.serverURL)) {\r\n\r\n      // nothing to check\r\n      result = false;\r\n\r\n    } else if (iO.serverURL || (iO.type && preferFlashCheck(iO.type))) {\r\n\r\n      // RTMP, or preferring flash\r\n      result = false;\r\n\r\n    } else {\r\n\r\n      // Use type, if specified. Pass data: URIs to HTML5. If HTML5-only mode, no other options, so just give 'er\r\n      result = ((iO.type ? html5CanPlay({ type: iO.type }) : html5CanPlay({ url: iO.url }) || sm2.html5Only || iO.url.match(/data:/i)));\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  html5Unload = function(oAudio) {\r\n\r\n    /**\r\n     * Internal method: Unload media, and cancel any current/pending network requests.\r\n     * Firefox can load an empty URL, which allegedly destroys the decoder and stops the download.\r\n     * https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox#Stopping_the_download_of_media\r\n     * However, Firefox has been seen loading a relative URL from '' and thus requesting the hosting page on unload.\r\n     * Other UA behaviour is unclear, so everyone else gets an about:blank-style URL.\r\n     */\r\n\r\n    var url;\r\n\r\n    if (oAudio) {\r\n\r\n      // Firefox and Chrome accept short WAVe data: URIs. Chome dislikes audio/wav, but accepts audio/wav for data: MIME.\r\n      // Desktop Safari complains / fails on data: URI, so it gets about:blank.\r\n      url = (isSafari ? emptyURL : (sm2.html5.canPlayType('audio/wav') ? emptyWAV : emptyURL));\r\n\r\n      oAudio.src = url;\r\n\r\n      // reset some state, too\r\n      if (oAudio._called_unload !== _undefined) {\r\n        oAudio._called_load = false;\r\n      }\r\n\r\n    }\r\n\r\n    if (useGlobalHTML5Audio) {\r\n\r\n      // ensure URL state is trashed, also\r\n      lastGlobalHTML5URL = null;\r\n\r\n    }\r\n\r\n    return url;\r\n\r\n  };\r\n\r\n  html5CanPlay = function(o) {\r\n\r\n    /**\r\n     * Try to find MIME, test and return truthiness\r\n     * o = {\r\n     *  url: '/path/to/an.mp3',\r\n     *  type: 'audio/mp3'\r\n     * }\r\n     */\r\n\r\n    if (!sm2.useHTML5Audio || !sm2.hasHTML5) return false;\r\n\r\n    var url = (o.url || null),\r\n        mime = (o.type || null),\r\n        aF = sm2.audioFormats,\r\n        result,\r\n        offset,\r\n        fileExt,\r\n        item;\r\n\r\n    // account for known cases like audio/mp3\r\n\r\n    if (mime && sm2.html5[mime] !== _undefined) return (sm2.html5[mime] && !preferFlashCheck(mime));\r\n\r\n    if (!html5Ext) {\r\n\r\n      html5Ext = [];\r\n\r\n      for (item in aF) {\r\n\r\n        if (aF.hasOwnProperty(item)) {\r\n\r\n          html5Ext.push(item);\r\n\r\n          if (aF[item].related) {\r\n            html5Ext = html5Ext.concat(aF[item].related);\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n      html5Ext = new RegExp('\\\\.(' + html5Ext.join('|') + ')(\\\\?.*)?$', 'i');\r\n\r\n    }\r\n\r\n    // TODO: Strip URL queries, etc.\r\n    fileExt = (url ? url.toLowerCase().match(html5Ext) : null);\r\n\r\n    if (!fileExt || !fileExt.length) {\r\n\r\n      if (!mime) {\r\n\r\n        result = false;\r\n\r\n      } else {\r\n\r\n        // audio/mp3 -> mp3, result should be known\r\n        offset = mime.indexOf(';');\r\n\r\n        // strip \"audio/X; codecs...\"\r\n        fileExt = (offset !== -1 ? mime.substr(0, offset) : mime).substr(6);\r\n\r\n      }\r\n\r\n    } else {\r\n\r\n      // match the raw extension name - \"mp3\", for example\r\n      fileExt = fileExt[1];\r\n\r\n    }\r\n\r\n    if (fileExt && sm2.html5[fileExt] !== _undefined) {\r\n\r\n      // result known\r\n      result = (sm2.html5[fileExt] && !preferFlashCheck(fileExt));\r\n\r\n    } else {\r\n\r\n      mime = 'audio/' + fileExt;\r\n      result = sm2.html5.canPlayType({ type: mime });\r\n\r\n      sm2.html5[fileExt] = result;\r\n\r\n      // sm2._wD('canPlayType, found result: ' + result);\r\n      result = (result && sm2.html5[mime] && !preferFlashCheck(mime));\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  testHTML5 = function() {\r\n\r\n    /**\r\n     * Internal: Iterates over audioFormats, determining support eg. audio/mp3, audio/mpeg and so on\r\n     * assigns results to html5[] and flash[].\r\n     */\r\n\r\n    if (!sm2.useHTML5Audio || !sm2.hasHTML5) {\r\n\r\n      // without HTML5, we need Flash.\r\n      sm2.html5.usingFlash = true;\r\n      needsFlash = true;\r\n\r\n      return false;\r\n\r\n    }\r\n\r\n    // double-whammy: Opera 9.64 throws WRONG_ARGUMENTS_ERR if no parameter passed to Audio(), and Webkit + iOS happily tries to load \"null\" as a URL. :/\r\n    var a = (Audio !== _undefined ? (isOpera && opera.version() < 10 ? new Audio(null) : new Audio()) : null),\r\n        item, lookup, support = {}, aF, i;\r\n\r\n    function cp(m) {\r\n\r\n      var canPlay, j,\r\n          result = false,\r\n          isOK = false;\r\n\r\n      if (!a || typeof a.canPlayType !== 'function') return result;\r\n\r\n      if (m instanceof Array) {\r\n\r\n        // iterate through all mime types, return any successes\r\n\r\n        for (i = 0, j = m.length; i < j; i++) {\r\n\r\n          if (sm2.html5[m[i]] || a.canPlayType(m[i]).match(sm2.html5Test)) {\r\n\r\n            isOK = true;\r\n            sm2.html5[m[i]] = true;\r\n\r\n            // note flash support, too\r\n            sm2.flash[m[i]] = !!(m[i].match(flashMIME));\r\n\r\n          }\r\n\r\n        }\r\n\r\n        result = isOK;\r\n\r\n      } else {\r\n\r\n        canPlay = (a && typeof a.canPlayType === 'function' ? a.canPlayType(m) : false);\r\n        result = !!(canPlay && (canPlay.match(sm2.html5Test)));\r\n\r\n      }\r\n\r\n      return result;\r\n\r\n    }\r\n\r\n    // test all registered formats + codecs\r\n\r\n    aF = sm2.audioFormats;\r\n\r\n    for (item in aF) {\r\n\r\n      if (aF.hasOwnProperty(item)) {\r\n\r\n        lookup = 'audio/' + item;\r\n\r\n        support[item] = cp(aF[item].type);\r\n\r\n        // write back generic type too, eg. audio/mp3\r\n        support[lookup] = support[item];\r\n\r\n        // assign flash\r\n        if (item.match(flashMIME)) {\r\n\r\n          sm2.flash[item] = true;\r\n          sm2.flash[lookup] = true;\r\n\r\n        } else {\r\n\r\n          sm2.flash[item] = false;\r\n          sm2.flash[lookup] = false;\r\n\r\n        }\r\n\r\n        // assign result to related formats, too\r\n\r\n        if (aF[item] && aF[item].related) {\r\n\r\n          for (i = aF[item].related.length - 1; i >= 0; i--) {\r\n\r\n            // eg. audio/m4a\r\n            support['audio/' + aF[item].related[i]] = support[item];\r\n            sm2.html5[aF[item].related[i]] = support[item];\r\n            sm2.flash[aF[item].related[i]] = support[item];\r\n\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    support.canPlayType = (a ? cp : null);\r\n    sm2.html5 = mixin(sm2.html5, support);\r\n\r\n    sm2.html5.usingFlash = featureCheck();\r\n    needsFlash = sm2.html5.usingFlash;\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  strings = {\r\n\r\n    // <d>\r\n    notReady: 'Unavailable - wait until onready() has fired.',\r\n    notOK: 'Audio support is not available.',\r\n    domError: sm + 'exception caught while appending SWF to DOM.',\r\n    spcWmode: 'Removing wmode, preventing known SWF loading issue(s)',\r\n    swf404: smc + 'Verify that %s is a valid path.',\r\n    tryDebug: 'Try ' + sm + '.debugFlash = true for more security details (output goes to SWF.)',\r\n    checkSWF: 'See SWF output for more debug info.',\r\n    localFail: smc + 'Non-HTTP page (' + doc.location.protocol + ' URL?) Review Flash player security settings for this special case:\\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/',\r\n    waitFocus: smc + 'Special case: Waiting for SWF to load with window focus...',\r\n    waitForever: smc + 'Waiting indefinitely for Flash (will recover if unblocked)...',\r\n    waitSWF: smc + 'Waiting for 100% SWF load...',\r\n    needFunction: smc + 'Function object expected for %s',\r\n    badID: 'Sound ID \"%s\" should be a string, starting with a non-numeric character',\r\n    currentObj: smc + '_debug(): Current sound objects',\r\n    waitOnload: smc + 'Waiting for window.onload()',\r\n    docLoaded: smc + 'Document already loaded',\r\n    onload: smc + 'initComplete(): calling soundManager.onload()',\r\n    onloadOK: sm + '.onload() complete',\r\n    didInit: smc + 'init(): Already called?',\r\n    secNote: 'Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html',\r\n    badRemove: smc + 'Failed to remove Flash node.',\r\n    shutdown: sm + '.disable(): Shutting down',\r\n    queue: smc + 'Queueing %s handler',\r\n    smError: 'SMSound.load(): Exception: JS-Flash communication failed, or JS error.',\r\n    fbTimeout: 'No flash response, applying .' + swfCSS.swfTimedout + ' CSS...',\r\n    fbLoaded: 'Flash loaded',\r\n    fbHandler: smc + 'flashBlockHandler()',\r\n    manURL: 'SMSound.load(): Using manually-assigned URL',\r\n    onURL: sm + '.load(): current URL already assigned.',\r\n    badFV: sm + '.flashVersion must be 8 or 9. \"%s\" is invalid. Reverting to %s.',\r\n    as2loop: 'Note: Setting stream:false so looping can work (flash 8 limitation)',\r\n    noNSLoop: 'Note: Looping not implemented for MovieStar formats',\r\n    needfl9: 'Note: Switching to flash 9, required for MP4 formats.',\r\n    mfTimeout: 'Setting flashLoadTimeout = 0 (infinite) for off-screen, mobile flash case',\r\n    needFlash: smc + 'Fatal error: Flash is needed to play some required formats, but is not available.',\r\n    gotFocus: smc + 'Got window focus.',\r\n    policy: 'Enabling usePolicyFile for data access',\r\n    setup: sm + '.setup(): allowed parameters: %s',\r\n    setupError: sm + '.setup(): \"%s\" cannot be assigned with this method.',\r\n    setupUndef: sm + '.setup(): Could not find option \"%s\"',\r\n    setupLate: sm + '.setup(): url, flashVersion and html5Test property changes will not take effect until reboot().',\r\n    noURL: smc + 'Flash URL required. Call soundManager.setup({url:...}) to get started.',\r\n    sm2Loaded: 'SoundManager 2: Ready. ' + String.fromCharCode(10003),\r\n    reset: sm + '.reset(): Removing event callbacks',\r\n    mobileUA: 'Mobile UA detected, preferring HTML5 by default.',\r\n    globalHTML5: 'Using singleton HTML5 Audio() pattern for this device.',\r\n    ignoreMobile: 'Ignoring mobile restrictions for this device.'\r\n    // </d>\r\n\r\n  };\r\n\r\n  str = function() {\r\n\r\n    // internal string replace helper.\r\n    // arguments: o [,items to replace]\r\n    // <d>\r\n\r\n    var args,\r\n        i, j, o,\r\n        sstr;\r\n\r\n    // real array, please\r\n    args = slice.call(arguments);\r\n\r\n    // first argument\r\n    o = args.shift();\r\n\r\n    sstr = (strings && strings[o] ? strings[o] : '');\r\n\r\n    if (sstr && args && args.length) {\r\n      for (i = 0, j = args.length; i < j; i++) {\r\n        sstr = sstr.replace('%s', args[i]);\r\n      }\r\n    }\r\n\r\n    return sstr;\r\n    // </d>\r\n\r\n  };\r\n\r\n  loopFix = function(sOpt) {\r\n\r\n    // flash 8 requires stream = false for looping to work\r\n    if (fV === 8 && sOpt.loops > 1 && sOpt.stream) {\r\n      _wDS('as2loop');\r\n      sOpt.stream = false;\r\n    }\r\n\r\n    return sOpt;\r\n\r\n  };\r\n\r\n  policyFix = function(sOpt, sPre) {\r\n\r\n    if (sOpt && !sOpt.usePolicyFile && (sOpt.onid3 || sOpt.usePeakData || sOpt.useWaveformData || sOpt.useEQData)) {\r\n      sm2._wD((sPre || '') + str('policy'));\r\n      sOpt.usePolicyFile = true;\r\n    }\r\n\r\n    return sOpt;\r\n\r\n  };\r\n\r\n  complain = function(sMsg) {\r\n\r\n    // <d>\r\n    if (hasConsole && console.warn !== _undefined) {\r\n      console.warn(sMsg);\r\n    } else {\r\n      sm2._wD(sMsg);\r\n    }\r\n    // </d>\r\n\r\n  };\r\n\r\n  doNothing = function() {\r\n\r\n    return false;\r\n\r\n  };\r\n\r\n  disableObject = function(o) {\r\n\r\n    var oProp;\r\n\r\n    for (oProp in o) {\r\n      if (o.hasOwnProperty(oProp) && typeof o[oProp] === 'function') {\r\n        o[oProp] = doNothing;\r\n      }\r\n    }\r\n\r\n    oProp = null;\r\n\r\n  };\r\n\r\n  failSafely = function(bNoDisable) {\r\n\r\n    // general failure exception handler\r\n\r\n    if (bNoDisable === _undefined) {\r\n      bNoDisable = false;\r\n    }\r\n\r\n    if (disabled || bNoDisable) {\r\n      sm2.disable(bNoDisable);\r\n    }\r\n\r\n  };\r\n\r\n  normalizeMovieURL = function(movieURL) {\r\n\r\n    var urlParams = null, url;\r\n\r\n    if (movieURL) {\r\n\r\n      if (movieURL.match(/\\.swf(\\?.*)?$/i)) {\r\n\r\n        urlParams = movieURL.substr(movieURL.toLowerCase().lastIndexOf('.swf?') + 4);\r\n\r\n        // assume user knows what they're doing\r\n        if (urlParams) return movieURL;\r\n\r\n      } else if (movieURL.lastIndexOf('/') !== movieURL.length - 1) {\r\n\r\n        // append trailing slash, if needed\r\n        movieURL += '/';\r\n\r\n      }\r\n\r\n    }\r\n\r\n    url = (movieURL && movieURL.lastIndexOf('/') !== -1 ? movieURL.substr(0, movieURL.lastIndexOf('/') + 1) : './') + sm2.movieURL;\r\n\r\n    if (sm2.noSWFCache) {\r\n      url += ('?ts=' + new Date().getTime());\r\n    }\r\n\r\n    return url;\r\n\r\n  };\r\n\r\n  setVersionInfo = function() {\r\n\r\n    // short-hand for internal use\r\n\r\n    fV = parseInt(sm2.flashVersion, 10);\r\n\r\n    if (fV !== 8 && fV !== 9) {\r\n      sm2._wD(str('badFV', fV, defaultFlashVersion));\r\n      sm2.flashVersion = fV = defaultFlashVersion;\r\n    }\r\n\r\n    // debug flash movie, if applicable\r\n\r\n    var isDebug = (sm2.debugMode || sm2.debugFlash ? '_debug.swf' : '.swf');\r\n\r\n    if (sm2.useHTML5Audio && !sm2.html5Only && sm2.audioFormats.mp4.required && fV < 9) {\r\n      sm2._wD(str('needfl9'));\r\n      sm2.flashVersion = fV = 9;\r\n    }\r\n\r\n    sm2.version = sm2.versionNumber + (sm2.html5Only ? ' (HTML5-only mode)' : (fV === 9 ? ' (AS3/Flash 9)' : ' (AS2/Flash 8)'));\r\n\r\n    // set up default options\r\n    if (fV > 8) {\r\n\r\n      // +flash 9 base options\r\n      sm2.defaultOptions = mixin(sm2.defaultOptions, sm2.flash9Options);\r\n      sm2.features.buffering = true;\r\n\r\n      // +moviestar support\r\n      sm2.defaultOptions = mixin(sm2.defaultOptions, sm2.movieStarOptions);\r\n      sm2.filePatterns.flash9 = new RegExp('\\\\.(mp3|' + netStreamTypes.join('|') + ')(\\\\?.*)?$', 'i');\r\n      sm2.features.movieStar = true;\r\n\r\n    } else {\r\n\r\n      sm2.features.movieStar = false;\r\n\r\n    }\r\n\r\n    // regExp for flash canPlay(), etc.\r\n    sm2.filePattern = sm2.filePatterns[(fV !== 8 ? 'flash9' : 'flash8')];\r\n\r\n    // if applicable, use _debug versions of SWFs\r\n    sm2.movieURL = (fV === 8 ? 'soundmanager2.swf' : 'soundmanager2_flash9.swf').replace('.swf', isDebug);\r\n\r\n    sm2.features.peakData = sm2.features.waveformData = sm2.features.eqData = (fV > 8);\r\n\r\n  };\r\n\r\n  setPolling = function(bPolling, bHighPerformance) {\r\n\r\n    if (!flash) {\r\n      return;\r\n    }\r\n\r\n    flash._setPolling(bPolling, bHighPerformance);\r\n\r\n  };\r\n\r\n  initDebug = function() {\r\n\r\n    // starts debug mode, creating output <div> for UAs without console object\r\n\r\n    // allow force of debug mode via URL\r\n    // <d>\r\n    if (sm2.debugURLParam.test(wl)) {\r\n      sm2.setupOptions.debugMode = sm2.debugMode = true;\r\n    }\r\n\r\n    if (id(sm2.debugID)) {\r\n      return;\r\n    }\r\n\r\n    var oD, oDebug, oTarget, oToggle, tmp;\r\n\r\n    if (sm2.debugMode && !id(sm2.debugID) && (!hasConsole || !sm2.useConsole || !sm2.consoleOnly)) {\r\n\r\n      oD = doc.createElement('div');\r\n      oD.id = sm2.debugID + '-toggle';\r\n\r\n      oToggle = {\r\n        position: 'fixed',\r\n        bottom: '0px',\r\n        right: '0px',\r\n        width: '1.2em',\r\n        height: '1.2em',\r\n        lineHeight: '1.2em',\r\n        margin: '2px',\r\n        textAlign: 'center',\r\n        border: '1px solid #999',\r\n        cursor: 'pointer',\r\n        background: '#fff',\r\n        color: '#333',\r\n        zIndex: 10001\r\n      };\r\n\r\n      oD.appendChild(doc.createTextNode('-'));\r\n      oD.onclick = toggleDebug;\r\n      oD.title = 'Toggle SM2 debug console';\r\n\r\n      if (ua.match(/msie 6/i)) {\r\n        oD.style.position = 'absolute';\r\n        oD.style.cursor = 'hand';\r\n      }\r\n\r\n      for (tmp in oToggle) {\r\n        if (oToggle.hasOwnProperty(tmp)) {\r\n          oD.style[tmp] = oToggle[tmp];\r\n        }\r\n      }\r\n\r\n      oDebug = doc.createElement('div');\r\n      oDebug.id = sm2.debugID;\r\n      oDebug.style.display = (sm2.debugMode ? 'block' : 'none');\r\n\r\n      if (sm2.debugMode && !id(oD.id)) {\r\n        try {\r\n          oTarget = getDocument();\r\n          oTarget.appendChild(oD);\r\n        } catch(e2) {\r\n          throw new Error(str('domError') + ' \\n' + e2.toString());\r\n        }\r\n        oTarget.appendChild(oDebug);\r\n      }\r\n\r\n    }\r\n\r\n    oTarget = null;\r\n    // </d>\r\n\r\n  };\r\n\r\n  idCheck = this.getSoundById;\r\n\r\n  // <d>\r\n  _wDS = function(o, errorLevel) {\r\n\r\n    return (!o ? '' : sm2._wD(str(o), errorLevel));\r\n\r\n  };\r\n\r\n  toggleDebug = function() {\r\n\r\n    var o = id(sm2.debugID),\r\n    oT = id(sm2.debugID + '-toggle');\r\n\r\n    if (!o) {\r\n      return;\r\n    }\r\n\r\n    if (debugOpen) {\r\n      // minimize\r\n      oT.innerHTML = '+';\r\n      o.style.display = 'none';\r\n    } else {\r\n      oT.innerHTML = '-';\r\n      o.style.display = 'block';\r\n    }\r\n\r\n    debugOpen = !debugOpen;\r\n\r\n  };\r\n\r\n  debugTS = function(sEventType, bSuccess, sMessage) {\r\n\r\n    // troubleshooter debug hooks\r\n\r\n    if (window.sm2Debugger !== _undefined) {\r\n      try {\r\n        sm2Debugger.handleEvent(sEventType, bSuccess, sMessage);\r\n      } catch(e) {\r\n        // oh well\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n  // </d>\r\n\r\n  getSWFCSS = function() {\r\n\r\n    var css = [];\r\n\r\n    if (sm2.debugMode) {\r\n      css.push(swfCSS.sm2Debug);\r\n    }\r\n\r\n    if (sm2.debugFlash) {\r\n      css.push(swfCSS.flashDebug);\r\n    }\r\n\r\n    if (sm2.useHighPerformance) {\r\n      css.push(swfCSS.highPerf);\r\n    }\r\n\r\n    return css.join(' ');\r\n\r\n  };\r\n\r\n  flashBlockHandler = function() {\r\n\r\n    // *possible* flash block situation.\r\n\r\n    var name = str('fbHandler'),\r\n        p = sm2.getMoviePercent(),\r\n        css = swfCSS,\r\n        error = {\r\n          type: 'FLASHBLOCK'\r\n        };\r\n\r\n    if (sm2.html5Only) {\r\n      // no flash, or unused\r\n      return;\r\n    }\r\n\r\n    if (!sm2.ok()) {\r\n\r\n      if (needsFlash) {\r\n        // make the movie more visible, so user can fix\r\n        sm2.oMC.className = getSWFCSS() + ' ' + css.swfDefault + ' ' + (p === null ? css.swfTimedout : css.swfError);\r\n        sm2._wD(name + ': ' + str('fbTimeout') + (p ? ' (' + str('fbLoaded') + ')' : ''));\r\n      }\r\n\r\n      sm2.didFlashBlock = true;\r\n\r\n      // fire onready(), complain lightly\r\n      processOnEvents({\r\n        type: 'ontimeout',\r\n        ignoreInit: true,\r\n        error: error\r\n      });\r\n\r\n      catchError(error);\r\n\r\n    } else {\r\n\r\n      // SM2 loaded OK (or recovered)\r\n\r\n      // <d>\r\n      if (sm2.didFlashBlock) {\r\n        sm2._wD(name + ': Unblocked');\r\n      }\r\n      // </d>\r\n\r\n      if (sm2.oMC) {\r\n        sm2.oMC.className = [getSWFCSS(), css.swfDefault, css.swfLoaded + (sm2.didFlashBlock ? ' ' + css.swfUnblocked : '')].join(' ');\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  addOnEvent = function(sType, oMethod, oScope) {\r\n\r\n    if (on_queue[sType] === _undefined) {\r\n      on_queue[sType] = [];\r\n    }\r\n\r\n    on_queue[sType].push({\r\n      method: oMethod,\r\n      scope: (oScope || null),\r\n      fired: false\r\n    });\r\n\r\n  };\r\n\r\n  processOnEvents = function(oOptions) {\r\n\r\n    // if unspecified, assume OK/error\r\n\r\n    if (!oOptions) {\r\n      oOptions = {\r\n        type: (sm2.ok() ? 'onready' : 'ontimeout')\r\n      };\r\n    }\r\n\r\n    // not ready yet.\r\n    if (!didInit && oOptions && !oOptions.ignoreInit) return false;\r\n\r\n    // invalid case\r\n    if (oOptions.type === 'ontimeout' && (sm2.ok() || (disabled && !oOptions.ignoreInit))) return false;\r\n\r\n    var status = {\r\n          success: (oOptions && oOptions.ignoreInit ? sm2.ok() : !disabled)\r\n        },\r\n\r\n        // queue specified by type, or none\r\n        srcQueue = (oOptions && oOptions.type ? on_queue[oOptions.type] || [] : []),\r\n\r\n        queue = [], i, j,\r\n        args = [status],\r\n        canRetry = (needsFlash && !sm2.ok());\r\n\r\n    if (oOptions.error) {\r\n      args[0].error = oOptions.error;\r\n    }\r\n\r\n    for (i = 0, j = srcQueue.length; i < j; i++) {\r\n      if (srcQueue[i].fired !== true) {\r\n        queue.push(srcQueue[i]);\r\n      }\r\n    }\r\n\r\n    if (queue.length) {\r\n\r\n      // sm2._wD(sm + ': Firing ' + queue.length + ' ' + oOptions.type + '() item' + (queue.length === 1 ? '' : 's'));\r\n      for (i = 0, j = queue.length; i < j; i++) {\r\n\r\n        if (queue[i].scope) {\r\n          queue[i].method.apply(queue[i].scope, args);\r\n        } else {\r\n          queue[i].method.apply(this, args);\r\n        }\r\n\r\n        if (!canRetry) {\r\n          // useFlashBlock and SWF timeout case doesn't count here.\r\n          queue[i].fired = true;\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  initUserOnload = function() {\r\n\r\n    window.setTimeout(function() {\r\n\r\n      if (sm2.useFlashBlock) {\r\n        flashBlockHandler();\r\n      }\r\n\r\n      processOnEvents();\r\n\r\n      // call user-defined \"onload\", scoped to window\r\n\r\n      if (typeof sm2.onload === 'function') {\r\n        _wDS('onload', 1);\r\n        sm2.onload.apply(window);\r\n        _wDS('onloadOK', 1);\r\n      }\r\n\r\n      if (sm2.waitForWindowLoad) {\r\n        event.add(window, 'load', initUserOnload);\r\n      }\r\n\r\n    }, 1);\r\n\r\n  };\r\n\r\n  detectFlash = function() {\r\n\r\n    /**\r\n     * Hat tip: Flash Detect library (BSD, (C) 2007) by Carl \"DocYes\" S. Yestrau\r\n     * http://featureblend.com/javascript-flash-detection-library.html / http://featureblend.com/license.txt\r\n     */\r\n\r\n    // this work has already been done.\r\n    if (hasFlash !== _undefined) return hasFlash;\r\n\r\n    var hasPlugin = false, n = navigator, obj, type, types, AX = window.ActiveXObject;\r\n\r\n    // MS Edge 14 throws an \"Unspecified Error\" because n.plugins is inaccessible due to permissions\r\n    var nP;\r\n\r\n    try {\r\n      nP = n.plugins;\r\n    } catch(e) {\r\n      nP = undefined;\r\n    }\r\n\r\n    if (nP && nP.length) {\r\n\r\n      type = 'application/x-shockwave-flash';\r\n      types = n.mimeTypes;\r\n\r\n      if (types && types[type] && types[type].enabledPlugin && types[type].enabledPlugin.description) {\r\n        hasPlugin = true;\r\n      }\r\n\r\n    } else if (AX !== _undefined && !ua.match(/MSAppHost/i)) {\r\n\r\n      // Windows 8 Store Apps (MSAppHost) are weird (compatibility?) and won't complain here, but will barf if Flash/ActiveX object is appended to the DOM.\r\n      try {\r\n        obj = new AX('ShockwaveFlash.ShockwaveFlash');\r\n      } catch(e) {\r\n        // oh well\r\n        obj = null;\r\n      }\r\n\r\n      hasPlugin = (!!obj);\r\n\r\n      // cleanup, because it is ActiveX after all\r\n      obj = null;\r\n\r\n    }\r\n\r\n    hasFlash = hasPlugin;\r\n\r\n    return hasPlugin;\r\n\r\n  };\r\n\r\n  featureCheck = function() {\r\n\r\n    var flashNeeded,\r\n        item,\r\n        formats = sm2.audioFormats,\r\n        // iPhone <= 3.1 has broken HTML5 audio(), but firmware 3.2 (original iPad) + iOS4 works.\r\n        isSpecial = (is_iDevice && !!(ua.match(/os (1|2|3_0|3_1)\\s/i)));\r\n\r\n    if (isSpecial) {\r\n\r\n      // has Audio(), but is broken; let it load links directly.\r\n      sm2.hasHTML5 = false;\r\n\r\n      // ignore flash case, however\r\n      sm2.html5Only = true;\r\n\r\n      // hide the SWF, if present\r\n      if (sm2.oMC) {\r\n        sm2.oMC.style.display = 'none';\r\n      }\r\n\r\n    } else if (sm2.useHTML5Audio) {\r\n\r\n        if (!sm2.html5 || !sm2.html5.canPlayType) {\r\n          sm2._wD('SoundManager: No HTML5 Audio() support detected.');\r\n          sm2.hasHTML5 = false;\r\n        }\r\n\r\n        // <d>\r\n        if (isBadSafari) {\r\n          sm2._wD(smc + 'Note: Buggy HTML5 Audio in Safari on this OS X release, see https://bugs.webkit.org/show_bug.cgi?id=32159 - ' + (!hasFlash ? ' would use flash fallback for MP3/MP4, but none detected.' : 'will use flash fallback for MP3/MP4, if available'), 1);\r\n        }\r\n        // </d>\r\n\r\n      }\r\n\r\n    if (sm2.useHTML5Audio && sm2.hasHTML5) {\r\n\r\n      // sort out whether flash is optional, required or can be ignored.\r\n\r\n      // innocent until proven guilty.\r\n      canIgnoreFlash = true;\r\n\r\n      for (item in formats) {\r\n\r\n        if (formats.hasOwnProperty(item)) {\r\n\r\n          if (formats[item].required) {\r\n\r\n            if (!sm2.html5.canPlayType(formats[item].type)) {\r\n\r\n              // 100% HTML5 mode is not possible.\r\n              canIgnoreFlash = false;\r\n              flashNeeded = true;\r\n\r\n            } else if (sm2.preferFlash && (sm2.flash[item] || sm2.flash[formats[item].type])) {\r\n\r\n              // flash may be required, or preferred for this format.\r\n              flashNeeded = true;\r\n\r\n            }\r\n\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    // sanity check...\r\n    if (sm2.ignoreFlash) {\r\n      flashNeeded = false;\r\n      canIgnoreFlash = true;\r\n    }\r\n\r\n    sm2.html5Only = (sm2.hasHTML5 && sm2.useHTML5Audio && !flashNeeded);\r\n\r\n    return (!sm2.html5Only);\r\n\r\n  };\r\n\r\n  parseURL = function(url) {\r\n\r\n    /**\r\n     * Internal: Finds and returns the first playable URL (or failing that, the first URL.)\r\n     * @param {string or array} url A single URL string, OR, an array of URL strings or {url:'/path/to/resource', type:'audio/mp3'} objects.\r\n     */\r\n\r\n    var i, j, urlResult = 0, result;\r\n\r\n    if (url instanceof Array) {\r\n\r\n      // find the first good one\r\n      for (i = 0, j = url.length; i < j; i++) {\r\n\r\n        if (url[i] instanceof Object) {\r\n\r\n          // MIME check\r\n          if (sm2.canPlayMIME(url[i].type)) {\r\n            urlResult = i;\r\n            break;\r\n          }\r\n\r\n        } else if (sm2.canPlayURL(url[i])) {\r\n\r\n          // URL string check\r\n          urlResult = i;\r\n          break;\r\n\r\n        }\r\n\r\n      }\r\n\r\n      // normalize to string\r\n      if (url[urlResult].url) {\r\n        url[urlResult] = url[urlResult].url;\r\n      }\r\n\r\n      result = url[urlResult];\r\n\r\n    } else {\r\n\r\n      // single URL case\r\n      result = url;\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n\r\n  startTimer = function(oSound) {\r\n\r\n    /**\r\n     * attach a timer to this sound, and start an interval if needed\r\n     */\r\n\r\n    if (!oSound._hasTimer) {\r\n\r\n      oSound._hasTimer = true;\r\n\r\n      if (!mobileHTML5 && sm2.html5PollingInterval) {\r\n\r\n        if (h5IntervalTimer === null && h5TimerCount === 0) {\r\n\r\n          h5IntervalTimer = setInterval(timerExecute, sm2.html5PollingInterval);\r\n\r\n        }\r\n\r\n        h5TimerCount++;\r\n\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  stopTimer = function(oSound) {\r\n\r\n    /**\r\n     * detach a timer\r\n     */\r\n\r\n    if (oSound._hasTimer) {\r\n\r\n      oSound._hasTimer = false;\r\n\r\n      if (!mobileHTML5 && sm2.html5PollingInterval) {\r\n\r\n        // interval will stop itself at next execution.\r\n\r\n        h5TimerCount--;\r\n\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  timerExecute = function() {\r\n\r\n    /**\r\n     * manual polling for HTML5 progress events, ie., whileplaying()\r\n     * (can achieve greater precision than conservative default HTML5 interval)\r\n     */\r\n\r\n    var i;\r\n\r\n    if (h5IntervalTimer !== null && !h5TimerCount) {\r\n\r\n      // no active timers, stop polling interval.\r\n\r\n      clearInterval(h5IntervalTimer);\r\n\r\n      h5IntervalTimer = null;\r\n\r\n      return;\r\n\r\n    }\r\n\r\n    // check all HTML5 sounds with timers\r\n\r\n    for (i = sm2.soundIDs.length - 1; i >= 0; i--) {\r\n\r\n      if (sm2.sounds[sm2.soundIDs[i]].isHTML5 && sm2.sounds[sm2.soundIDs[i]]._hasTimer) {\r\n        sm2.sounds[sm2.soundIDs[i]]._onTimer();\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  catchError = function(options) {\r\n\r\n    options = (options !== _undefined ? options : {});\r\n\r\n    if (typeof sm2.onerror === 'function') {\r\n      sm2.onerror.apply(window, [{\r\n        type: (options.type !== _undefined ? options.type : null)\r\n      }]);\r\n    }\r\n\r\n    if (options.fatal !== _undefined && options.fatal) {\r\n      sm2.disable();\r\n    }\r\n\r\n  };\r\n\r\n  badSafariFix = function() {\r\n\r\n    // special case: \"bad\" Safari (OS X 10.3 - 10.7) must fall back to flash for MP3/MP4\r\n    if (!isBadSafari || !detectFlash()) {\r\n      // doesn't apply\r\n      return;\r\n    }\r\n\r\n    var aF = sm2.audioFormats, i, item;\r\n\r\n    for (item in aF) {\r\n\r\n      if (aF.hasOwnProperty(item)) {\r\n\r\n        if (item === 'mp3' || item === 'mp4') {\r\n\r\n          sm2._wD(sm + ': Using flash fallback for ' + item + ' format');\r\n          sm2.html5[item] = false;\r\n\r\n          // assign result to related formats, too\r\n          if (aF[item] && aF[item].related) {\r\n            for (i = aF[item].related.length - 1; i >= 0; i--) {\r\n              sm2.html5[aF[item].related[i]] = false;\r\n            }\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n  /**\r\n   * Pseudo-private flash/ExternalInterface methods\r\n   * ----------------------------------------------\r\n   */\r\n\r\n  this._setSandboxType = function(sandboxType) {\r\n\r\n    // <d>\r\n    // Security sandbox according to Flash plugin\r\n    var sb = sm2.sandbox;\r\n\r\n    sb.type = sandboxType;\r\n    sb.description = sb.types[(sb.types[sandboxType] !== _undefined ? sandboxType : 'unknown')];\r\n\r\n    if (sb.type === 'localWithFile') {\r\n\r\n      sb.noRemote = true;\r\n      sb.noLocal = false;\r\n      _wDS('secNote', 2);\r\n\r\n    } else if (sb.type === 'localWithNetwork') {\r\n\r\n      sb.noRemote = false;\r\n      sb.noLocal = true;\r\n\r\n    } else if (sb.type === 'localTrusted') {\r\n\r\n      sb.noRemote = false;\r\n      sb.noLocal = false;\r\n\r\n    }\r\n    // </d>\r\n\r\n  };\r\n\r\n  this._externalInterfaceOK = function(swfVersion) {\r\n\r\n    // flash callback confirming flash loaded, EI working etc.\r\n    // swfVersion: SWF build string\r\n\r\n    if (sm2.swfLoaded) {\r\n      return;\r\n    }\r\n\r\n    var e;\r\n\r\n    debugTS('swf', true);\r\n    debugTS('flashtojs', true);\r\n    sm2.swfLoaded = true;\r\n    tryInitOnFocus = false;\r\n\r\n    if (isBadSafari) {\r\n      badSafariFix();\r\n    }\r\n\r\n    // complain if JS + SWF build/version strings don't match, excluding +DEV builds\r\n    // <d>\r\n    if (!swfVersion || swfVersion.replace(/\\+dev/i, '') !== sm2.versionNumber.replace(/\\+dev/i, '')) {\r\n\r\n      e = sm + ': Fatal: JavaScript file build \"' + sm2.versionNumber + '\" does not match Flash SWF build \"' + swfVersion + '\" at ' + sm2.url + '. Ensure both are up-to-date.';\r\n\r\n      // escape flash -> JS stack so this error fires in window.\r\n      setTimeout(function() {\r\n        throw new Error(e);\r\n      }, 0);\r\n\r\n      // exit, init will fail with timeout\r\n      return;\r\n\r\n    }\r\n    // </d>\r\n\r\n    // IE needs a larger timeout\r\n    setTimeout(init, isIE ? 100 : 1);\r\n\r\n  };\r\n\r\n  /**\r\n   * Private initialization helpers\r\n   * ------------------------------\r\n   */\r\n\r\n  createMovie = function(movieID, movieURL) {\r\n\r\n    // ignore if already connected\r\n    if (didAppend && appendSuccess) return false;\r\n\r\n    function initMsg() {\r\n\r\n      // <d>\r\n\r\n      var options = [],\r\n          title,\r\n          msg = [],\r\n          delimiter = ' + ';\r\n\r\n      title = 'SoundManager ' + sm2.version + (!sm2.html5Only && sm2.useHTML5Audio ? (sm2.hasHTML5 ? ' + HTML5 audio' : ', no HTML5 audio support') : '');\r\n\r\n      if (!sm2.html5Only) {\r\n\r\n        if (sm2.preferFlash) {\r\n          options.push('preferFlash');\r\n        }\r\n\r\n        if (sm2.useHighPerformance) {\r\n          options.push('useHighPerformance');\r\n        }\r\n\r\n        if (sm2.flashPollingInterval) {\r\n          options.push('flashPollingInterval (' + sm2.flashPollingInterval + 'ms)');\r\n        }\r\n\r\n        if (sm2.html5PollingInterval) {\r\n          options.push('html5PollingInterval (' + sm2.html5PollingInterval + 'ms)');\r\n        }\r\n\r\n        if (sm2.wmode) {\r\n          options.push('wmode (' + sm2.wmode + ')');\r\n        }\r\n\r\n        if (sm2.debugFlash) {\r\n          options.push('debugFlash');\r\n        }\r\n\r\n        if (sm2.useFlashBlock) {\r\n          options.push('flashBlock');\r\n        }\r\n\r\n      } else if (sm2.html5PollingInterval) {\r\n          options.push('html5PollingInterval (' + sm2.html5PollingInterval + 'ms)');\r\n        }\r\n\r\n      if (options.length) {\r\n        msg = msg.concat([options.join(delimiter)]);\r\n      }\r\n\r\n      sm2._wD(title + (msg.length ? delimiter + msg.join(', ') : ''), 1);\r\n\r\n      showSupport();\r\n\r\n      // </d>\r\n\r\n    }\r\n\r\n    if (sm2.html5Only) {\r\n\r\n      // 100% HTML5 mode\r\n      setVersionInfo();\r\n\r\n      initMsg();\r\n      sm2.oMC = id(sm2.movieID);\r\n      init();\r\n\r\n      // prevent multiple init attempts\r\n      didAppend = true;\r\n\r\n      appendSuccess = true;\r\n\r\n      return false;\r\n\r\n    }\r\n\r\n    // flash path\r\n    var remoteURL = (movieURL || sm2.url),\r\n    localURL = (sm2.altURL || remoteURL),\r\n    swfTitle = 'JS/Flash audio component (SoundManager 2)',\r\n    oTarget = getDocument(),\r\n    extraClass = getSWFCSS(),\r\n    isRTL = null,\r\n    html = doc.getElementsByTagName('html')[0],\r\n    oEmbed, oMovie, tmp, movieHTML, oEl, s, x, sClass;\r\n\r\n    isRTL = (html && html.dir && html.dir.match(/rtl/i));\r\n    movieID = (movieID === _undefined ? sm2.id : movieID);\r\n\r\n    function param(name, value) {\r\n      return '<param name=\"' + name + '\" value=\"' + value + '\" />';\r\n    }\r\n\r\n    // safety check for legacy (change to Flash 9 URL)\r\n    setVersionInfo();\r\n    sm2.url = normalizeMovieURL(overHTTP ? remoteURL : localURL);\r\n    movieURL = sm2.url;\r\n\r\n    sm2.wmode = (!sm2.wmode && sm2.useHighPerformance ? 'transparent' : sm2.wmode);\r\n\r\n    if (sm2.wmode !== null && (ua.match(/msie 8/i) || (!isIE && !sm2.useHighPerformance)) && navigator.platform.match(/win32|win64/i)) {\r\n      /**\r\n       * extra-special case: movie doesn't load until scrolled into view when using wmode = anything but 'window' here\r\n       * does not apply when using high performance (position:fixed means on-screen), OR infinite flash load timeout\r\n       * wmode breaks IE 8 on Vista + Win7 too in some cases, as of January 2011 (?)\r\n       */\r\n      messages.push(strings.spcWmode);\r\n      sm2.wmode = null;\r\n    }\r\n\r\n    oEmbed = {\r\n      name: movieID,\r\n      id: movieID,\r\n      src: movieURL,\r\n      quality: 'high',\r\n      allowScriptAccess: sm2.allowScriptAccess,\r\n      bgcolor: sm2.bgColor,\r\n      pluginspage: http + 'www.macromedia.com/go/getflashplayer',\r\n      title: swfTitle,\r\n      type: 'application/x-shockwave-flash',\r\n      wmode: sm2.wmode,\r\n      // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html\r\n      hasPriority: 'true'\r\n    };\r\n\r\n    if (sm2.debugFlash) {\r\n      oEmbed.FlashVars = 'debug=1';\r\n    }\r\n\r\n    if (!sm2.wmode) {\r\n      // don't write empty attribute\r\n      delete oEmbed.wmode;\r\n    }\r\n\r\n    if (isIE) {\r\n\r\n      // IE is \"special\".\r\n      oMovie = doc.createElement('div');\r\n      movieHTML = [\r\n        '<object id=\"' + movieID + '\" data=\"' + movieURL + '\" type=\"' + oEmbed.type + '\" title=\"' + oEmbed.title + '\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0\">',\r\n        param('movie', movieURL),\r\n        param('AllowScriptAccess', sm2.allowScriptAccess),\r\n        param('quality', oEmbed.quality),\r\n        (sm2.wmode ? param('wmode', sm2.wmode) : ''),\r\n        param('bgcolor', sm2.bgColor),\r\n        param('hasPriority', 'true'),\r\n        (sm2.debugFlash ? param('FlashVars', oEmbed.FlashVars) : ''),\r\n        '</object>'\r\n      ].join('');\r\n\r\n    } else {\r\n\r\n      oMovie = doc.createElement('embed');\r\n      for (tmp in oEmbed) {\r\n        if (oEmbed.hasOwnProperty(tmp)) {\r\n          oMovie.setAttribute(tmp, oEmbed[tmp]);\r\n        }\r\n      }\r\n\r\n    }\r\n\r\n    initDebug();\r\n    extraClass = getSWFCSS();\r\n    oTarget = getDocument();\r\n\r\n    if (oTarget) {\r\n\r\n      sm2.oMC = (id(sm2.movieID) || doc.createElement('div'));\r\n\r\n      if (!sm2.oMC.id) {\r\n\r\n        sm2.oMC.id = sm2.movieID;\r\n        sm2.oMC.className = swfCSS.swfDefault + ' ' + extraClass;\r\n        s = null;\r\n        oEl = null;\r\n\r\n        if (!sm2.useFlashBlock) {\r\n          if (sm2.useHighPerformance) {\r\n            // on-screen at all times\r\n            s = {\r\n              position: 'fixed',\r\n              width: '8px',\r\n              height: '8px',\r\n              // >= 6px for flash to run fast, >= 8px to start up under Firefox/win32 in some cases. odd? yes.\r\n              bottom: '0px',\r\n              left: '0px',\r\n              overflow: 'hidden'\r\n            };\r\n          } else {\r\n            // hide off-screen, lower priority\r\n            s = {\r\n              position: 'absolute',\r\n              width: '6px',\r\n              height: '6px',\r\n              top: '-9999px',\r\n              left: '-9999px'\r\n            };\r\n            if (isRTL) {\r\n              s.left = Math.abs(parseInt(s.left, 10)) + 'px';\r\n            }\r\n          }\r\n        }\r\n\r\n        if (isWebkit) {\r\n          // soundcloud-reported render/crash fix, safari 5\r\n          sm2.oMC.style.zIndex = 10000;\r\n        }\r\n\r\n        if (!sm2.debugFlash) {\r\n          for (x in s) {\r\n            if (s.hasOwnProperty(x)) {\r\n              sm2.oMC.style[x] = s[x];\r\n            }\r\n          }\r\n        }\r\n\r\n        try {\r\n\r\n          if (!isIE) {\r\n            sm2.oMC.appendChild(oMovie);\r\n          }\r\n\r\n          oTarget.appendChild(sm2.oMC);\r\n\r\n          if (isIE) {\r\n            oEl = sm2.oMC.appendChild(doc.createElement('div'));\r\n            oEl.className = swfCSS.swfBox;\r\n            oEl.innerHTML = movieHTML;\r\n          }\r\n\r\n          appendSuccess = true;\r\n\r\n        } catch(e) {\r\n\r\n          throw new Error(str('domError') + ' \\n' + e.toString());\r\n\r\n        }\r\n\r\n      } else {\r\n\r\n        // SM2 container is already in the document (eg. flashblock use case)\r\n        sClass = sm2.oMC.className;\r\n        sm2.oMC.className = (sClass ? sClass + ' ' : swfCSS.swfDefault) + (extraClass ? ' ' + extraClass : '');\r\n        sm2.oMC.appendChild(oMovie);\r\n\r\n        if (isIE) {\r\n          oEl = sm2.oMC.appendChild(doc.createElement('div'));\r\n          oEl.className = swfCSS.swfBox;\r\n          oEl.innerHTML = movieHTML;\r\n        }\r\n\r\n        appendSuccess = true;\r\n\r\n      }\r\n\r\n    }\r\n\r\n    didAppend = true;\r\n\r\n    initMsg();\r\n\r\n    // sm2._wD(sm + ': Trying to load ' + movieURL + (!overHTTP && sm2.altURL ? ' (alternate URL)' : ''), 1);\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  initMovie = function() {\r\n\r\n    if (sm2.html5Only) {\r\n      createMovie();\r\n      return false;\r\n    }\r\n\r\n    // attempt to get, or create, movie (may already exist)\r\n    if (flash) return false;\r\n\r\n    if (!sm2.url) {\r\n\r\n      /**\r\n       * Something isn't right - we've reached init, but the soundManager url property has not been set.\r\n       * User has not called setup({url: ...}), or has not set soundManager.url (legacy use case) directly before init time.\r\n       * Notify and exit. If user calls setup() with a url: property, init will be restarted as in the deferred loading case.\r\n       */\r\n\r\n       _wDS('noURL');\r\n       return false;\r\n\r\n    }\r\n\r\n    // inline markup case\r\n    flash = sm2.getMovie(sm2.id);\r\n\r\n    if (!flash) {\r\n\r\n      if (!oRemoved) {\r\n\r\n        // try to create\r\n        createMovie(sm2.id, sm2.url);\r\n\r\n      } else {\r\n\r\n        // try to re-append removed movie after reboot()\r\n        if (!isIE) {\r\n          sm2.oMC.appendChild(oRemoved);\r\n        } else {\r\n          sm2.oMC.innerHTML = oRemovedHTML;\r\n        }\r\n\r\n        oRemoved = null;\r\n        didAppend = true;\r\n\r\n      }\r\n\r\n      flash = sm2.getMovie(sm2.id);\r\n\r\n    }\r\n\r\n    if (typeof sm2.oninitmovie === 'function') {\r\n      setTimeout(sm2.oninitmovie, 1);\r\n    }\r\n\r\n    // <d>\r\n    flushMessages();\r\n    // </d>\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  delayWaitForEI = function() {\r\n\r\n    setTimeout(waitForEI, 1000);\r\n\r\n  };\r\n\r\n  rebootIntoHTML5 = function() {\r\n\r\n    // special case: try for a reboot with preferFlash: false, if 100% HTML5 mode is possible and useFlashBlock is not enabled.\r\n\r\n    window.setTimeout(function() {\r\n\r\n      complain(smc + 'useFlashBlock is false, 100% HTML5 mode is possible. Rebooting with preferFlash: false...');\r\n\r\n      sm2.setup({\r\n        preferFlash: false\r\n      }).reboot();\r\n\r\n      // if for some reason you want to detect this case, use an ontimeout() callback and look for html5Only and didFlashBlock == true.\r\n      sm2.didFlashBlock = true;\r\n\r\n      sm2.beginDelayedInit();\r\n\r\n    }, 1);\r\n\r\n  };\r\n\r\n  waitForEI = function() {\r\n\r\n    var p,\r\n        loadIncomplete = false;\r\n\r\n    if (!sm2.url) {\r\n      // No SWF url to load (noURL case) - exit for now. Will be retried when url is set.\r\n      return;\r\n    }\r\n\r\n    if (waitingForEI) {\r\n      return;\r\n    }\r\n\r\n    waitingForEI = true;\r\n    event.remove(window, 'load', delayWaitForEI);\r\n\r\n    if (hasFlash && tryInitOnFocus && !isFocused) {\r\n      // Safari won't load flash in background tabs, only when focused.\r\n      _wDS('waitFocus');\r\n      return;\r\n    }\r\n\r\n    if (!didInit) {\r\n      p = sm2.getMoviePercent();\r\n      if (p > 0 && p < 100) {\r\n        loadIncomplete = true;\r\n      }\r\n    }\r\n\r\n    setTimeout(function() {\r\n\r\n      p = sm2.getMoviePercent();\r\n\r\n      if (loadIncomplete) {\r\n        // special case: if movie *partially* loaded, retry until it's 100% before assuming failure.\r\n        waitingForEI = false;\r\n        sm2._wD(str('waitSWF'));\r\n        window.setTimeout(delayWaitForEI, 1);\r\n        return;\r\n      }\r\n\r\n      // <d>\r\n      if (!didInit) {\r\n\r\n        sm2._wD(sm + ': No Flash response within expected time. Likely causes: ' + (p === 0 ? 'SWF load failed, ' : '') + 'Flash blocked or JS-Flash security error.' + (sm2.debugFlash ? ' ' + str('checkSWF') : ''), 2);\r\n\r\n        if (!overHTTP && p) {\r\n\r\n          _wDS('localFail', 2);\r\n\r\n          if (!sm2.debugFlash) {\r\n            _wDS('tryDebug', 2);\r\n          }\r\n\r\n        }\r\n\r\n        if (p === 0) {\r\n\r\n          // if 0 (not null), probably a 404.\r\n          sm2._wD(str('swf404', sm2.url), 1);\r\n\r\n        }\r\n\r\n        debugTS('flashtojs', false, ': Timed out' + (overHTTP ? ' (Check flash security or flash blockers)' : ' (No plugin/missing SWF?)'));\r\n\r\n      }\r\n      // </d>\r\n\r\n      // give up / time-out, depending\r\n\r\n      if (!didInit && okToDisable) {\r\n\r\n        if (p === null) {\r\n\r\n          // SWF failed to report load progress. Possibly blocked.\r\n\r\n          if (sm2.useFlashBlock || sm2.flashLoadTimeout === 0) {\r\n\r\n            if (sm2.useFlashBlock) {\r\n\r\n              flashBlockHandler();\r\n\r\n            }\r\n\r\n            _wDS('waitForever');\r\n\r\n          } else if (!sm2.useFlashBlock && canIgnoreFlash) {\r\n\r\n            // no custom flash block handling, but SWF has timed out. Will recover if user unblocks / allows SWF load.\r\n            rebootIntoHTML5();\r\n\r\n          } else {\r\n\r\n            _wDS('waitForever');\r\n\r\n            // fire any regular registered ontimeout() listeners.\r\n            processOnEvents({\r\n              type: 'ontimeout',\r\n              ignoreInit: true,\r\n              error: {\r\n                type: 'INIT_FLASHBLOCK'\r\n              }\r\n            });\r\n\r\n          }\r\n\r\n        } else if (sm2.flashLoadTimeout === 0) {\r\n\r\n          // SWF loaded? Shouldn't be a blocking issue, then.\r\n\r\n          _wDS('waitForever');\r\n\r\n        } else if (!sm2.useFlashBlock && canIgnoreFlash) {\r\n\r\n          rebootIntoHTML5();\r\n\r\n        } else {\r\n\r\n          failSafely(true);\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }, sm2.flashLoadTimeout);\r\n\r\n  };\r\n\r\n  handleFocus = function() {\r\n\r\n    function cleanup() {\r\n      event.remove(window, 'focus', handleFocus);\r\n    }\r\n\r\n    if (isFocused || !tryInitOnFocus) {\r\n      // already focused, or not special Safari background tab case\r\n      cleanup();\r\n      return true;\r\n    }\r\n\r\n    okToDisable = true;\r\n    isFocused = true;\r\n    _wDS('gotFocus');\r\n\r\n    // allow init to restart\r\n    waitingForEI = false;\r\n\r\n    // kick off ExternalInterface timeout, now that the SWF has started\r\n    delayWaitForEI();\r\n\r\n    cleanup();\r\n    return true;\r\n\r\n  };\r\n\r\n  flushMessages = function() {\r\n\r\n    // <d>\r\n\r\n    // SM2 pre-init debug messages\r\n    if (messages.length) {\r\n      sm2._wD('SoundManager 2: ' + messages.join(' '), 1);\r\n      messages = [];\r\n    }\r\n\r\n    // </d>\r\n\r\n  };\r\n\r\n  showSupport = function() {\r\n\r\n    // <d>\r\n\r\n    flushMessages();\r\n\r\n    var item, tests = [];\r\n\r\n    if (sm2.useHTML5Audio && sm2.hasHTML5) {\r\n      for (item in sm2.audioFormats) {\r\n        if (sm2.audioFormats.hasOwnProperty(item)) {\r\n          tests.push(item + ' = ' + sm2.html5[item] + (!sm2.html5[item] && needsFlash && sm2.flash[item] ? ' (using flash)' : (sm2.preferFlash && sm2.flash[item] && needsFlash ? ' (preferring flash)' : (!sm2.html5[item] ? ' (' + (sm2.audioFormats[item].required ? 'required, ' : '') + 'and no flash support)' : ''))));\r\n        }\r\n      }\r\n      sm2._wD('SoundManager 2 HTML5 support: ' + tests.join(', '), 1);\r\n    }\r\n\r\n    // </d>\r\n\r\n  };\r\n\r\n  initComplete = function(bNoDisable) {\r\n\r\n    if (didInit) return false;\r\n\r\n    if (sm2.html5Only) {\r\n      // all good.\r\n      _wDS('sm2Loaded', 1);\r\n      didInit = true;\r\n      initUserOnload();\r\n      debugTS('onload', true);\r\n      return true;\r\n    }\r\n\r\n    var wasTimeout = (sm2.useFlashBlock && sm2.flashLoadTimeout && !sm2.getMoviePercent()),\r\n        result = true,\r\n        error;\r\n\r\n    if (!wasTimeout) {\r\n      didInit = true;\r\n    }\r\n\r\n    error = {\r\n      type: (!hasFlash && needsFlash ? 'NO_FLASH' : 'INIT_TIMEOUT')\r\n    };\r\n\r\n    sm2._wD('SoundManager 2 ' + (disabled ? 'failed to load' : 'loaded') + ' (' + (disabled ? 'Flash security/load error' : 'OK') + ') ' + String.fromCharCode(disabled ? 10006 : 10003), disabled ? 2 : 1);\r\n\r\n    if (disabled || bNoDisable) {\r\n\r\n      if (sm2.useFlashBlock && sm2.oMC) {\r\n        sm2.oMC.className = getSWFCSS() + ' ' + (sm2.getMoviePercent() === null ? swfCSS.swfTimedout : swfCSS.swfError);\r\n      }\r\n\r\n      processOnEvents({\r\n        type: 'ontimeout',\r\n        error: error,\r\n        ignoreInit: true\r\n      });\r\n\r\n      debugTS('onload', false);\r\n      catchError(error);\r\n\r\n      result = false;\r\n\r\n    } else {\r\n\r\n      debugTS('onload', true);\r\n\r\n    }\r\n\r\n    if (!disabled) {\r\n\r\n      if (sm2.waitForWindowLoad && !windowLoaded) {\r\n\r\n        _wDS('waitOnload');\r\n        event.add(window, 'load', initUserOnload);\r\n\r\n      } else {\r\n\r\n        // <d>\r\n        if (sm2.waitForWindowLoad && windowLoaded) {\r\n          _wDS('docLoaded');\r\n        }\r\n        // </d>\r\n\r\n        initUserOnload();\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return result;\r\n\r\n  };\r\n\r\n  /**\r\n   * apply top-level setupOptions object as local properties, eg., this.setupOptions.flashVersion -> this.flashVersion (soundManager.flashVersion)\r\n   * this maintains backward compatibility, and allows properties to be defined separately for use by soundManager.setup().\r\n   */\r\n\r\n  setProperties = function() {\r\n\r\n    var i,\r\n        o = sm2.setupOptions;\r\n\r\n    for (i in o) {\r\n\r\n      if (o.hasOwnProperty(i)) {\r\n\r\n        // assign local property if not already defined\r\n\r\n        if (sm2[i] === _undefined) {\r\n\r\n          sm2[i] = o[i];\r\n\r\n        } else if (sm2[i] !== o[i]) {\r\n\r\n          // legacy support: write manually-assigned property (eg., soundManager.url) back to setupOptions to keep things in sync\r\n          sm2.setupOptions[i] = sm2[i];\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n  };\r\n\r\n\r\n  init = function() {\r\n\r\n    // called after onload()\r\n\r\n    if (didInit) {\r\n      _wDS('didInit');\r\n      return false;\r\n    }\r\n\r\n    function cleanup() {\r\n      event.remove(window, 'load', sm2.beginDelayedInit);\r\n    }\r\n\r\n    if (sm2.html5Only) {\r\n\r\n      if (!didInit) {\r\n        // we don't need no steenking flash!\r\n        cleanup();\r\n        sm2.enabled = true;\r\n        initComplete();\r\n      }\r\n\r\n      return true;\r\n\r\n    }\r\n\r\n    // flash path\r\n    initMovie();\r\n\r\n    try {\r\n\r\n      // attempt to talk to Flash\r\n      flash._externalInterfaceTest(false);\r\n\r\n      /**\r\n       * Apply user-specified polling interval, OR, if \"high performance\" set, faster vs. default polling\r\n       * (determines frequency of whileloading/whileplaying callbacks, effectively driving UI framerates)\r\n       */\r\n      setPolling(true, (sm2.flashPollingInterval || (sm2.useHighPerformance ? 10 : 50)));\r\n\r\n      if (!sm2.debugMode) {\r\n        // stop the SWF from making debug output calls to JS\r\n        flash._disableDebug();\r\n      }\r\n\r\n      sm2.enabled = true;\r\n      debugTS('jstoflash', true);\r\n\r\n      if (!sm2.html5Only) {\r\n        // prevent browser from showing cached page state (or rather, restoring \"suspended\" page state) via back button, because flash may be dead\r\n        // http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/\r\n        event.add(window, 'unload', doNothing);\r\n      }\r\n\r\n    } catch(e) {\r\n\r\n      sm2._wD('js/flash exception: ' + e.toString());\r\n\r\n      debugTS('jstoflash', false);\r\n\r\n      catchError({\r\n        type: 'JS_TO_FLASH_EXCEPTION',\r\n        fatal: true\r\n      });\r\n\r\n      // don't disable, for reboot()\r\n      failSafely(true);\r\n\r\n      initComplete();\r\n\r\n      return false;\r\n\r\n    }\r\n\r\n    initComplete();\r\n\r\n    // disconnect events\r\n    cleanup();\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  domContentLoaded = function() {\r\n\r\n    if (didDCLoaded) return false;\r\n\r\n    didDCLoaded = true;\r\n\r\n    // assign top-level soundManager properties eg. soundManager.url\r\n    setProperties();\r\n\r\n    initDebug();\r\n\r\n    if (!hasFlash && sm2.hasHTML5) {\r\n\r\n      sm2._wD('SoundManager 2: No Flash detected' + (!sm2.useHTML5Audio ? ', enabling HTML5.' : '. Trying HTML5-only mode.'), 1);\r\n\r\n      sm2.setup({\r\n        useHTML5Audio: true,\r\n        // make sure we aren't preferring flash, either\r\n        // TODO: preferFlash should not matter if flash is not installed. Currently, stuff breaks without the below tweak.\r\n        preferFlash: false\r\n      });\r\n\r\n    }\r\n\r\n    testHTML5();\r\n\r\n    if (!hasFlash && needsFlash) {\r\n\r\n      messages.push(strings.needFlash);\r\n\r\n      // TODO: Fatal here vs. timeout approach, etc.\r\n      // hack: fail sooner.\r\n      sm2.setup({\r\n        flashLoadTimeout: 1\r\n      });\r\n\r\n    }\r\n\r\n    if (doc.removeEventListener) {\r\n      doc.removeEventListener('DOMContentLoaded', domContentLoaded, false);\r\n    }\r\n\r\n    initMovie();\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  domContentLoadedIE = function() {\r\n\r\n    if (doc.readyState === 'complete') {\r\n      domContentLoaded();\r\n      doc.detachEvent('onreadystatechange', domContentLoadedIE);\r\n    }\r\n\r\n    return true;\r\n\r\n  };\r\n\r\n  winOnLoad = function() {\r\n\r\n    // catch edge case of initComplete() firing after window.load()\r\n    windowLoaded = true;\r\n\r\n    // catch case where DOMContentLoaded has been sent, but we're still in doc.readyState = 'interactive'\r\n    domContentLoaded();\r\n\r\n    event.remove(window, 'load', winOnLoad);\r\n\r\n  };\r\n\r\n  // sniff up-front\r\n  detectFlash();\r\n\r\n  // focus and window load, init (primarily flash-driven)\r\n  event.add(window, 'focus', handleFocus);\r\n  event.add(window, 'load', delayWaitForEI);\r\n  event.add(window, 'load', winOnLoad);\r\n\r\n  if (doc.addEventListener) {\r\n\r\n    doc.addEventListener('DOMContentLoaded', domContentLoaded, false);\r\n\r\n  } else if (doc.attachEvent) {\r\n\r\n    doc.attachEvent('onreadystatechange', domContentLoadedIE);\r\n\r\n  } else {\r\n\r\n    // no add/attachevent support - safe to assume no JS -> Flash either\r\n    debugTS('onload', false);\r\n    catchError({\r\n      type: 'NO_DOM2_EVENTS',\r\n      fatal: true\r\n    });\r\n\r\n  }\r\n\r\n} // SoundManager()\r\n\r\n// SM2_DEFER details: http://www.schillmania.com/projects/soundmanager2/doc/getstarted/#lazy-loading\r\n\r\nif (window.SM2_DEFER === _undefined || !SM2_DEFER) {\r\n  soundManager = new SoundManager();\r\n}\r\n\r\n/**\r\n * SoundManager public interfaces\r\n * ------------------------------\r\n */\r\n\r\nif ( true && module && typeof module.exports === 'object') {\r\n\r\n  /**\r\n   * commonJS module\r\n   */\r\n\r\n  module.exports.SoundManager = SoundManager;\r\n  module.exports.soundManager = soundManager;\r\n\r\n} else if (true) {\r\n\r\n  /**\r\n   * AMD - requireJS\r\n   * basic usage:\r\n   * require([\"/path/to/soundmanager2.js\"], function(SoundManager) {\r\n   *   SoundManager.getInstance().setup({\r\n   *     url: '/swf/',\r\n   *     onready: function() { ... }\r\n   *   })\r\n   * });\r\n   *\r\n   * SM2_DEFER usage:\r\n   * window.SM2_DEFER = true;\r\n   * require([\"/path/to/soundmanager2.js\"], function(SoundManager) {\r\n   *   SoundManager.getInstance(function() {\r\n   *     var soundManager = new SoundManager.constructor();\r\n   *     soundManager.setup({\r\n   *       url: '/swf/',\r\n   *       ...\r\n   *     });\r\n   *     ...\r\n   *     soundManager.beginDelayedInit();\r\n   *     return soundManager;\r\n   *   })\r\n   * });\r\n   */\r\n\r\n  !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\r\n    /**\r\n     * Retrieve the global instance of SoundManager.\r\n     * If a global instance does not exist it can be created using a callback.\r\n     *\r\n     * @param {Function} smBuilder Optional: Callback used to create a new SoundManager instance\r\n     * @return {SoundManager} The global SoundManager instance\r\n     */\r\n    function getInstance(smBuilder) {\r\n      if (!window.soundManager && smBuilder instanceof Function) {\r\n        var instance = smBuilder(SoundManager);\r\n        if (instance instanceof SoundManager) {\r\n          window.soundManager = instance;\r\n        }\r\n      }\r\n      return window.soundManager;\r\n    }\r\n    return {\r\n      constructor: SoundManager,\r\n      getInstance: getInstance\r\n    };\r\n  }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\r\n}\r\n\r\n// standard browser case\r\n\r\n// constructor\r\nwindow.SoundManager = SoundManager;\r\n\r\n/**\r\n * note: SM2 requires a window global due to Flash, which makes calls to window.soundManager.\r\n * Flash may not always be needed, but this is not known until async init and SM2 may even \"reboot\" into Flash mode.\r\n */\r\n\r\n// public API, flash callbacks etc.\r\nwindow.soundManager = soundManager;\r\n\r\n}(window));\r\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack:///./jaas-client/node_modules/soundmanager2/script/soundmanager2.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js":
+/*!****************************************************************************!*\
+  !*** ./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js ***!
+  \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar isProduction = \"development\" === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    throw new Error(prefix + \": \" + (message || ''));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (invariant);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/tiny-invariant/dist/tiny-invariant.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js":
+/*!************************************************************************!*\
+  !*** ./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js ***!
+  \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nvar isProduction = \"development\" === 'production';\nfunction warning(condition, message) {\n  if (!isProduction) {\n    if (condition) {\n      return;\n    }\n\n    var text = \"Warning: \" + message;\n\n    if (typeof console !== 'undefined') {\n      console.warn(text);\n    }\n\n    try {\n      throw Error(text);\n    } catch (x) {}\n  }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (warning);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/tiny-warning/dist/tiny-warning.esm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/to-array/index.js":
+/*!****************************************************!*\
+  !*** ./jaas-client/node_modules/to-array/index.js ***!
+  \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/to-array/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/value-equal/esm/value-equal.js":
+/*!*****************************************************************!*\
+  !*** ./jaas-client/node_modules/value-equal/esm/value-equal.js ***!
+  \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\nfunction valueOf(obj) {\n  return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n  // Test for strict equality first.\n  if (a === b) return true;\n\n  // Otherwise, if either of them == null they are not equal.\n  if (a == null || b == null) return false;\n\n  if (Array.isArray(a)) {\n    return (\n      Array.isArray(b) &&\n      a.length === b.length &&\n      a.every(function(item, index) {\n        return valueEqual(item, b[index]);\n      })\n    );\n  }\n\n  if (typeof a === 'object' || typeof b === 'object') {\n    var aValue = valueOf(a);\n    var bValue = valueOf(b);\n\n    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n    return Object.keys(Object.assign({}, a, b)).every(function(key) {\n      return valueEqual(a[key], b[key]);\n    });\n  }\n\n  return false;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (valueEqual);\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/value-equal/esm/value-equal.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/node_modules/yeast/index.js":
+/*!*************************************************!*\
+  !*** ./jaas-client/node_modules/yeast/index.js ***!
+  \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n  , length = 64\n  , map = {}\n  , seed = 0\n  , i = 0\n  , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n  var encoded = '';\n\n  do {\n    encoded = alphabet[num % length] + encoded;\n    num = Math.floor(num / length);\n  } while (num > 0);\n\n  return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n  var decoded = 0;\n\n  for (i = 0; i < str.length; i++) {\n    decoded = decoded * length + map[str.charAt(i)];\n  }\n\n  return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n  var now = encode(+new Date());\n\n  if (now !== prev) return seed = 0, prev = now;\n  return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n\n\n//# sourceURL=webpack:///./jaas-client/node_modules/yeast/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/App.css":
+/*!*********************************!*\
+  !*** ./jaas-client/src/App.css ***!
+  \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!./App.css */ \"./node_modules/css-loader/dist/cjs.js!./jaas-client/src/App.css\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./jaas-client/src/App.css?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/App.js":
+/*!********************************!*\
+  !*** ./jaas-client/src/App.js ***!
+  \********************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _App_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.css */ \"./jaas-client/src/App.css\");\n/* harmony import */ var _App_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_App_css__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var _pages_index_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pages/index.jsx */ \"./jaas-client/src/pages/index.jsx\");\n/* harmony import */ var _pages_jaas_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pages/jaas.jsx */ \"./jaas-client/src/pages/jaas.jsx\");\n/* harmony import */ var _pages_404_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pages/404.jsx */ \"./jaas-client/src/pages/404.jsx\");\n/*\n  Company: Savoir-faire Linux\n  Author: Larbi Gharib <larbi.gharib@savoirfairelinux.com>\n  UI Project inspired from https://scrimba.com/p/pbNpTv/cbZBmfV\n  License: AGPL-3\n*/\n //import logo from './logo.svg';\n\n\n\n\n\n\n\nclass App extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"BrowserRouter\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Switch\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n      exact: true,\n      path: \"/\",\n      component: _pages_index_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n      to: \"/Jaas\",\n      component: _pages_jaas_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n      exact: true,\n      path: \"/404\",\n      component: _pages_404_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Redirect\"], {\n      to: \"/404\"\n    })));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (App);\n\n//# sourceURL=webpack:///./jaas-client/src/App.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/components/ContactList.js":
+/*!***************************************************!*\
+  !*** ./jaas-client/src/components/ContactList.js ***!
+  \***************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nclass ContactList extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"rooms-list\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h3\", null, \"Liste de contacts\")));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ContactList);\n\n//# sourceURL=webpack:///./jaas-client/src/components/ContactList.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/components/Header.js":
+/*!**********************************************!*\
+  !*** ./jaas-client/src/components/Header.js ***!
+  \**********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Header; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/core/Button */ \"./jaas-client/node_modules/@material-ui/core/esm/Button/index.js\");\n/* harmony import */ var _material_ui_core_Menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/core/Menu */ \"./jaas-client/node_modules/@material-ui/core/esm/Menu/index.js\");\n/* harmony import */ var _material_ui_core_MenuItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material-ui/core/MenuItem */ \"./jaas-client/node_modules/@material-ui/core/esm/MenuItem/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ \"./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js\");\n\n\n\n\n\nfunction Header() {\n  const history = Object(react_router_dom__WEBPACK_IMPORTED_MODULE_4__[\"useHistory\"])();\n  const [anchorEl, setAnchorEl] = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(null);\n\n  const handleClick = event => {\n    setAnchorEl(event.currentTarget);\n  };\n\n  const handleClose = () => {\n    setAnchorEl(null);\n  };\n\n  const disconnect = () => {\n    let path = `/`;\n    history.push(path);\n  };\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n    \"aria-controls\": \"simple-menu\",\n    \"aria-haspopup\": \"true\",\n    onClick: handleClick\n  }, \"Menu\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n    id: \"simple-menu\",\n    anchorEl: anchorEl,\n    keepMounted: true,\n    open: Boolean(anchorEl),\n    onClose: handleClose\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_MenuItem__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n    onClick: handleClose\n  }, \"Profile\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_MenuItem__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n    onClick: handleClose\n  }, \"Mon compte\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_MenuItem__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n    onClick: disconnect\n  }, \"D\\xE9connexion\")));\n}\n\n//# sourceURL=webpack:///./jaas-client/src/components/Header.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/components/Message.js":
+/*!***********************************************!*\
+  !*** ./jaas-client/src/components/Message.js ***!
+  \***********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction Message(props) {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n    className: \"message\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n    className: \"message-username\"\n  }, props.username), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n    className: \"message-text\"\n  }, props.text));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Message);\n\n//# sourceURL=webpack:///./jaas-client/src/components/Message.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/components/MessageList.js":
+/*!***************************************************!*\
+  !*** ./jaas-client/src/components/MessageList.js ***!
+  \***************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Message */ \"./jaas-client/src/components/Message.js\");\n\n\n\nclass MessageList extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"message-list\"\n    }, this.props.messages.map((message, index) => {\n      /*DUMMY_DATA.map((message, index) => {*/\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Message__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n        key: index,\n        username: message.senderId,\n        text: message.text\n      });\n    }));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (MessageList);\n\n//# sourceURL=webpack:///./jaas-client/src/components/MessageList.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/components/NewContactForm.js":
+/*!******************************************************!*\
+  !*** ./jaas-client/src/components/NewContactForm.js ***!
+  \******************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nclass NewContactForm extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"new-room-form\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", {\n      type: \"text\",\n      placeholder: \"Ajouter un contact\",\n      required: true\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n      id: \"create-room-btn\",\n      type: \"submit\"\n    }, \"+\")));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (NewContactForm);\n\n//# sourceURL=webpack:///./jaas-client/src/components/NewContactForm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/components/SendMessageForm.js":
+/*!*******************************************************!*\
+  !*** ./jaas-client/src/components/SendMessageForm.js ***!
+  \*******************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_input_emoji__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-input-emoji */ \"./jaas-client/node_modules/react-input-emoji/dist/index.es.js\");\n\n\n\nclass SendMessageForm extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  constructor() {\n    super();\n    this.state = {\n      message: ''\n    };\n    this.handleChange = this.handleChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  handleChange(e) {\n    this.setState({\n      message: e\n    });\n  }\n\n  handleSubmit(e) {\n    //e.preventDefault()\n    this.props.sendMessage(this.state.message); //this.props.sendMessage(this.state.message)\n\n    this.setState({\n      message: ''\n    });\n  }\n\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      //onSubmit={this.handleSubmit}\n      className: \"send-message-form\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_input_emoji__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      disabled: this.props.disabled,\n      onChange: this.handleChange,\n      value: this.state.message,\n      cleanOnEnter: true,\n      onEnter: this.handleSubmit,\n      placeholder: \"\\xC9cris ton message et cliques sur Entrer\",\n      height: \"35\"\n    }));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SendMessageForm);\n\n//# sourceURL=webpack:///./jaas-client/src/components/SendMessageForm.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/index.css":
+/*!***********************************!*\
+  !*** ./jaas-client/src/index.css ***!
+  \***********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!./index.css */ \"./node_modules/css-loader/dist/cjs.js!./jaas-client/src/index.css\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./jaas-client/src/index.css?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/index.js":
+/*!**********************************!*\
+  !*** ./jaas-client/src/index.js ***!
+  \**********************************/
+/*! no exports provided */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./jaas-client/node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.css */ \"./jaas-client/src/index.css\");\n/* harmony import */ var _index_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_index_css__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./App */ \"./jaas-client/src/App.js\");\n/* harmony import */ var _serviceWorker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./serviceWorker */ \"./jaas-client/src/serviceWorker.js\");\n\n\n\n\n\nreact_dom__WEBPACK_IMPORTED_MODULE_1___default.a.render( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.StrictMode, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_App__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null)), document.getElementById('root')); // If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\n\n_serviceWorker__WEBPACK_IMPORTED_MODULE_4__[\"unregister\"]();\n\n//# sourceURL=webpack:///./jaas-client/src/index.js?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/pages/404.jsx":
+/*!***************************************!*\
+  !*** ./jaas-client/src/pages/404.jsx ***!
+  \***************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nconst NotFoundPage = () => {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h3\", null, \"404 Page not found\"));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (NotFoundPage);\n\n//# sourceURL=webpack:///./jaas-client/src/pages/404.jsx?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/pages/index.jsx":
+/*!*****************************************!*\
+  !*** ./jaas-client/src/pages/index.jsx ***!
+  \*****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _material_ui_core_Avatar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/core/Avatar */ \"./jaas-client/node_modules/@material-ui/core/esm/Avatar/index.js\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/core/Button */ \"./jaas-client/node_modules/@material-ui/core/esm/Button/index.js\");\n/* harmony import */ var _material_ui_core_CssBaseline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material-ui/core/CssBaseline */ \"./jaas-client/node_modules/@material-ui/core/esm/CssBaseline/index.js\");\n/* harmony import */ var _material_ui_core_TextField__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/core/TextField */ \"./jaas-client/node_modules/@material-ui/core/esm/TextField/index.js\");\n/* harmony import */ var _material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/FormControlLabel */ \"./jaas-client/node_modules/@material-ui/core/esm/FormControlLabel/index.js\");\n/* harmony import */ var _material_ui_core_Checkbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/Checkbox */ \"./jaas-client/node_modules/@material-ui/core/esm/Checkbox/index.js\");\n/* harmony import */ var _material_ui_core_Link__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/core/Link */ \"./jaas-client/node_modules/@material-ui/core/esm/Link/index.js\");\n/* harmony import */ var _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Grid */ \"./jaas-client/node_modules/@material-ui/core/esm/Grid/index.js\");\n/* harmony import */ var _material_ui_core_Box__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/Box */ \"./jaas-client/node_modules/@material-ui/core/esm/Box/index.js\");\n/* harmony import */ var _material_ui_icons_LockOutlined__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/icons/LockOutlined */ \"./jaas-client/node_modules/@material-ui/icons/LockOutlined.js\");\n/* harmony import */ var _material_ui_icons_LockOutlined__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_material_ui_icons_LockOutlined__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./jaas-client/node_modules/@material-ui/core/esm/Typography/index.js\");\n/* harmony import */ var _material_ui_core_Container__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/Container */ \"./jaas-client/node_modules/@material-ui/core/esm/Container/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-router-dom */ \"./jaas-client/node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var _material_ui_core_CircularProgress__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @material-ui/core/CircularProgress */ \"./jaas-client/node_modules/@material-ui/core/esm/CircularProgress/index.js\");\n/* harmony import */ var _material_ui_core_DialogTitle__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @material-ui/core/DialogTitle */ \"./jaas-client/node_modules/@material-ui/core/esm/DialogTitle/index.js\");\n/* harmony import */ var _material_ui_core_Dialog__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @material-ui/core/Dialog */ \"./jaas-client/node_modules/@material-ui/core/esm/Dialog/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n //import { makeStyles } from '@material-ui/core/styles';\n\n\n\n\n\n\n\nfunction Copyright() {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n    variant: \"body2\",\n    color: \"textSecondary\",\n    align: \"center\"\n  }, 'Copyright © 2016-', new Date().getFullYear(), ' Savoir-faire Linux Inc. GNU ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Link__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n    color: \"inherit\",\n    href: \"https://jami.net/\"\n  }, \"Jami.net\"), ' ', '.');\n}\n/*const useStyles = makeStyles((theme) => ({\n    paper: {\n        marginTop: theme.spacing(8),\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n    },\n    avatar: {\n        margin: theme.spacing(1),\n        backgroundColor: theme.palette.secondary.main,\n    },\n    form: {\n        width: '100%', // Fix IE 11 issue.\n        marginTop: theme.spacing(1),\n    },\n    submit: {\n        margin: theme.spacing(3, 0, 2),\n    },\n}));*/\n\n/*function SignIn() {\n    const classes = useStyles();\n\n\n}*/\n\n/* \n    TODO:\n    Use useState to handle username password and redirect states to render this page to \n    comply with material-ui usage of useStyles\n    Src: https://blog.logrocket.com/a-guide-to-usestate-in-react-ecb9952e406c/\n*/\n\n\nclass SignInPage extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  constructor() {\n    super();\n    this.state = {\n      username: '',\n      password: '',\n      redirect: false,\n      session: null,\n      submitted: false,\n      loading: false,\n      error: false,\n      open: false,\n      errorMessage: ''\n    };\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  handleusername(text) {\n    this.setState({\n      username: text.target.value\n    });\n  }\n\n  handlePassword(text) {\n    this.setState({\n      password: text.target.value\n    });\n  }\n\n  handleSubmit(event) {\n    event.preventDefault();\n    let obj = {};\n    obj.username = this.state.username;\n    obj.password = this.state.password;\n    this.setState({\n      submitted: true,\n      loading: true\n    });\n    fetch('/api/login?username=' + obj.username + '&password=' + obj.password, {\n      header: {\n        \"Content-Type\": \"application/json\"\n      },\n      method: \"POST\",\n      credentials: 'same-origin' //body: JSON.stringify({ obj })\n\n    }).then(res => {\n      if (res.status == '200') {\n        this.setState({\n          redirect: true\n        });\n      } else if (res.status == '401') {\n        this.setState({\n          loading: false,\n          error: true,\n          open: true,\n          errorMessage: \"Wrong credentials! Your are not allowed to connect\"\n        });\n      } //this.setState({ session: res });\n\n    }).catch(e => {\n      this.setState({\n        loading: false,\n        error: true,\n        open: true,\n        errorMessage: e.toString()\n      });\n    });\n  }\n\n  render() {\n    if (this.state.redirect) {\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_13__[\"Redirect\"], {\n        to: \"/jaas\"\n      });\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Container__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n      component: \"main\",\n      maxWidth: \"xs\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_CssBaseline__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"\"\n      /*{classes.paper}*/\n\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n      component: \"h1\",\n      variant: \"h5\"\n    }, \"Se connecter\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"form\", {\n      className: \"\"\n      /*{classes.form}*/\n      ,\n      onSubmit: this.handleSubmit\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TextField__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      variant: \"outlined\",\n      margin: \"normal\",\n      required: true,\n      fullWidth: true,\n      id: \"username\",\n      label: \"LDAP Savoir-faire Linux\",\n      name: \"username\",\n      autoComplete: \"email\",\n      autoFocus: true,\n      onChange: text => {\n        this.handleusername(text);\n      }\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TextField__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      variant: \"outlined\",\n      margin: \"normal\",\n      required: true,\n      fullWidth: true,\n      name: \"password\",\n      label: \"Mot de passe\",\n      type: \"password\",\n      id: \"password\",\n      autoComplete: \"current-password\",\n      onChange: text => {\n        this.handlePassword(text);\n      }\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Checkbox__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n        value: \"remember\",\n        color: \"primary\"\n      }),\n      label: \"Se rapeller de moi\"\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      type: \"submit\",\n      fullWidth: true,\n      variant: \"contained\",\n      color: \"primary\",\n      className: \"\"\n      /*{classes.submit}*/\n      // onClick={() => { this.login() }}\n\n    }, \"Se connecter\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      container: true\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      item: true,\n      xs: true\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Link__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n      href: \"#\",\n      variant: \"body2\"\n    }, \"Mot de passe oubli\\xE9 ?\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      item: true\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Link__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n      href: \"#\",\n      variant: \"body2\"\n    }, \"Tu n'as pas de compte? Inscris-toi\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Box__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n      mt: 8\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Copyright, null)), this.state.submitted && this.state.loading && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_CircularProgress__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n      style: {\n        position: 'relative'\n      },\n      size: 40,\n      top: 10,\n      style: {\n        marginLeft: '50%'\n      }\n    }), this.state.error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Dialog__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n      \"aria-labelledby\": \"simple-dialog-title\",\n      open: this.state.open\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_DialogTitle__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n      id: \"simple-dialog-title\"\n    }, this.state.errorMessage)));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SignInPage);\n\n//# sourceURL=webpack:///./jaas-client/src/pages/index.jsx?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/pages/jaas.jsx":
+/*!****************************************!*\
+  !*** ./jaas-client/src/pages/jaas.jsx ***!
+  \****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./jaas-client/node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Header */ \"./jaas-client/src/components/Header.js\");\n/* harmony import */ var _components_ContactList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/ContactList */ \"./jaas-client/src/components/ContactList.js\");\n/* harmony import */ var _components_MessageList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/MessageList */ \"./jaas-client/src/components/MessageList.js\");\n/* harmony import */ var _components_SendMessageForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/SendMessageForm */ \"./jaas-client/src/components/SendMessageForm.js\");\n/* harmony import */ var _components_NewContactForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/NewContactForm */ \"./jaas-client/src/components/NewContactForm.js\");\n/* harmony import */ var react_sound__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-sound */ \"./jaas-client/node_modules/react-sound/lib/index.js\");\n/* harmony import */ var react_sound__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_sound__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var socket_io_client__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! socket.io-client */ \"./jaas-client/node_modules/socket.io-client/lib/index.js\");\n/* harmony import */ var socket_io_client__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(socket_io_client__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\nvar socket = socket_io_client__WEBPACK_IMPORTED_MODULE_7___default.a.connect('http://localhost:3000');\n\nclass Jaas extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {\n  constructor() {\n    super();\n    this.state = {\n      messages: [],\n      sound: false\n    };\n    socket.on('connect', () => {\n      console.log(\"Success !\");\n    }); //import io from 'socket.io-client';\n    //this.socket = socketIOClient(ENDPOINT);\n    //this.socket.on(\"FromAPI\", data => {\n    //  this.setState({\n    //    messages: [...this.state.messages, data]\n    //  })\n    //});\n\n    this.sendMessage = this.sendMessage.bind(this);\n  }\n\n  componentDidMount() {\n    socket.on('receivedMessage', data => {\n      var message = {\n        senderId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',\n        text: data\n      };\n      this.setState({\n        messages: [...this.state.messages, message],\n        sound: true\n      });\n    });\n  }\n\n  sendMessage(text) {\n    var data = {\n      senderId: 'Me',\n      destinationId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',\n      text: text\n    };\n    socket.emit(\"SendMessage\", data);\n    console.log(data.text);\n    this.setState({\n      messages: [...this.state.messages, data],\n      sound: false\n    });\n  }\n\n  render() {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n      className: \"app\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Header__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_ContactList__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_MessageList__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      messages: this.state.messages\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_SendMessageForm__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      sendMessage: this.sendMessage\n    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_NewContactForm__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null), this.state.sound && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_sound__WEBPACK_IMPORTED_MODULE_6___default.a, {\n      url: \"stairs.mp3\"\n      /*https://notificationsounds.com/message-tones/stairs-567*/\n      ,\n      playStatus: react_sound__WEBPACK_IMPORTED_MODULE_6___default.a.status.PLAYING,\n      playFromPosition: 0\n      /* in milliseconds */\n      ,\n      onLoading: this.handleSongLoading,\n      onPlaying: this.handleSongPlaying,\n      onFinishedPlaying: this.handleSongFinishedPlaying\n    }));\n  }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Jaas);\n\n//# sourceURL=webpack:///./jaas-client/src/pages/jaas.jsx?");
+
+/***/ }),
+
+/***/ "./jaas-client/src/serviceWorker.js":
+/*!******************************************!*\
+  !*** ./jaas-client/src/serviceWorker.js ***!
+  \******************************************/
+/*! exports provided: register, unregister */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"register\", function() { return register; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unregister\", function() { return unregister; });\n// This optional code is used to register a service worker.\n// register() is not called by default.\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\nconst isLocalhost = Boolean(window.location.hostname === 'localhost' || // [::1] is the IPv6 localhost address.\nwindow.location.hostname === '[::1]' || // 127.0.0.0/8 are considered localhost for IPv4.\nwindow.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));\nfunction register(config) {\n  if (false) {}\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker.register(swUrl).then(registration => {\n    registration.onupdatefound = () => {\n      const installingWorker = registration.installing;\n\n      if (installingWorker == null) {\n        return;\n      }\n\n      installingWorker.onstatechange = () => {\n        if (installingWorker.state === 'installed') {\n          if (navigator.serviceWorker.controller) {\n            // At this point, the updated precached content has been fetched,\n            // but the previous service worker will still serve the older\n            // content until all client tabs are closed.\n            console.log('New content is available and will be used when all ' + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'); // Execute callback\n\n            if (config && config.onUpdate) {\n              config.onUpdate(registration);\n            }\n          } else {\n            // At this point, everything has been precached.\n            // It's the perfect time to display a\n            // \"Content is cached for offline use.\" message.\n            console.log('Content is cached for offline use.'); // Execute callback\n\n            if (config && config.onSuccess) {\n              config.onSuccess(registration);\n            }\n          }\n        }\n      };\n    };\n  }).catch(error => {\n    console.error('Error during service worker registration:', error);\n  });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: {\n      'Service-Worker': 'script'\n    }\n  }).then(response => {\n    // Ensure service worker exists, and that we really are getting a JS file.\n    const contentType = response.headers.get('content-type');\n\n    if (response.status === 404 || contentType != null && contentType.indexOf('javascript') === -1) {\n      // No service worker found. Probably a different app. Reload the page.\n      navigator.serviceWorker.ready.then(registration => {\n        registration.unregister().then(() => {\n          window.location.reload();\n        });\n      });\n    } else {\n      // Service worker found. Proceed as normal.\n      registerValidSW(swUrl, config);\n    }\n  }).catch(() => {\n    console.log('No internet connection found. App is running in offline mode.');\n  });\n}\n\nfunction unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    }).catch(error => {\n      console.error(error.message);\n    });\n  }\n}\n\n//# sourceURL=webpack:///./jaas-client/src/serviceWorker.js?");
+
+/***/ }),
+
+/***/ "./node_modules/base64-js/index.js":
+/*!*****************************************!*\
+  !*** ./node_modules/base64-js/index.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n\n//# sourceURL=webpack:///./node_modules/base64-js/index.js?");
+
+/***/ }),
+
+/***/ "./node_modules/buffer/index.js":
+/*!**************************************!*\
+  !*** ./node_modules/buffer/index.js ***!
+  \**************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("/* WEBPACK VAR INJECTION */(function(global) {/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\n\nvar base64 = __webpack_require__(/*! base64-js */ \"./node_modules/base64-js/index.js\")\nvar ieee754 = __webpack_require__(/*! ieee754 */ \"./node_modules/ieee754/index.js\")\nvar isArray = __webpack_require__(/*! isarray */ \"./node_modules/isarray/index.js\")\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/buffer/index.js?");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./jaas-client/src/App.css":
+/*!***********************************************************************!*\
+  !*** ./node_modules/css-loader/dist/cjs.js!./jaas-client/src/App.css ***!
+  \***********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \".App {\\n  text-align: center;\\n}\\n\\n.App-logo {\\n  height: 40vmin;\\n  pointer-events: none;\\n}\\n\\n@media (prefers-reduced-motion: no-preference) {\\n  .App-logo {\\n    animation: App-logo-spin infinite 20s linear;\\n  }\\n}\\n\\n.App-header {\\n  background-color: #282c34;\\n  min-height: 100vh;\\n  display: flex;\\n  flex-direction: column;\\n  align-items: center;\\n  justify-content: center;\\n  font-size: calc(10px + 2vmin);\\n  color: white;\\n}\\n\\n.App-link {\\n  color: #61dafb;\\n}\\n\\n@keyframes App-logo-spin {\\n  from {\\n    transform: rotate(0deg);\\n  }\\n  to {\\n    transform: rotate(360deg);\\n  }\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./jaas-client/src/App.css?./node_modules/css-loader/dist/cjs.js");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./jaas-client/src/index.css":
+/*!*************************************************************************!*\
+  !*** ./node_modules/css-loader/dist/cjs.js!./jaas-client/src/index.css ***!
+  \*************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \":root {\\n  --main-color: #1F1F1F;\\n  --secondary-color: white;\\n  --third-color: #2F2F2F;\\n  --main-text-color: #3e5869;\\n  --secondary-text-color: #b0c7d6;\\n  --send-message-form: #F5F5F5;\\n}\\n\\nhtml, body {\\n  height: 100%;\\n  margin: 0;\\n  padding: 0;\\n  font-family: 'Open Sans', sans-serif;\\n  font-weight: 200;\\n  color: #3e5869; \\n}\\n\\n#root {\\n  height: 100%;\\n}\\n\\n.app {\\n  display: grid;\\n  height: 100%;\\n  grid-template-columns: repeat(6, 1fr);\\n  grid-template-rows: 40px 1fr 1fr 1fr 1fr 1fr 60px;\\n  grid-template-areas: \\n      \\\"h h h h h h\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"r m m m m m\\\"\\n      \\\"n s s s s s\\\";\\n}\\n\\n.login {\\n  background-color: var(--main-color);\\n}\\n\\n.header-section {\\n  grid-area: h;\\n}\\n\\n.new-room-form {\\n  grid-area: n;\\n}\\n\\n.rooms-list {\\n  grid-area: r;\\n}\\n\\n.message-list {\\n  grid-area: m;\\n}\\n\\n.send-message-form {\\n  grid-area: s;\\n}\\n\\n/* REST OF CSS */\\n\\n.header-section {\\n  background-color: var(--main-color);\\n\\n}\\n\\n.simple-menu {\\n  color: var(--send-message-form);\\n}\\n\\n.rooms-list {\\n  box-sizing: border-box;\\n  padding: 10px;\\n  background-color: var(--main-color);\\n  overflow: scroll;\\n  height: 100%;\\n}\\n\\n.rooms-list ul {\\n  list-style-type: none;    \\n  padding: 0;\\n  overflow: scoll;\\n}\\n\\n.rooms-list li {\\n  margin: 10px 0;\\n}\\n\\n.rooms-list h3 {\\n  margin: 5px 0;\\n  color: var(--secondary-color);\\n}\\n\\n.rooms-list .room a {\\n  color: var(--secondary-text-color);\\n  font-weight: 600;\\n  text-decoration: none;\\n  \\n}\\n\\n.rooms-list .room.active a {\\n  color: var(--secondary-color);\\n}\\n\\n.new-room-form {\\n  padding: 0 5px;\\n  background: var(--secondary-color);\\n  color: var(--main-text-color);\\n}\\n\\n.new-room-form form {\\n  height: 100%;\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n}\\n\\n.new-room-form input {\\n  width: 135px;\\n  background: var(--secondary-color);\\n}\\n\\n.new-room-form button {\\n  background: var(--secondary-color);\\n  color: var(--main-text-color);\\n  border: 0;\\n} \\n\\n.new-room-form input::placeholder {\\n  color: var(--main-text-color);\\n  font-weight: 200;\\n}\\n\\n.new-room-form input:focus {\\n  outline-width: 0;\\n}\\n\\n.new-room-form input {\\n  border: 0;\\n}\\n\\n.new-room-form button {\\n  border: 0;\\n}\\n\\n.message {\\n  margin: 15px 0;\\n}\\n\\n.message .message-username {\\n  font-size: 11px;\\n  font-weight: bold;\\n  color: var(--secondary-color);\\n  opacity: 0.9;\\n  margin-bottom: 6px;\\n}\\n.message .message-text {\\n  background: var(--third-color);\\n  color: var(--secondary-color);\\n  display: inline;\\n  padding: 4px 8px;\\n  border-radius: 8px;\\n}\\n\\n.message-list {\\n  box-sizing: border-box;\\n  padding-left: 6px;\\n  width: 100%;\\n  height: 100%;\\n  overflow: scroll;\\n  background: var(--third-color);\\n}\\n\\n.message-list .join-room {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  height: 100%;\\n  font-size: 34px;\\n  font-weight: 300;\\n}\\n\\n.send-message-form {\\n  background: var(--send-message-form);\\n  display: flex;\\n}\\n\\n.send-message-form input {\\n  width: 100%;\\n  padding: 15px 10px;\\n  margin: 0;\\n  border-style: none;\\n  background: var(--send-message-form);\\n  font-weight: 200;\\n\\n}\\n\\n.send-message-form input:focus {\\n  outline-width: 0;\\n}\\n\\n.send-message-form input::placeholder {\\n  color: var(--main-text-color);\\n}\\n\\n.help-text {\\n  position: absolute;\\n  top: 10px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./jaas-client/src/index.css?./node_modules/css-loader/dist/cjs.js");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/runtime/api.js":
+/*!*****************************************************!*\
+  !*** ./node_modules/css-loader/dist/runtime/api.js ***!
+  \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item, useSourceMap);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join('');\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === 'string') {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, '']];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n  var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n  var cssMapping = item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (useSourceMap && typeof btoa === 'function') {\n    var sourceMapping = toComment(cssMapping);\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n  }\n\n  return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n  // eslint-disable-next-line no-undef\n  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n  var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n  return \"/*# \".concat(data, \" */\");\n}\n\n//# sourceURL=webpack:///./node_modules/css-loader/dist/runtime/api.js?");
+
+/***/ }),
+
+/***/ "./node_modules/ieee754/index.js":
+/*!***************************************!*\
+  !*** ./node_modules/ieee754/index.js ***!
+  \***************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n\n//# sourceURL=webpack:///./node_modules/ieee754/index.js?");
+
+/***/ }),
+
+/***/ "./node_modules/isarray/index.js":
+/*!***************************************!*\
+  !*** ./node_modules/isarray/index.js ***!
+  \***************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./node_modules/isarray/index.js?");
+
+/***/ }),
+
+/***/ "./node_modules/process/browser.js":
+/*!*****************************************!*\
+  !*** ./node_modules/process/browser.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // 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\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // 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.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack:///./node_modules/process/browser.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
+/*!****************************************************************************!*\
+  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
+  \****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n\nvar isOldIE = function isOldIE() {\n  var memo;\n  return function memorize() {\n    if (typeof memo === 'undefined') {\n      // Test for IE <= 9 as proposed by Browserhacks\n      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n      // Tests for existence of standard globals is to allow style-loader\n      // to operate correctly into non-standard environments\n      // @see https://github.com/webpack-contrib/style-loader/issues/177\n      memo = Boolean(window && document && document.all && !window.atob);\n    }\n\n    return memo;\n  };\n}();\n\nvar getTarget = function getTarget() {\n  var memo = {};\n  return function memorize(target) {\n    if (typeof memo[target] === 'undefined') {\n      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n        try {\n          // This will throw an exception if access to iframe is blocked\n          // due to cross-origin restrictions\n          styleTarget = styleTarget.contentDocument.head;\n        } catch (e) {\n          // istanbul ignore next\n          styleTarget = null;\n        }\n      }\n\n      memo[target] = styleTarget;\n    }\n\n    return memo[target];\n  };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n\n  for (var i = 0; i < stylesInDom.length; i++) {\n    if (stylesInDom[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n\n  return result;\n}\n\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var index = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3]\n    };\n\n    if (index !== -1) {\n      stylesInDom[index].references++;\n      stylesInDom[index].updater(obj);\n    } else {\n      stylesInDom.push({\n        identifier: identifier,\n        updater: addStyle(obj, options),\n        references: 1\n      });\n    }\n\n    identifiers.push(identifier);\n  }\n\n  return identifiers;\n}\n\nfunction insertStyleElement(options) {\n  var style = document.createElement('style');\n  var attributes = options.attributes || {};\n\n  if (typeof attributes.nonce === 'undefined') {\n    var nonce =  true ? __webpack_require__.nc : undefined;\n\n    if (nonce) {\n      attributes.nonce = nonce;\n    }\n  }\n\n  Object.keys(attributes).forEach(function (key) {\n    style.setAttribute(key, attributes[key]);\n  });\n\n  if (typeof options.insert === 'function') {\n    options.insert(style);\n  } else {\n    var target = getTarget(options.insert || 'head');\n\n    if (!target) {\n      throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n    }\n\n    target.appendChild(style);\n  }\n\n  return style;\n}\n\nfunction removeStyleElement(style) {\n  // istanbul ignore if\n  if (style.parentNode === null) {\n    return false;\n  }\n\n  style.parentNode.removeChild(style);\n}\n/* istanbul ignore next  */\n\n\nvar replaceText = function replaceText() {\n  var textStore = [];\n  return function replace(index, replacement) {\n    textStore[index] = replacement;\n    return textStore.filter(Boolean).join('\\n');\n  };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n  var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n  /* istanbul ignore if  */\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = replaceText(index, css);\n  } else {\n    var cssNode = document.createTextNode(css);\n    var childNodes = style.childNodes;\n\n    if (childNodes[index]) {\n      style.removeChild(childNodes[index]);\n    }\n\n    if (childNodes.length) {\n      style.insertBefore(cssNode, childNodes[index]);\n    } else {\n      style.appendChild(cssNode);\n    }\n  }\n}\n\nfunction applyToTag(style, options, obj) {\n  var css = obj.css;\n  var media = obj.media;\n  var sourceMap = obj.sourceMap;\n\n  if (media) {\n    style.setAttribute('media', media);\n  } else {\n    style.removeAttribute('media');\n  }\n\n  if (sourceMap && btoa) {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  } // For old IE\n\n  /* istanbul ignore if  */\n\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    while (style.firstChild) {\n      style.removeChild(style.firstChild);\n    }\n\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n  var style;\n  var update;\n  var remove;\n\n  if (options.singleton) {\n    var styleIndex = singletonCounter++;\n    style = singleton || (singleton = insertStyleElement(options));\n    update = applyToSingletonTag.bind(null, style, styleIndex, false);\n    remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n  } else {\n    style = insertStyleElement(options);\n    update = applyToTag.bind(null, style, options);\n\n    remove = function remove() {\n      removeStyleElement(style);\n    };\n  }\n\n  update(obj);\n  return function updateStyle(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n        return;\n      }\n\n      update(obj = newObj);\n    } else {\n      remove();\n    }\n  };\n}\n\nmodule.exports = function (list, options) {\n  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n  // tags it will allow on a page\n\n  if (!options.singleton && typeof options.singleton !== 'boolean') {\n    options.singleton = isOldIE();\n  }\n\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n\n    if (Object.prototype.toString.call(newList) !== '[object Array]') {\n      return;\n    }\n\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDom[index].references--;\n    }\n\n    var newLastIdentifiers = modulesToDom(newList, options);\n\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n\n      var _index = getIndexByIdentifier(_identifier);\n\n      if (stylesInDom[_index].references === 0) {\n        stylesInDom[_index].updater();\n\n        stylesInDom.splice(_index, 1);\n      }\n    }\n\n    lastIdentifiers = newLastIdentifiers;\n  };\n};\n\n//# sourceURL=webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js?");
+
+/***/ }),
+
+/***/ "./node_modules/webpack/buildin/global.js":
+/*!***********************************!*\
+  !*** (webpack)/buildin/global.js ***!
+  \***********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?");
+
+/***/ }),
+
+/***/ "./node_modules/webpack/buildin/module.js":
+/*!***********************************!*\
+  !*** (webpack)/buildin/module.js ***!
+  \***********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n//# sourceURL=webpack:///(webpack)/buildin/module.js?");
+
+/***/ }),
+
+/***/ 0:
+/*!********************!*\
+  !*** ws (ignored) ***!
+  \********************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/* (ignored) */\n\n//# sourceURL=webpack:///ws_(ignored)?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/jaas-client/dist/index.html b/jaas-client/dist/index.html
new file mode 100644
index 0000000..eaccd26
--- /dev/null
+++ b/jaas-client/dist/index.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Jass Client</title>
+</head>
+
+<body>
+    <div id="root"></div>
+    <script src="bundle.js"></script>
+</body>
+
+</html>
\ No newline at end of file
