UNPKG

ui-widget-toolkit

Version:

UI widgets built on top of D3, Pixi.js and ag-grid-community

2,615 lines • 1.61 MB
(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory(require("d3"), require("d3-sankey"), require("dagre"), require("es6-promise"), require("pixi.js"));
	else if(typeof define === 'function' && define.amd)
		define("UWT", ["d3", "d3-sankey", "dagre", "es6-promise", "pixi.js"], factory);
	else if(typeof exports === 'object')
		exports["UWT"] = factory(require("d3"), require("d3-sankey"), require("dagre"), require("es6-promise"), require("pixi.js"));
	else
		root["UWT"] = factory(root["d3"], root["Sankey"], root["dagre"], root["es6-promise"], root["PIXI"]);
})(window, function(__WEBPACK_EXTERNAL_MODULE_d3__, __WEBPACK_EXTERNAL_MODULE_d3_sankey__, __WEBPACK_EXTERNAL_MODULE_dagre__, __WEBPACK_EXTERNAL_MODULE_es6_promise__, __WEBPACK_EXTERNAL_MODULE_pixi_js__) {
return /******/ (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 = "./src/build/export.graph.ts");
/******/ })
/************************************************************************/
/******/ ({

/***/ "./node_modules/d3-array/src/array.js":
/*!********************************************!*\
  !*** ./node_modules/d3-array/src/array.js ***!
  \********************************************/
/*! exports provided: slice, map */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"slice\", function() { return slice; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"map\", function() { return map; });\nvar array = Array.prototype;\n\nvar slice = array.slice;\nvar map = array.map;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hcnJheS5qcz9jMGMyIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuZXhwb3J0IHZhciBtYXAgPSBhcnJheS5tYXA7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/array.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/ascending.js":
/*!************************************************!*\
  !*** ./node_modules/d3-array/src/ascending.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\"] = (function(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzPzAwZmIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/ascending.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/bisect.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-array/src/bisect.js ***!
  \*********************************************/
/*! exports provided: bisectRight, bisectLeft, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bisectRight\", function() { return bisectRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bisectLeft\", function() { return bisectLeft; });\n/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ \"./node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _bisector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bisector */ \"./node_modules/d3-array/src/bisector.js\");\n\n\n\nvar ascendingBisect = Object(_bisector__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ascending__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\nvar bisectRight = ascendingBisect.right;\nvar bisectLeft = ascendingBisect.left;\n/* harmony default export */ __webpack_exports__[\"default\"] = (bisectRight);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzPzg3YzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmdcIjtcbmltcG9ydCBiaXNlY3RvciBmcm9tIFwiLi9iaXNlY3RvclwiO1xuXG52YXIgYXNjZW5kaW5nQmlzZWN0ID0gYmlzZWN0b3IoYXNjZW5kaW5nKTtcbmV4cG9ydCB2YXIgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG5leHBvcnQgdmFyIGJpc2VjdExlZnQgPSBhc2NlbmRpbmdCaXNlY3QubGVmdDtcbmV4cG9ydCBkZWZhdWx0IGJpc2VjdFJpZ2h0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/bisect.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/bisector.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-array/src/bisector.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ \"./node_modules/d3-array/src/ascending.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n});\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return Object(_ascending__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(f(d), x);\n  };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcz8yYTJkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKGNvbXBhcmUubGVuZ3RoID09PSAxKSBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihjb21wYXJlKTtcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH0sXG4gICAgcmlnaHQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkge1xuICAgICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgICAgdmFyIG1pZCA9IGxvICsgaGkgPj4+IDE7XG4gICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPiAwKSBoaSA9IG1pZDtcbiAgICAgICAgZWxzZSBsbyA9IG1pZCArIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG87XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGQsIHgpIHtcbiAgICByZXR1cm4gYXNjZW5kaW5nKGYoZCksIHgpO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/bisector.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/constant.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-array/src/constant.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\"] = (function(x) {\n  return function() {\n    return x;\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2NvbnN0YW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jb25zdGFudC5qcz9kOWI4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/constant.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/cross.js":
/*!********************************************!*\
  !*** ./node_modules/d3-array/src/cross.js ***!
  \********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _pairs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pairs */ \"./node_modules/d3-array/src/pairs.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = _pairs__WEBPACK_IMPORTED_MODULE_0__[\"pair\"];\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Nyb3NzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jcm9zcy5qcz9mNjNlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFpcn0gZnJvbSBcIi4vcGFpcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzMCwgdmFsdWVzMSwgcmVkdWNlKSB7XG4gIHZhciBuMCA9IHZhbHVlczAubGVuZ3RoLFxuICAgICAgbjEgPSB2YWx1ZXMxLmxlbmd0aCxcbiAgICAgIHZhbHVlcyA9IG5ldyBBcnJheShuMCAqIG4xKSxcbiAgICAgIGkwLFxuICAgICAgaTEsXG4gICAgICBpLFxuICAgICAgdmFsdWUwO1xuXG4gIGlmIChyZWR1Y2UgPT0gbnVsbCkgcmVkdWNlID0gcGFpcjtcblxuICBmb3IgKGkwID0gaSA9IDA7IGkwIDwgbjA7ICsraTApIHtcbiAgICBmb3IgKHZhbHVlMCA9IHZhbHVlczBbaTBdLCBpMSA9IDA7IGkxIDwgbjE7ICsraTEsICsraSkge1xuICAgICAgdmFsdWVzW2ldID0gcmVkdWNlKHZhbHVlMCwgdmFsdWVzMVtpMV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/cross.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/descending.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-array/src/descending.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\"] = (function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanM/ZDJjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBiIDwgYSA/IC0xIDogYiA+IGEgPyAxIDogYiA+PSBhID8gMCA6IE5hTjtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/descending.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/deviation.js":
/*!************************************************!*\
  !*** ./node_modules/d3-array/src/deviation.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _variance__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./variance */ \"./node_modules/d3-array/src/variance.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(array, f) {\n  var v = Object(_variance__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array, f);\n  return v ? Math.sqrt(v) : v;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2RldmlhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGV2aWF0aW9uLmpzPzA5YzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZhcmlhbmNlIGZyb20gXCIuL3ZhcmlhbmNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBmKSB7XG4gIHZhciB2ID0gdmFyaWFuY2UoYXJyYXksIGYpO1xuICByZXR1cm4gdiA/IE1hdGguc3FydCh2KSA6IHY7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/deviation.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/extent.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-array/src/extent.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\"] = (function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2V4dGVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZXh0ZW50LmpzP2MzM2YiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluLFxuICAgICAgbWF4O1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG1pbiA+IHZhbHVlKSBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChtYXggPCB2YWx1ZSkgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFttaW4sIG1heF07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/extent.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/histogram.js":
/*!************************************************!*\
  !*** ./node_modules/d3-array/src/histogram.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ \"./node_modules/d3-array/src/array.js\");\n/* harmony import */ var _bisect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bisect */ \"./node_modules/d3-array/src/bisect.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant */ \"./node_modules/d3-array/src/constant.js\");\n/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./extent */ \"./node_modules/d3-array/src/extent.js\");\n/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./identity */ \"./node_modules/d3-array/src/identity.js\");\n/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./range */ \"./node_modules/d3-array/src/range.js\");\n/* harmony import */ var _ticks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ticks */ \"./node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var _threshold_sturges__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./threshold/sturges */ \"./node_modules/d3-array/src/threshold/sturges.js\");\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  var value = _identity__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n      domain = _extent__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n      threshold = _threshold_sturges__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\n\n  function histogram(data) {\n    var i,\n        n = data.length,\n        x,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = Object(_ticks__WEBPACK_IMPORTED_MODULE_6__[\"tickStep\"])(x0, x1, tz);\n      tz = Object(_range__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n    }\n\n    // Remove any thresholds outside the domain.\n    var m = tz.length;\n    while (tz[0] <= x0) tz.shift(), --m;\n    while (tz[m - 1] > x1) tz.pop(), --m;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    for (i = 0; i < n; ++i) {\n      x = values[i];\n      if (x0 <= x && x <= x1) {\n        bins[Object(_bisect__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(tz, x, 0, m)].push(data[i]);\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__[\"default\"])([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? Object(_constant__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_array__WEBPACK_IMPORTED_MODULE_0__[\"slice\"].call(_)) : Object(_constant__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_), histogram) : threshold;\n  };\n\n  return histogram;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2hpc3RvZ3JhbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaGlzdG9ncmFtLmpzPzZjNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBiaXNlY3QgZnJvbSBcIi4vYmlzZWN0XCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBleHRlbnQgZnJvbSBcIi4vZXh0ZW50XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcbmltcG9ydCByYW5nZSBmcm9tIFwiLi9yYW5nZVwiO1xuaW1wb3J0IHt0aWNrU3RlcH0gZnJvbSBcIi4vdGlja3NcIjtcbmltcG9ydCBzdHVyZ2VzIGZyb20gXCIuL3RocmVzaG9sZC9zdHVyZ2VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIGRvbWFpbiA9IGV4dGVudCxcbiAgICAgIHRocmVzaG9sZCA9IHN0dXJnZXM7XG5cbiAgZnVuY3Rpb24gaGlzdG9ncmFtKGRhdGEpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICB4LFxuICAgICAgICB2YWx1ZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YWx1ZXNbaV0gPSB2YWx1ZShkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICB9XG5cbiAgICB2YXIgeHogPSBkb21haW4odmFsdWVzKSxcbiAgICAgICAgeDAgPSB4elswXSxcbiAgICAgICAgeDEgPSB4elsxXSxcbiAgICAgICAgdHogPSB0aHJlc2hvbGQodmFsdWVzLCB4MCwgeDEpO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHopKSB7XG4gICAgICB0eiA9IHRpY2tTdGVwKHgwLCB4MSwgdHopO1xuICAgICAgdHogPSByYW5nZShNYXRoLmNlaWwoeDAgLyB0eikgKiB0eiwgeDEsIHR6KTsgLy8gZXhjbHVzaXZlXG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSB0aHJlc2hvbGRzIG91dHNpZGUgdGhlIGRvbWFpbi5cbiAgICB2YXIgbSA9IHR6Lmxlbmd0aDtcbiAgICB3aGlsZSAodHpbMF0gPD0geDApIHR6LnNoaWZ0KCksIC0tbTtcbiAgICB3aGlsZSAodHpbbSAtIDFdID4geDEpIHR6LnBvcCgpLCAtLW07XG5cbiAgICB2YXIgYmlucyA9IG5ldyBBcnJheShtICsgMSksXG4gICAgICAgIGJpbjtcblxuICAgIC8vIEluaXRpYWxpemUgYmlucy5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG07ICsraSkge1xuICAgICAgYmluID0gYmluc1tpXSA9IFtdO1xuICAgICAgYmluLngwID0gaSA+IDAgPyB0eltpIC0gMV0gOiB4MDtcbiAgICAgIGJpbi54MSA9IGkgPCBtID8gdHpbaV0gOiB4MTtcbiAgICB9XG5cbiAgICAvLyBBc3NpZ24gZGF0YSB0byBiaW5zIGJ5IHZhbHVlLCBpZ25vcmluZyBhbnkgb3V0c2lkZSB0aGUgZG9tYWluLlxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHggPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoeDAgPD0geCAmJiB4IDw9IHgxKSB7XG4gICAgICAgIGJpbnNbYmlzZWN0KHR6LCB4LCAwLCBtKV0ucHVzaChkYXRhW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmlucztcbiAgfVxuXG4gIGhpc3RvZ3JhbS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGhpc3RvZ3JhbSkgOiB2YWx1ZTtcbiAgfTtcblxuICBoaXN0b2dyYW0uZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW19bMF0sIF9bMV1dKSwgaGlzdG9ncmFtKSA6IGRvbWFpbjtcbiAgfTtcblxuICBoaXN0b2dyYW0udGhyZXNob2xkcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aHJlc2hvbGQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IEFycmF5LmlzQXJyYXkoXykgPyBjb25zdGFudChzbGljZS5jYWxsKF8pKSA6IGNvbnN0YW50KF8pLCBoaXN0b2dyYW0pIDogdGhyZXNob2xkO1xuICB9O1xuXG4gIHJldHVybiBoaXN0b2dyYW07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/histogram.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/identity.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-array/src/identity.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\"] = (function(x) {\n  return x;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2lkZW50aXR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pZGVudGl0eS5qcz84YjZkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/identity.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/index.js":
/*!********************************************!*\
  !*** ./node_modules/d3-array/src/index.js ***!
  \********************************************/
/*! exports provided: bisect, bisectRight, bisectLeft, ascending, bisector, cross, descending, deviation, extent, histogram, thresholdFreedmanDiaconis, thresholdScott, thresholdSturges, max, mean, median, merge, min, pairs, permute, quantile, range, scan, shuffle, sum, ticks, tickIncrement, tickStep, transpose, variance, zip */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _bisect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bisect */ \"./node_modules/d3-array/src/bisect.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bisect\", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bisectRight\", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__[\"bisectRight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bisectLeft\", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__[\"bisectLeft\"]; });\n\n/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending */ \"./node_modules/d3-array/src/ascending.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ascending\", function() { return _ascending__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _bisector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bisector */ \"./node_modules/d3-array/src/bisector.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bisector\", function() { return _bisector__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _cross__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cross */ \"./node_modules/d3-array/src/cross.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"cross\", function() { return _cross__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _descending__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./descending */ \"./node_modules/d3-array/src/descending.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"descending\", function() { return _descending__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _deviation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./deviation */ \"./node_modules/d3-array/src/deviation.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"deviation\", function() { return _deviation__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./extent */ \"./node_modules/d3-array/src/extent.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"extent\", function() { return _extent__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _histogram__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./histogram */ \"./node_modules/d3-array/src/histogram.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"histogram\", function() { return _histogram__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _threshold_freedmanDiaconis__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./threshold/freedmanDiaconis */ \"./node_modules/d3-array/src/threshold/freedmanDiaconis.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"thresholdFreedmanDiaconis\", function() { return _threshold_freedmanDiaconis__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _threshold_scott__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./threshold/scott */ \"./node_modules/d3-array/src/threshold/scott.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"thresholdScott\", function() { return _threshold_scott__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _threshold_sturges__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./threshold/sturges */ \"./node_modules/d3-array/src/threshold/sturges.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"thresholdSturges\", function() { return _threshold_sturges__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _max__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./max */ \"./node_modules/d3-array/src/max.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"max\", function() { return _max__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _mean__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./mean */ \"./node_modules/d3-array/src/mean.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"mean\", function() { return _mean__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _median__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./median */ \"./node_modules/d3-array/src/median.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"median\", function() { return _median__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./merge */ \"./node_modules/d3-array/src/merge.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"merge\", function() { return _merge__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _min__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./min */ \"./node_modules/d3-array/src/min.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"min\", function() { return _min__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony import */ var _pairs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./pairs */ \"./node_modules/d3-array/src/pairs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"pairs\", function() { return _pairs__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _permute__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./permute */ \"./node_modules/d3-array/src/permute.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"permute\", function() { return _permute__WEBPACK_IMPORTED_MODULE_17__[\"default\"]; });\n\n/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./quantile */ \"./node_modules/d3-array/src/quantile.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"quantile\", function() { return _quantile__WEBPACK_IMPORTED_MODULE_18__[\"default\"]; });\n\n/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./range */ \"./node_modules/d3-array/src/range.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"range\", function() { return _range__WEBPACK_IMPORTED_MODULE_19__[\"default\"]; });\n\n/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./scan */ \"./node_modules/d3-array/src/scan.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scan\", function() { return _scan__WEBPACK_IMPORTED_MODULE_20__[\"default\"]; });\n\n/* harmony import */ var _shuffle__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./shuffle */ \"./node_modules/d3-array/src/shuffle.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"shuffle\", function() { return _shuffle__WEBPACK_IMPORTED_MODULE_21__[\"default\"]; });\n\n/* harmony import */ var _sum__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sum */ \"./node_modules/d3-array/src/sum.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sum\", function() { return _sum__WEBPACK_IMPORTED_MODULE_22__[\"default\"]; });\n\n/* harmony import */ var _ticks__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ticks */ \"./node_modules/d3-array/src/ticks.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ticks\", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"tickIncrement\", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__[\"tickIncrement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"tickStep\", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__[\"tickStep\"]; });\n\n/* harmony import */ var _transpose__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./transpose */ \"./node_modules/d3-array/src/transpose.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"transpose\", function() { return _transpose__WEBPACK_IMPORTED_MODULE_24__[\"default\"]; });\n\n/* harmony import */ var _variance__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./variance */ \"./node_modules/d3-array/src/variance.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"variance\", function() { return _variance__WEBPACK_IMPORTED_MODULE_25__[\"default\"]; });\n\n/* harmony import */ var _zip__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./zip */ \"./node_modules/d3-array/src/zip.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"zip\", function() { return _zip__WEBPACK_IMPORTED_MODULE_26__[\"default\"]; });\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=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcz9iYzE3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBiaXNlY3QsIGJpc2VjdFJpZ2h0LCBiaXNlY3RMZWZ0fSBmcm9tIFwiLi9iaXNlY3RcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhc2NlbmRpbmd9IGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpc2VjdG9yfSBmcm9tIFwiLi9iaXNlY3RvclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyb3NzfSBmcm9tIFwiLi9jcm9zc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGRlc2NlbmRpbmd9IGZyb20gXCIuL2Rlc2NlbmRpbmdcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkZXZpYXRpb259IGZyb20gXCIuL2RldmlhdGlvblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4dGVudH0gZnJvbSBcIi4vZXh0ZW50XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaGlzdG9ncmFtfSBmcm9tIFwiLi9oaXN0b2dyYW1cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzfSBmcm9tIFwiLi90aHJlc2hvbGQvZnJlZWRtYW5EaWFjb25pc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZFNjb3R0fSBmcm9tIFwiLi90aHJlc2hvbGQvc2NvdHRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aHJlc2hvbGRTdHVyZ2VzfSBmcm9tIFwiLi90aHJlc2hvbGQvc3R1cmdlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1heH0gZnJvbSBcIi4vbWF4XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVhbn0gZnJvbSBcIi4vbWVhblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1lZGlhbn0gZnJvbSBcIi4vbWVkaWFuXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVyZ2V9IGZyb20gXCIuL21lcmdlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWlufSBmcm9tIFwiLi9taW5cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWlyc30gZnJvbSBcIi4vcGFpcnNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwZXJtdXRlfSBmcm9tIFwiLi9wZXJtdXRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVhbnRpbGV9IGZyb20gXCIuL3F1YW50aWxlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZ2V9IGZyb20gXCIuL3JhbmdlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2Nhbn0gZnJvbSBcIi4vc2NhblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNodWZmbGV9IGZyb20gXCIuL3NodWZmbGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdW19IGZyb20gXCIuL3N1bVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRpY2tzLCB0aWNrSW5jcmVtZW50LCB0aWNrU3RlcH0gZnJvbSBcIi4vdGlja3NcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmFuc3Bvc2V9IGZyb20gXCIuL3RyYW5zcG9zZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHZhcmlhbmNlfSBmcm9tIFwiLi92YXJpYW5jZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHppcH0gZnJvbSBcIi4vemlwXCI7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/max.js":
/*!******************************************!*\
  !*** ./node_modules/d3-array/src/max.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\"] = (function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWF4LmpzPzgyM2YiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWF4O1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/max.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/mean.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-array/src/mean.js ***!
  \*******************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ \"./node_modules/d3-array/src/number.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values, valueof) {\n  var n = values.length,\n      m = n,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values[i]))) sum += value;\n      else --m;\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(valueof(values[i], i, values)))) sum += value;\n      else --m;\n    }\n  }\n\n  if (m) return sum / m;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lYW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lYW4uanM/NTc1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgbSA9IG4sXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlc1tpXSkpKSBzdW0gKz0gdmFsdWU7XG4gICAgICBlbHNlIC0tbTtcbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSBzdW0gKz0gdmFsdWU7XG4gICAgICBlbHNlIC0tbTtcbiAgICB9XG4gIH1cblxuICBpZiAobSkgcmV0dXJuIHN1bSAvIG07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/mean.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/median.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-array/src/median.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ \"./node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./number */ \"./node_modules/d3-array/src/number.js\");\n/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./quantile */ \"./node_modules/d3-array/src/quantile.js\");\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      numbers = [];\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values[i]))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(valueof(values[i], i, values)))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  return Object(_quantile__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(numbers.sort(_ascending__WEBPACK_IMPORTED_MODULE_0__[\"default\"]), 0.5);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lZGlhbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzP2MwYWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmdcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5pbXBvcnQgcXVhbnRpbGUgZnJvbSBcIi4vcXVhbnRpbGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbnVtYmVycyA9IFtdO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZXNbaV0pKSkge1xuICAgICAgICBudW1iZXJzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHtcbiAgICAgICAgbnVtYmVycy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbnRpbGUobnVtYmVycy5zb3J0KGFzY2VuZGluZyksIDAuNSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/median.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/merge.js":
/*!********************************************!*\
  !*** ./node_modules/d3-array/src/merge.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\"] = (function(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lcmdlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZXJnZS5qcz8xNTM5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgbiA9IGFycmF5cy5sZW5ndGgsXG4gICAgICBtLFxuICAgICAgaSA9IC0xLFxuICAgICAgaiA9IDAsXG4gICAgICBtZXJnZWQsXG4gICAgICBhcnJheTtcblxuICB3aGlsZSAoKytpIDwgbikgaiArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICBtZXJnZWQgPSBuZXcgQXJyYXkoaik7XG5cbiAgd2hpbGUgKC0tbiA+PSAwKSB7XG4gICAgYXJyYXkgPSBhcnJheXNbbl07XG4gICAgbSA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoLS1tID49IDApIHtcbiAgICAgIG1lcmdlZFstLWpdID0gYXJyYXlbbV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/merge.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/min.js":
/*!******************************************!*\
  !*** ./node_modules/d3-array/src/min.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\"] = (function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  return min;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWluLmpzPzlhYjUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiBtaW4gPiB2YWx1ZSkge1xuICAgICAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1pbjtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/min.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/number.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-array/src/number.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\"] = (function(x) {\n  return x === null ? NaN : +x;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL251bWJlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzPzBhMjAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9PT0gbnVsbCA/IE5hTiA6ICt4O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/number.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/pairs.js":
/*!********************************************!*\
  !*** ./node_modules/d3-array/src/pairs.js ***!
  \********************************************/
/*! exports provided: default, pair */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pair\", function() { return pair; });\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(array, f) {\n  if (f == null) f = pair;\n  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n  while (i < n) pairs[i] = f(p, p = array[++i]);\n  return pairs;\n});\n\nfunction pair(a, b) {\n  return [a, b];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3BhaXJzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9wYWlycy5qcz80N2QwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBmKSB7XG4gIGlmIChmID09IG51bGwpIGYgPSBwYWlyO1xuICB2YXIgaSA9IDAsIG4gPSBhcnJheS5sZW5ndGggLSAxLCBwID0gYXJyYXlbMF0sIHBhaXJzID0gbmV3IEFycmF5KG4gPCAwID8gMCA6IG4pO1xuICB3aGlsZSAoaSA8IG4pIHBhaXJzW2ldID0gZihwLCBwID0gYXJyYXlbKytpXSk7XG4gIHJldHVybiBwYWlycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhaXIoYSwgYikge1xuICByZXR1cm4gW2EsIGJdO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/pairs.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/permute.js":
/*!**********************************************!*\
  !*** ./node_modules/d3-array/src/permute.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\"] = (function(array, indexes) {\n  var i = indexes.length, permutes = new Array(i);\n  while (i--) permutes[i] = array[indexes[i]];\n  return permutes;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3Blcm11dGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3Blcm11dGUuanM/MzIyMCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgaW5kZXhlcykge1xuICB2YXIgaSA9IGluZGV4ZXMubGVuZ3RoLCBwZXJtdXRlcyA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSkgcGVybXV0ZXNbaV0gPSBhcnJheVtpbmRleGVzW2ldXTtcbiAgcmV0dXJuIHBlcm11dGVzO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/permute.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/quantile.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-array/src/quantile.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ \"./node_modules/d3-array/src/number.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values, p, valueof) {\n  if (valueof == null) valueof = _number__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3F1YW50aWxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcz8xODc1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PSBudWxsKSB2YWx1ZW9mID0gbnVtYmVyO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkpIHJldHVybjtcbiAgaWYgKChwID0gK3ApIDw9IDAgfHwgbiA8IDIpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbMF0sIDAsIHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbbiAtIDFdLCBuIC0gMSwgdmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSArdmFsdWVvZih2YWx1ZXNbaTBdLCBpMCwgdmFsdWVzKSxcbiAgICAgIHZhbHVlMSA9ICt2YWx1ZW9mKHZhbHVlc1tpMCArIDFdLCBpMCArIDEsIHZhbHVlcyk7XG4gIHJldHVybiB2YWx1ZTAgKyAodmFsdWUxIC0gdmFsdWUwKSAqIChpIC0gaTApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/quantile.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/range.js":
/*!********************************************!*\
  !*** ./node_modules/d3-array/src/range.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\"] = (function(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JhbmdlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcz8zNjViIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/range.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/scan.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-array/src/scan.js ***!
  \*******************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ \"./node_modules/d3-array/src/ascending.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values, compare) {\n  if (!(n = values.length)) return;\n  var n,\n      i = 0,\n      j = 0,\n      xi,\n      xj = values[j];\n\n  if (compare == null) compare = _ascending__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n\n  while (++i < n) {\n    if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n      xj = xi, j = i;\n    }\n  }\n\n  if (compare(xj, xj) === 0) return j;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NjYW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NjYW4uanM/M2E0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIGNvbXBhcmUpIHtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpKSByZXR1cm47XG4gIHZhciBuLFxuICAgICAgaSA9IDAsXG4gICAgICBqID0gMCxcbiAgICAgIHhpLFxuICAgICAgeGogPSB2YWx1ZXNbal07XG5cbiAgaWYgKGNvbXBhcmUgPT0gbnVsbCkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIGlmIChjb21wYXJlKHhpID0gdmFsdWVzW2ldLCB4aikgPCAwIHx8IGNvbXBhcmUoeGosIHhqKSAhPT0gMCkge1xuICAgICAgeGogPSB4aSwgaiA9IGk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbXBhcmUoeGosIHhqKSA9PT0gMCkgcmV0dXJuIGo7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/scan.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/shuffle.js":
/*!**********************************************!*\
  !*** ./node_modules/d3-array/src/shuffle.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\"] = (function(array, i0, i1) {\n  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m + i0];\n    array[m + i0] = array[i + i0];\n    array[i + i0] = t;\n  }\n\n  return array;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NodWZmbGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NodWZmbGUuanM/NDBhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgaTAsIGkxKSB7XG4gIHZhciBtID0gKGkxID09IG51bGwgPyBhcnJheS5sZW5ndGggOiBpMSkgLSAoaTAgPSBpMCA9PSBudWxsID8gMCA6ICtpMCksXG4gICAgICB0LFxuICAgICAgaTtcblxuICB3aGlsZSAobSkge1xuICAgIGkgPSBNYXRoLnJhbmRvbSgpICogbS0tIHwgMDtcbiAgICB0ID0gYXJyYXlbbSArIGkwXTtcbiAgICBhcnJheVttICsgaTBdID0gYXJyYXlbaSArIGkwXTtcbiAgICBhcnJheVtpICsgaTBdID0gdDtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/shuffle.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/sum.js":
/*!******************************************!*\
  !*** ./node_modules/d3-array/src/sum.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\"] = (function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (value = +valueof(values[i], i, values)) sum += value;\n    }\n  }\n\n  return sum;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VtLmpzPzM5NjUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZXNbaV0pIHN1bSArPSB2YWx1ZTsgLy8gTm90ZTogemVybyBhbmQgbnVsbCBhcmUgZXF1aXZhbGVudC5cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSBzdW0gKz0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1bTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/sum.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/threshold/freedmanDiaconis.js":
/*!*****************************************************************!*\
  !*** ./node_modules/d3-array/src/threshold/freedmanDiaconis.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array */ \"./node_modules/d3-array/src/array.js\");\n/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ascending */ \"./node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../number */ \"./node_modules/d3-array/src/number.js\");\n/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../quantile */ \"./node_modules/d3-array/src/quantile.js\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values, min, max) {\n  values = _array__WEBPACK_IMPORTED_MODULE_0__[\"map\"].call(values, _number__WEBPACK_IMPORTED_MODULE_2__[\"default\"]).sort(_ascending__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n  return Math.ceil((max - min) / (2 * (Object(_quantile__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(values, 0.75) - Object(_quantile__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9mcmVlZG1hbkRpYWNvbmlzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvZnJlZWRtYW5EaWFjb25pcy5qcz9jMjM0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWFwfSBmcm9tIFwiLi4vYXJyYXlcIjtcbmltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4uL2FzY2VuZGluZ1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyXCI7XG5pbXBvcnQgcXVhbnRpbGUgZnJvbSBcIi4uL3F1YW50aWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgbWluLCBtYXgpIHtcbiAgdmFsdWVzID0gbWFwLmNhbGwodmFsdWVzLCBudW1iZXIpLnNvcnQoYXNjZW5kaW5nKTtcbiAgcmV0dXJuIE1hdGguY2VpbCgobWF4IC0gbWluKSAvICgyICogKHF1YW50aWxlKHZhbHVlcywgMC43NSkgLSBxdWFudGlsZSh2YWx1ZXMsIDAuMjUpKSAqIE1hdGgucG93KHZhbHVlcy5sZW5ndGgsIC0xIC8gMykpKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/threshold/freedmanDiaconis.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/threshold/scott.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-array/src/threshold/scott.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _deviation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../deviation */ \"./node_modules/d3-array/src/deviation.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values, min, max) {\n  return Math.ceil((max - min) / (3.5 * Object(_deviation__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values) * Math.pow(values.length, -1 / 3)));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9zY290dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGhyZXNob2xkL3Njb3R0LmpzPzYzYjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRldmlhdGlvbiBmcm9tIFwiLi4vZGV2aWF0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgbWluLCBtYXgpIHtcbiAgcmV0dXJuIE1hdGguY2VpbCgobWF4IC0gbWluKSAvICgzLjUgKiBkZXZpYXRpb24odmFsdWVzKSAqIE1hdGgucG93KHZhbHVlcy5sZW5ndGgsIC0xIC8gMykpKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/threshold/scott.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/threshold/sturges.js":
/*!********************************************************!*\
  !*** ./node_modules/d3-array/src/threshold/sturges.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\"] = (function(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9zdHVyZ2VzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc3R1cmdlcy5qcz8zNjVlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHZhbHVlcy5sZW5ndGgpIC8gTWF0aC5MTjIpICsgMTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/threshold/sturges.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/ticks.js":
/*!********************************************!*\
  !*** ./node_modules/d3-array/src/ticks.js ***!
  \********************************************/
/*! exports provided: default, tickIncrement, tickStep */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"tickIncrement\", function() { return tickIncrement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"tickStep\", function() { return tickStep; });\nvar e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n});\n\nfunction tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nfunction tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcz9lZWNiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wICYmIGNvdW50ID4gMCkgcmV0dXJuIFtzdGFydF07XG4gIGlmIChyZXZlcnNlID0gc3RvcCA8IHN0YXJ0KSBuID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IG47XG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgLyBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0ICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAqIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/ticks.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/transpose.js":
/*!************************************************!*\
  !*** ./node_modules/d3-array/src/transpose.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./min */ \"./node_modules/d3-array/src/min.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = Object(_min__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n});\n\nfunction length(d) {\n  return d.length;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RyYW5zcG9zZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdHJhbnNwb3NlLmpzPzczMjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1pbiBmcm9tIFwiLi9taW5cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0cml4KSB7XG4gIGlmICghKG4gPSBtYXRyaXgubGVuZ3RoKSkgcmV0dXJuIFtdO1xuICBmb3IgKHZhciBpID0gLTEsIG0gPSBtaW4obWF0cml4LCBsZW5ndGgpLCB0cmFuc3Bvc2UgPSBuZXcgQXJyYXkobSk7ICsraSA8IG07KSB7XG4gICAgZm9yICh2YXIgaiA9IC0xLCBuLCByb3cgPSB0cmFuc3Bvc2VbaV0gPSBuZXcgQXJyYXkobik7ICsraiA8IG47KSB7XG4gICAgICByb3dbal0gPSBtYXRyaXhbal1baV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFuc3Bvc2U7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aChkKSB7XG4gIHJldHVybiBkLmxlbmd0aDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/transpose.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/variance.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-array/src/variance.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ \"./node_modules/d3-array/src/number.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values, valueof) {\n  var n = values.length,\n      m = 0,\n      i = -1,\n      mean = 0,\n      value,\n      delta,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values[i]))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(valueof(values[i], i, values)))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  if (m > 1) return sum / (m - 1);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ZhcmlhbmNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcz9lZWM3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gMCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIG1lYW4gPSAwLFxuICAgICAgdmFsdWUsXG4gICAgICBkZWx0YSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlc1tpXSkpKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKyttO1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKyttO1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobSA+IDEpIHJldHVybiBzdW0gLyAobSAtIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/variance.js\n");

/***/ }),

/***/ "./node_modules/d3-array/src/zip.js":
/*!******************************************!*\
  !*** ./node_modules/d3-array/src/zip.js ***!
  \******************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _transpose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transpose */ \"./node_modules/d3-array/src/transpose.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  return Object(_transpose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arguments);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ppcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvemlwLmpzP2ZiMmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRyYW5zcG9zZSBmcm9tIFwiLi90cmFuc3Bvc2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0cmFuc3Bvc2UoYXJndW1lbnRzKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-array/src/zip.js\n");

/***/ }),

/***/ "./node_modules/d3-collection/src/entries.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-collection/src/entries.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\"] = (function(map) {\n  var entries = [];\n  for (var key in map) entries.push({key: key, value: map[key]});\n  return entries;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvZW50cmllcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9lbnRyaWVzLmpzPzg0YmIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWFwKSB7XG4gIHZhciBlbnRyaWVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBtYXApIGVudHJpZXMucHVzaCh7a2V5OiBrZXksIHZhbHVlOiBtYXBba2V5XX0pO1xuICByZXR1cm4gZW50cmllcztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-collection/src/entries.js\n");

/***/ }),

/***/ "./node_modules/d3-collection/src/index.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-collection/src/index.js ***!
  \*************************************************/
/*! exports provided: nest, set, map, keys, values, entries */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./nest */ \"./node_modules/d3-collection/src/nest.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"nest\", function() { return _nest__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./set */ \"./node_modules/d3-collection/src/set.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"set\", function() { return _set__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./map */ \"./node_modules/d3-collection/src/map.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"map\", function() { return _map__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./keys */ \"./node_modules/d3-collection/src/keys.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"keys\", function() { return _keys__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _values__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./values */ \"./node_modules/d3-collection/src/values.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"values\", function() { return _values__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _entries__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./entries */ \"./node_modules/d3-collection/src/entries.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"entries\", function() { return _entries__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvaW5kZXguanM/NmYwNCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgbmVzdH0gZnJvbSBcIi4vbmVzdFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNldH0gZnJvbSBcIi4vc2V0XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWFwfSBmcm9tIFwiLi9tYXBcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBrZXlzfSBmcm9tIFwiLi9rZXlzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmFsdWVzfSBmcm9tIFwiLi92YWx1ZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBlbnRyaWVzfSBmcm9tIFwiLi9lbnRyaWVzXCI7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-collection/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-collection/src/keys.js":
/*!************************************************!*\
  !*** ./node_modules/d3-collection/src/keys.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\"] = (function(map) {\n  var keys = [];\n  for (var key in map) keys.push(key);\n  return keys;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMva2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9rZXlzLmpzPzFhNTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWFwKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBtYXApIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-collection/src/keys.js\n");

/***/ }),

/***/ "./node_modules/d3-collection/src/map.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-collection/src/map.js ***!
  \***********************************************/
/*! exports provided: prefix, default */
/***/ (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; });\nvar prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n  constructor: Map,\n  has: function(key) {\n    return (prefix + key) in this;\n  },\n  get: function(key) {\n    return this[prefix + key];\n  },\n  set: function(key, value) {\n    this[prefix + key] = value;\n    return this;\n  },\n  remove: function(key) {\n    var property = prefix + key;\n    return property in this && delete this[property];\n  },\n  clear: function() {\n    for (var property in this) if (property[0] === prefix) delete this[property];\n  },\n  keys: function() {\n    var keys = [];\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n    return keys;\n  },\n  values: function() {\n    var values = [];\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\n    return values;\n  },\n  entries: function() {\n    var entries = [];\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n    return entries;\n  },\n  size: function() {\n    var size = 0;\n    for (var property in this) if (property[0] === prefix) ++size;\n    return size;\n  },\n  empty: function() {\n    for (var property in this) if (property[0] === prefix) return false;\n    return true;\n  },\n  each: function(f) {\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n  }\n};\n\nfunction map(object, f) {\n  var map = new Map;\n\n  // Copy constructor.\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n  // Index array by numeric index or specified key function.\n  else if (Array.isArray(object)) {\n    var i = -1,\n        n = object.length,\n        o;\n\n    if (f == null) while (++i < n) map.set(i, object[i]);\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\n  }\n\n  // Convert object to map.\n  else if (object) for (var key in object) map.set(key, object[key]);\n\n  return map;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (map);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbWFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL21hcC5qcz9mOTE5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgcHJlZml4ID0gXCIkXCI7XG5cbmZ1bmN0aW9uIE1hcCgpIHt9XG5cbk1hcC5wcm90b3R5cGUgPSBtYXAucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTWFwLFxuICBoYXM6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiAocHJlZml4ICsga2V5KSBpbiB0aGlzO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiB0aGlzW3ByZWZpeCArIGtleV07XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIHRoaXNbcHJlZml4ICsga2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBwcm9wZXJ0eSA9IHByZWZpeCArIGtleTtcbiAgICByZXR1cm4gcHJvcGVydHkgaW4gdGhpcyAmJiBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGNsZWFyOiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZGVsZXRlIHRoaXNbcHJvcGVydHldO1xuICB9LFxuICBrZXlzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBrZXlzLnB1c2gocHJvcGVydHkuc2xpY2UoMSkpO1xuICAgIHJldHVybiBrZXlzO1xuICB9LFxuICB2YWx1ZXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgdmFsdWVzLnB1c2godGhpc1twcm9wZXJ0eV0pO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0sXG4gIGVudHJpZXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGVudHJpZXMucHVzaCh7a2V5OiBwcm9wZXJ0eS5zbGljZSgxKSwgdmFsdWU6IHRoaXNbcHJvcGVydHldfSk7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH0sXG4gIHNpemU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzaXplID0gMDtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgKytzaXplO1xuICAgIHJldHVybiBzaXplO1xuICB9LFxuICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZWFjaDogZnVuY3Rpb24oZikge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBmKHRoaXNbcHJvcGVydHldLCBwcm9wZXJ0eS5zbGljZSgxKSwgdGhpcyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG1hcChvYmplY3QsIGYpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXA7XG5cbiAgLy8gQ29weSBjb25zdHJ1Y3Rvci5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE1hcCkgb2JqZWN0LmVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkgeyBtYXAuc2V0KGtleSwgdmFsdWUpOyB9KTtcblxuICAvLyBJbmRleCBhcnJheSBieSBudW1lcmljIGluZGV4IG9yIHNwZWNpZmllZCBrZXkgZnVuY3Rpb24uXG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIHZhciBpID0gLTEsXG4gICAgICAgIG4gPSBvYmplY3QubGVuZ3RoLFxuICAgICAgICBvO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoaSwgb2JqZWN0W2ldKTtcbiAgICBlbHNlIHdoaWxlICgrK2kgPCBuKSBtYXAuc2V0KGYobyA9IG9iamVjdFtpXSwgaSwgb2JqZWN0KSwgbyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IG9iamVjdCB0byBtYXAuXG4gIGVsc2UgaWYgKG9iamVjdCkgZm9yICh2YXIga2V5IGluIG9iamVjdCkgbWFwLnNldChrZXksIG9iamVjdFtrZXldKTtcblxuICByZXR1cm4gbWFwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXA7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-collection/src/map.js\n");

/***/ }),

/***/ "./node_modules/d3-collection/src/nest.js":
/*!************************************************!*\
  !*** ./node_modules/d3-collection/src/nest.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ \"./node_modules/d3-collection/src/map.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  var keys = [],\n      sortKeys = [],\n      sortValues,\n      rollup,\n      nest;\n\n  function apply(array, depth, createResult, setResult) {\n    if (depth >= keys.length) {\n      if (sortValues != null) array.sort(sortValues);\n      return rollup != null ? rollup(array) : array;\n    }\n\n    var i = -1,\n        n = array.length,\n        key = keys[depth++],\n        keyValue,\n        value,\n        valuesByKey = Object(_map__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(),\n        values,\n        result = createResult();\n\n    while (++i < n) {\n      if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n        values.push(value);\n      } else {\n        valuesByKey.set(keyValue, [value]);\n      }\n    }\n\n    valuesByKey.each(function(values, key) {\n      setResult(result, key, apply(values, depth, createResult, setResult));\n    });\n\n    return result;\n  }\n\n  function entries(map, depth) {\n    if (++depth > keys.length) return map;\n    var array, sortKey = sortKeys[depth - 1];\n    if (rollup != null && depth >= keys.length) array = map.entries();\n    else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n    return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n  }\n\n  return nest = {\n    object: function(array) { return apply(array, 0, createObject, setObject); },\n    map: function(array) { return apply(array, 0, createMap, setMap); },\n    entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n    key: function(d) { keys.push(d); return nest; },\n    sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n    sortValues: function(order) { sortValues = order; return nest; },\n    rollup: function(f) { rollup = f; return nest; }\n  };\n});\n\nfunction createObject() {\n  return {};\n}\n\nfunction setObject(object, key, value) {\n  object[key] = value;\n}\n\nfunction createMap() {\n  return Object(_map__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n}\n\nfunction setMap(map, key, value) {\n  map.set(key, value);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbmVzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9uZXN0LmpzPzk5OTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1hcCBmcm9tIFwiLi9tYXBcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBrZXlzID0gW10sXG4gICAgICBzb3J0S2V5cyA9IFtdLFxuICAgICAgc29ydFZhbHVlcyxcbiAgICAgIHJvbGx1cCxcbiAgICAgIG5lc3Q7XG5cbiAgZnVuY3Rpb24gYXBwbHkoYXJyYXksIGRlcHRoLCBjcmVhdGVSZXN1bHQsIHNldFJlc3VsdCkge1xuICAgIGlmIChkZXB0aCA+PSBrZXlzLmxlbmd0aCkge1xuICAgICAgaWYgKHNvcnRWYWx1ZXMgIT0gbnVsbCkgYXJyYXkuc29ydChzb3J0VmFsdWVzKTtcbiAgICAgIHJldHVybiByb2xsdXAgIT0gbnVsbCA/IHJvbGx1cChhcnJheSkgOiBhcnJheTtcbiAgICB9XG5cbiAgICB2YXIgaSA9IC0xLFxuICAgICAgICBuID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBrZXkgPSBrZXlzW2RlcHRoKytdLFxuICAgICAgICBrZXlWYWx1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlc0J5S2V5ID0gbWFwKCksXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlUmVzdWx0KCk7XG5cbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHZhbHVlcyA9IHZhbHVlc0J5S2V5LmdldChrZXlWYWx1ZSA9IGtleSh2YWx1ZSA9IGFycmF5W2ldKSArIFwiXCIpKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlc0J5S2V5LnNldChrZXlWYWx1ZSwgW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWVzQnlLZXkuZWFjaChmdW5jdGlvbih2YWx1ZXMsIGtleSkge1xuICAgICAgc2V0UmVzdWx0KHJlc3VsdCwga2V5LCBhcHBseSh2YWx1ZXMsIGRlcHRoLCBjcmVhdGVSZXN1bHQsIHNldFJlc3VsdCkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVudHJpZXMobWFwLCBkZXB0aCkge1xuICAgIGlmICgrK2RlcHRoID4ga2V5cy5sZW5ndGgpIHJldHVybiBtYXA7XG4gICAgdmFyIGFycmF5LCBzb3J0S2V5ID0gc29ydEtleXNbZGVwdGggLSAxXTtcbiAgICBpZiAocm9sbHVwICE9IG51bGwgJiYgZGVwdGggPj0ga2V5cy5sZW5ndGgpIGFycmF5ID0gbWFwLmVudHJpZXMoKTtcbiAgICBlbHNlIGFycmF5ID0gW10sIG1hcC5lYWNoKGZ1bmN0aW9uKHYsIGspIHsgYXJyYXkucHVzaCh7a2V5OiBrLCB2YWx1ZXM6IGVudHJpZXModiwgZGVwdGgpfSk7IH0pO1xuICAgIHJldHVybiBzb3J0S2V5ICE9IG51bGwgPyBhcnJheS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIHNvcnRLZXkoYS5rZXksIGIua2V5KTsgfSkgOiBhcnJheTtcbiAgfVxuXG4gIHJldHVybiBuZXN0ID0ge1xuICAgIG9iamVjdDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVPYmplY3QsIHNldE9iamVjdCk7IH0sXG4gICAgbWFwOiBmdW5jdGlvbihhcnJheSkgeyByZXR1cm4gYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKTsgfSxcbiAgICBlbnRyaWVzOiBmdW5jdGlvbihhcnJheSkgeyByZXR1cm4gZW50cmllcyhhcHBseShhcnJheSwgMCwgY3JlYXRlTWFwLCBzZXRNYXApLCAwKTsgfSxcbiAgICBrZXk6IGZ1bmN0aW9uKGQpIHsga2V5cy5wdXNoKGQpOyByZXR1cm4gbmVzdDsgfSxcbiAgICBzb3J0S2V5czogZnVuY3Rpb24ob3JkZXIpIHsgc29ydEtleXNba2V5cy5sZW5ndGggLSAxXSA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICBzb3J0VmFsdWVzOiBmdW5jdGlvbihvcmRlcikgeyBzb3J0VmFsdWVzID0gb3JkZXI7IHJldHVybiBuZXN0OyB9LFxuICAgIHJvbGx1cDogZnVuY3Rpb24oZikgeyByb2xsdXAgPSBmOyByZXR1cm4gbmVzdDsgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3QoKSB7XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gc2V0T2JqZWN0KG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNYXAoKSB7XG4gIHJldHVybiBtYXAoKTtcbn1cblxuZnVuY3Rpb24gc2V0TWFwKG1hcCwga2V5LCB2YWx1ZSkge1xuICBtYXAuc2V0KGtleSwgdmFsdWUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-collection/src/nest.js\n");

/***/ }),

/***/ "./node_modules/d3-collection/src/set.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-collection/src/set.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ \"./node_modules/d3-collection/src/map.js\");\n\n\nfunction Set() {}\n\nvar proto = _map__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype;\n\nSet.prototype = set.prototype = {\n  constructor: Set,\n  has: proto.has,\n  add: function(value) {\n    value += \"\";\n    this[_map__WEBPACK_IMPORTED_MODULE_0__[\"prefix\"] + value] = value;\n    return this;\n  },\n  remove: proto.remove,\n  clear: proto.clear,\n  values: proto.keys,\n  size: proto.size,\n  empty: proto.empty,\n  each: proto.each\n};\n\nfunction set(object, f) {\n  var set = new Set;\n\n  // Copy constructor.\n  if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n  // Otherwise, assume it’s an array.\n  else if (object) {\n    var i = -1, n = object.length;\n    if (f == null) while (++i < n) set.add(object[i]);\n    else while (++i < n) set.add(f(object[i], i, object));\n  }\n\n  return set;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (set);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvc2V0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL3NldC5qcz81ZjVmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVmYXVsdCBhcyBtYXAsIHByZWZpeH0gZnJvbSBcIi4vbWFwXCI7XG5cbmZ1bmN0aW9uIFNldCgpIHt9XG5cbnZhciBwcm90byA9IG1hcC5wcm90b3R5cGU7XG5cblNldC5wcm90b3R5cGUgPSBzZXQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2V0LFxuICBoYXM6IHByb3RvLmhhcyxcbiAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhbHVlICs9IFwiXCI7XG4gICAgdGhpc1twcmVmaXggKyB2YWx1ZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBwcm90by5yZW1vdmUsXG4gIGNsZWFyOiBwcm90by5jbGVhcixcbiAgdmFsdWVzOiBwcm90by5rZXlzLFxuICBzaXplOiBwcm90by5zaXplLFxuICBlbXB0eTogcHJvdG8uZW1wdHksXG4gIGVhY2g6IHByb3RvLmVhY2hcbn07XG5cbmZ1bmN0aW9uIHNldChvYmplY3QsIGYpIHtcbiAgdmFyIHNldCA9IG5ldyBTZXQ7XG5cbiAgLy8gQ29weSBjb25zdHJ1Y3Rvci5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNldCkgb2JqZWN0LmVhY2goZnVuY3Rpb24odmFsdWUpIHsgc2V0LmFkZCh2YWx1ZSk7IH0pO1xuXG4gIC8vIE90aGVyd2lzZSwgYXNzdW1lIGl04oCZcyBhbiBhcnJheS5cbiAgZWxzZSBpZiAob2JqZWN0KSB7XG4gICAgdmFyIGkgPSAtMSwgbiA9IG9iamVjdC5sZW5ndGg7XG4gICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIHNldC5hZGQob2JqZWN0W2ldKTtcbiAgICBlbHNlIHdoaWxlICgrK2kgPCBuKSBzZXQuYWRkKGYob2JqZWN0W2ldLCBpLCBvYmplY3QpKTtcbiAgfVxuXG4gIHJldHVybiBzZXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-collection/src/set.js\n");

/***/ }),

/***/ "./node_modules/d3-collection/src/values.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-collection/src/values.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\"] = (function(map) {\n  var values = [];\n  for (var key in map) values.push(map[key]);\n  return values;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvdmFsdWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL3ZhbHVlcy5qcz8wODhjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICB2YXIgdmFsdWVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBtYXApIHZhbHVlcy5wdXNoKG1hcFtrZXldKTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-collection/src/values.js\n");

/***/ }),

/***/ "./node_modules/d3-color/src/color.js":
/*!********************************************!*\
  !*** ./node_modules/d3-color/src/color.js ***!
  \********************************************/
/*! exports provided: Color, darker, brighter, default, rgbConvert, rgb, Rgb, hslConvert, hsl */
/***/ (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__, \"darker\", function() { return darker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"brighter\", function() { return brighter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return color; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rgbConvert\", function() { return rgbConvert; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rgb\", function() { return rgb; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Rgb\", function() { return Rgb; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hslConvert\", function() { return hslConvert; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hsl\", function() { return hsl; });\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define.js */ \"./node_modules/d3-color/src/define.js\");\n\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\nObject(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\nObject(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Rgb, rgb, Object(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"extend\"])(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nObject(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Hsl, hsl, Object(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"extend\"])(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2NvbG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcz8xNjZhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcbiAgICByZVAgPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICByZUhleCA9IC9eIyhbMC05YS1mXXszLDh9KSQvLFxuICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZUksIHJlSSwgcmVJXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlSSwgcmVJLCByZUksIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xcXFxcKFwiICsgW3JlTiwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsYVxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpO1xuXG52YXIgbmFtZWQgPSB7XG4gIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXG4gIGFxdWE6IDB4MDBmZmZmLFxuICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgYXp1cmU6IDB4ZjBmZmZmLFxuICBiZWlnZTogMHhmNWY1ZGMsXG4gIGJpc3F1ZTogMHhmZmU0YzQsXG4gIGJsYWNrOiAweDAwMDAwMCxcbiAgYmxhbmNoZWRhbG1vbmQ6IDB4ZmZlYmNkLFxuICBibHVlOiAweDAwMDBmZixcbiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXG4gIGJyb3duOiAweGE1MmEyYSxcbiAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgY2FkZXRibHVlOiAweDVmOWVhMCxcbiAgY2hhcnRyZXVzZTogMHg3ZmZmMDAsXG4gIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gIGNvcmFsOiAweGZmN2Y1MCxcbiAgY29ybmZsb3dlcmJsdWU6IDB4NjQ5NWVkLFxuICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gIGNyaW1zb246IDB4ZGMxNDNjLFxuICBjeWFuOiAweDAwZmZmZixcbiAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICBkYXJrY3lhbjogMHgwMDhiOGIsXG4gIGRhcmtnb2xkZW5yb2Q6IDB4Yjg4NjBiLFxuICBkYXJrZ3JheTogMHhhOWE5YTksXG4gIGRhcmtncmVlbjogMHgwMDY0MDAsXG4gIGRhcmtncmV5OiAweGE5YTlhOSxcbiAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxuICBkYXJrb2xpdmVncmVlbjogMHg1NTZiMmYsXG4gIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcbiAgZGFya3JlZDogMHg4YjAwMDAsXG4gIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxuICBkYXJrc2xhdGVibHVlOiAweDQ4M2Q4YixcbiAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxuICBkYXJrdHVycXVvaXNlOiAweDAwY2VkMSxcbiAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gIGRlZXBwaW5rOiAweGZmMTQ5MyxcbiAgZGVlcHNreWJsdWU6IDB4MDBiZmZmLFxuICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgZGltZ3JleTogMHg2OTY5NjksXG4gIGRvZGdlcmJsdWU6IDB4MWU5MGZmLFxuICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXG4gIGZvcmVzdGdyZWVuOiAweDIyOGIyMixcbiAgZnVjaHNpYTogMHhmZjAwZmYsXG4gIGdhaW5zYm9ybzogMHhkY2RjZGMsXG4gIGdob3N0d2hpdGU6IDB4ZjhmOGZmLFxuICBnb2xkOiAweGZmZDcwMCxcbiAgZ29sZGVucm9kOiAweGRhYTUyMCxcbiAgZ3JheTogMHg4MDgwODAsXG4gIGdyZWVuOiAweDAwODAwMCxcbiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxuICBncmV5OiAweDgwODA4MCxcbiAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICBob3RwaW5rOiAweGZmNjliNCxcbiAgaW5kaWFucmVkOiAweGNkNWM1YyxcbiAgaW5kaWdvOiAweDRiMDA4MixcbiAgaXZvcnk6IDB4ZmZmZmYwLFxuICBraGFraTogMHhmMGU2OGMsXG4gIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXG4gIGxhd25ncmVlbjogMHg3Y2ZjMDAsXG4gIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXG4gIGxpZ2h0Y29yYWw6IDB4ZjA4MDgwLFxuICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXG4gIGxpZ2h0Z3JheTogMHhkM2QzZDMsXG4gIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxuICBsaWdodHBpbms6IDB4ZmZiNmMxLFxuICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxuICBsaWdodHNreWJsdWU6IDB4ODdjZWZhLFxuICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcbiAgbGlnaHRzdGVlbGJsdWU6IDB4YjBjNGRlLFxuICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gIGxpbWU6IDB4MDBmZjAwLFxuICBsaW1lZ3JlZW46IDB4MzJjZDMyLFxuICBsaW5lbjogMHhmYWYwZTYsXG4gIG1hZ2VudGE6IDB4ZmYwMGZmLFxuICBtYXJvb246IDB4ODAwMDAwLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXG4gIG1lZGl1bW9yY2hpZDogMHhiYTU1ZDMsXG4gIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcbiAgbWVkaXVtc2xhdGVibHVlOiAweDdiNjhlZSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxuICBtZWRpdW12aW9sZXRyZWQ6IDB4YzcxNTg1LFxuICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxuICBtaXN0eXJvc2U6IDB4ZmZlNGUxLFxuICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcbiAgbmF2eTogMHgwMDAwODAsXG4gIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICBvbGl2ZTogMHg4MDgwMDAsXG4gIG9saXZlZHJhYjogMHg2YjhlMjMsXG4gIG9yYW5nZTogMHhmZmE1MDAsXG4gIG9yYW5nZXJlZDogMHhmZjQ1MDAsXG4gIG9yY2hpZDogMHhkYTcwZDYsXG4gIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICBwYWxlZ3JlZW46IDB4OThmYjk4LFxuICBwYWxldHVycXVvaXNlOiAweGFmZWVlZSxcbiAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxuICBwZWFjaHB1ZmY6IDB4ZmZkYWI5LFxuICBwZXJ1OiAweGNkODUzZixcbiAgcGluazogMHhmZmMwY2IsXG4gIHBsdW06IDB4ZGRhMGRkLFxuICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgcHVycGxlOiAweDgwMDA4MCxcbiAgcmViZWNjYXB1cnBsZTogMHg2NjMzOTksXG4gIHJlZDogMHhmZjAwMDAsXG4gIHJvc3licm93bjogMHhiYzhmOGYsXG4gIHJveWFsYmx1ZTogMHg0MTY5ZTEsXG4gIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgc2FsbW9uOiAweGZhODA3MixcbiAgc2FuZHlicm93bjogMHhmNGE0NjAsXG4gIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxuICBzaWVubmE6IDB4YTA1MjJkLFxuICBzaWx2ZXI6IDB4YzBjMGMwLFxuICBza3libHVlOiAweDg3Y2VlYixcbiAgc2xhdGVibHVlOiAweDZhNWFjZCxcbiAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgc2xhdGVncmV5OiAweDcwODA5MCxcbiAgc25vdzogMHhmZmZhZmEsXG4gIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgc3RlZWxibHVlOiAweDQ2ODJiNCxcbiAgdGFuOiAweGQyYjQ4YyxcbiAgdGVhbDogMHgwMDgwODAsXG4gIHRoaXN0bGU6IDB4ZDhiZmQ4LFxuICB0b21hdG86IDB4ZmY2MzQ3LFxuICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICB2aW9sZXQ6IDB4ZWU4MmVlLFxuICB3aGVhdDogMHhmNWRlYjMsXG4gIHdoaXRlOiAweGZmZmZmZixcbiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXG4gIHllbGxvdzogMHhmZmZmMDAsXG4gIHllbGxvd2dyZWVuOiAweDlhY2QzMlxufTtcblxuZGVmaW5lKENvbG9yLCBjb2xvciwge1xuICBjb3B5OiBmdW5jdGlvbihjaGFubmVscykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICB2YXIgbSwgbDtcbiAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgOiBsID09PSAzID8gbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSAvLyAjZjAwXG4gICAgICA6IGwgPT09IDggPyBuZXcgUmdiKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxuICAgICAgOiBsID09PSA0ID8gbmV3IFJnYigobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICA6IG51bGwpIC8vIGludmFsaWQgaGV4XG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiByZ2JfZm9ybWF0UmdiXG59KSk7XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuZykgfHwgMCkpICsgXCIsIFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbn1cblxuZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gIHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG4gIHJldHVybiAodmFsdWUgPCAxNiA/IFwiMFwiIDogXCJcIikgKyB2YWx1ZS50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XG4gIGVsc2UgaWYgKGwgPD0gMCB8fCBsID49IDEpIGggPSBzID0gTmFOO1xuICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IHRoaXMuaCAlIDM2MCArICh0aGlzLmggPCAwKSAqIDM2MCxcbiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxuICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICBtMiA9IGwgKyAobCA8IDAuNSA/IGwgOiAxIC0gbCkgKiBzLFxuICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBoc2wycmdiKGggPj0gMjQwID8gaCAtIDI0MCA6IGggKyAxMjAsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGgsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXG4gICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgZm9ybWF0SHNsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIilcbiAgICAgICAgKyAodGhpcy5oIHx8IDApICsgXCIsIFwiXG4gICAgICAgICsgKHRoaXMucyB8fCAwKSAqIDEwMCArIFwiJSwgXCJcbiAgICAgICAgKyAodGhpcy5sIHx8IDApICogMTAwICsgXCIlXCJcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG4vKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG5mdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xuICByZXR1cm4gKGggPCA2MCA/IG0xICsgKG0yIC0gbTEpICogaCAvIDYwXG4gICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxuICAgICAgOiBtMSkgKiAyNTU7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-color/src/color.js\n");

/***/ }),

/***/ "./node_modules/d3-color/src/cubehelix.js":
/*!************************************************!*\
  !*** ./node_modules/d3-color/src/cubehelix.js ***!
  \************************************************/
/*! exports provided: default, Cubehelix */
/***/ (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 cubehelix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Cubehelix\", function() { return Cubehelix; });\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define.js */ \"./node_modules/d3-color/src/define.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-color/src/color.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ \"./node_modules/d3-color/src/math.js\");\n\n\n\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof _color_js__WEBPACK_IMPORTED_MODULE_1__[\"Rgb\"])) o = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"rgbConvert\"])(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * _math_js__WEBPACK_IMPORTED_MODULE_2__[\"rad2deg\"] - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nObject(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Cubehelix, cubehelix, Object(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"extend\"])(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"Color\"], {\n  brighter: function(k) {\n    k = k == null ? _color_js__WEBPACK_IMPORTED_MODULE_1__[\"brighter\"] : Math.pow(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"brighter\"], k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? _color_js__WEBPACK_IMPORTED_MODULE_1__[\"darker\"] : Math.pow(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"darker\"], k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * _math_js__WEBPACK_IMPORTED_MODULE_2__[\"deg2rad\"],\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new _color_js__WEBPACK_IMPORTED_MODULE_1__[\"Rgb\"](\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2N1YmVoZWxpeC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzPzE1YTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2IsIGRhcmtlciwgYnJpZ2h0ZXJ9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGguanNcIjtcblxudmFyIEEgPSAtMC4xNDg2MSxcbiAgICBCID0gKzEuNzgyNzcsXG4gICAgQyA9IC0wLjI5MjI3LFxuICAgIEQgPSAtMC45MDY0OSxcbiAgICBFID0gKzEuOTcyOTQsXG4gICAgRUQgPSBFICogRCxcbiAgICBFQiA9IEUgKiBCLFxuICAgIEJDX0RBID0gQiAqIEMgLSBEICogQTtcblxuZnVuY3Rpb24gY3ViZWhlbGl4Q29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgQ3ViZWhlbGl4KSByZXR1cm4gbmV3IEN1YmVoZWxpeChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBsID0gKEJDX0RBICogYiArIEVEICogciAtIEVCICogZykgLyAoQkNfREEgKyBFRCAtIEVCKSxcbiAgICAgIGJsID0gYiAtIGwsXG4gICAgICBrID0gKEUgKiAoZyAtIGwpIC0gQyAqIGJsKSAvIEQsXG4gICAgICBzID0gTWF0aC5zcXJ0KGsgKiBrICsgYmwgKiBibCkgLyAoRSAqIGwgKiAoMSAtIGwpKSwgLy8gTmFOIGlmIGw9MCBvciBsPTFcbiAgICAgIGggPSBzID8gTWF0aC5hdGFuMihrLCBibCkgKiByYWQyZGVnIC0gMTIwIDogTmFOO1xuICByZXR1cm4gbmV3IEN1YmVoZWxpeChoIDwgMCA/IGggKyAzNjAgOiBoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGN1YmVoZWxpeENvbnZlcnQoaCkgOiBuZXcgQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoQ3ViZWhlbGl4LCBjdWJlaGVsaXgsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSBpc05hTih0aGlzLmgpID8gMCA6ICh0aGlzLmggKyAxMjApICogZGVnMnJhZCxcbiAgICAgICAgbCA9ICt0aGlzLmwsXG4gICAgICAgIGEgPSBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyAqIGwgKiAoMSAtIGwpLFxuICAgICAgICBjb3NoID0gTWF0aC5jb3MoaCksXG4gICAgICAgIHNpbmggPSBNYXRoLnNpbihoKTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIDI1NSAqIChsICsgYSAqIChBICogY29zaCArIEIgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoQyAqIGNvc2ggKyBEICogc2luaCkpLFxuICAgICAgMjU1ICogKGwgKyBhICogKEUgKiBjb3NoKSksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-color/src/cubehelix.js\n");

/***/ }),

/***/ "./node_modules/d3-color/src/define.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-color/src/define.js ***!
  \*********************************************/
/*! exports provided: default, extend */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"extend\", function() { return extend; });\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n});\n\nfunction extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvZGVmaW5lLmpzPzYzYWQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29uc3RydWN0b3IsIGZhY3RvcnksIHByb3RvdHlwZSkge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBmYWN0b3J5LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgcHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQocGFyZW50LCBkZWZpbml0aW9uKSB7XG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHBhcmVudC5wcm90b3R5cGUpO1xuICBmb3IgKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgcHJvdG90eXBlW2tleV0gPSBkZWZpbml0aW9uW2tleV07XG4gIHJldHVybiBwcm90b3R5cGU7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-color/src/define.js\n");

/***/ }),

/***/ "./node_modules/d3-color/src/index.js":
/*!********************************************!*\
  !*** ./node_modules/d3-color/src/index.js ***!
  \********************************************/
/*! exports provided: color, rgb, hsl, lab, hcl, lch, gray, cubehelix */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-color/src/color.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"color\", function() { return _color_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"rgb\", function() { return _color_js__WEBPACK_IMPORTED_MODULE_0__[\"rgb\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"hsl\", function() { return _color_js__WEBPACK_IMPORTED_MODULE_0__[\"hsl\"]; });\n\n/* harmony import */ var _lab_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lab.js */ \"./node_modules/d3-color/src/lab.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"lab\", function() { return _lab_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"hcl\", function() { return _lab_js__WEBPACK_IMPORTED_MODULE_1__[\"hcl\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"lch\", function() { return _lab_js__WEBPACK_IMPORTED_MODULE_1__[\"lch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gray\", function() { return _lab_js__WEBPACK_IMPORTED_MODULE_1__[\"gray\"]; });\n\n/* harmony import */ var _cubehelix_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubehelix.js */ \"./node_modules/d3-color/src/cubehelix.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"cubehelix\", function() { return _cubehelix_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcz80ODJmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBjb2xvciwgcmdiLCBoc2x9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbGFiLCBoY2wsIGxjaCwgZ3JheX0gZnJvbSBcIi4vbGFiLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3ViZWhlbGl4fSBmcm9tIFwiLi9jdWJlaGVsaXguanNcIjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-color/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-color/src/lab.js":
/*!******************************************!*\
  !*** ./node_modules/d3-color/src/lab.js ***!
  \******************************************/
/*! exports provided: gray, default, Lab, lch, hcl, Hcl */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gray\", function() { return gray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return lab; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Lab\", function() { return Lab; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lch\", function() { return lch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hcl\", function() { return hcl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Hcl\", function() { return Hcl; });\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define.js */ \"./node_modules/d3-color/src/define.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-color/src/color.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ \"./node_modules/d3-color/src/math.js\");\n\n\n\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof _color_js__WEBPACK_IMPORTED_MODULE_1__[\"Rgb\"])) o = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"rgbConvert\"])(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nfunction lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\nObject(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Lab, lab, Object(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"extend\"])(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"Color\"], {\n  brighter: function(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker: function(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb: function() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new _color_js__WEBPACK_IMPORTED_MODULE_1__[\"Rgb\"](\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * _math_js__WEBPACK_IMPORTED_MODULE_2__[\"rad2deg\"];\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * _math_js__WEBPACK_IMPORTED_MODULE_2__[\"deg2rad\"];\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\nObject(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Hcl, hcl, Object(_define_js__WEBPACK_IMPORTED_MODULE_0__[\"extend\"])(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"Color\"], {\n  brighter: function(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker: function(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb: function() {\n    return hcl2lab(this).rgb();\n  }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbGFiLmpzPzYyZjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxudmFyIEsgPSAxOCxcbiAgICBYbiA9IDAuOTY0MjIsXG4gICAgWW4gPSAxLFxuICAgIFpuID0gMC44MjUyMSxcbiAgICB0MCA9IDQgLyAyOSxcbiAgICB0MSA9IDYgLyAyOSxcbiAgICB0MiA9IDMgKiB0MSAqIHQxLFxuICAgIHQzID0gdDEgKiB0MSAqIHQxO1xuXG5mdW5jdGlvbiBsYWJDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBMYWIpIHJldHVybiBuZXcgTGFiKG8ubCwgby5hLCBvLmIsIG8ub3BhY2l0eSk7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gaGNsMmxhYihvKTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICB2YXIgciA9IHJnYjJscmdiKG8uciksXG4gICAgICBnID0gcmdiMmxyZ2Ioby5nKSxcbiAgICAgIGIgPSByZ2IybHJnYihvLmIpLFxuICAgICAgeSA9IHh5ejJsYWIoKDAuMjIyNTA0NSAqIHIgKyAwLjcxNjg3ODYgKiBnICsgMC4wNjA2MTY5ICogYikgLyBZbiksIHgsIHo7XG4gIGlmIChyID09PSBnICYmIGcgPT09IGIpIHggPSB6ID0geTsgZWxzZSB7XG4gICAgeCA9IHh5ejJsYWIoKDAuNDM2MDc0NyAqIHIgKyAwLjM4NTA2NDkgKiBnICsgMC4xNDMwODA0ICogYikgLyBYbik7XG4gICAgeiA9IHh5ejJsYWIoKDAuMDEzOTMyMiAqIHIgKyAwLjA5NzEwNDUgKiBnICsgMC43MTQxNzMzICogYikgLyBabik7XG4gIH1cbiAgcmV0dXJuIG5ldyBMYWIoMTE2ICogeSAtIDE2LCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JheShsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBuZXcgTGFiKGwsIDAsIDAsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBsYWJDb252ZXJ0KGwpIDogbmV3IExhYihsLCBhLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeSA9ICh0aGlzLmwgKyAxNikgLyAxMTYsXG4gICAgICAgIHggPSBpc05hTih0aGlzLmEpID8geSA6IHkgKyB0aGlzLmEgLyA1MDAsXG4gICAgICAgIHogPSBpc05hTih0aGlzLmIpID8geSA6IHkgLSB0aGlzLmIgLyAyMDA7XG4gICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHogPSBabiAqIGxhYjJ4eXooeik7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBscmdiMnJnYiggMy4xMzM4NTYxICogeCAtIDEuNjE2ODY2NyAqIHkgLSAwLjQ5MDYxNDYgKiB6KSxcbiAgICAgIGxyZ2IycmdiKC0wLjk3ODc2ODQgKiB4ICsgMS45MTYxNDE1ICogeSArIDAuMDMzNDU0MCAqIHopLFxuICAgICAgbHJnYjJyZ2IoIDAuMDcxOTQ1MyAqIHggLSAwLjIyODk5MTQgKiB5ICsgMS40MDUyNDI3ICogeiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIHh5ejJsYWIodCkge1xuICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoodCkge1xuICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTtcbn1cblxuZnVuY3Rpb24gbHJnYjJyZ2IoeCkge1xuICByZXR1cm4gMjU1ICogKHggPD0gMC4wMDMxMzA4ID8gMTIuOTIgKiB4IDogMS4wNTUgKiBNYXRoLnBvdyh4LCAxIC8gMi40KSAtIDAuMDU1KTtcbn1cblxuZnVuY3Rpb24gcmdiMmxyZ2IoeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIGlmIChvLmEgPT09IDAgJiYgby5iID09PSAwKSByZXR1cm4gbmV3IEhjbChOYU4sIDAgPCBvLmwgJiYgby5sIDwgMTAwID8gMCA6IE5hTiwgby5sLCBvLm9wYWNpdHkpO1xuICB2YXIgaCA9IE1hdGguYXRhbjIoby5iLCBvLmEpICogcmFkMmRlZztcbiAgcmV0dXJuIG5ldyBIY2woaCA8IDAgPyBoICsgMzYwIDogaCwgTWF0aC5zcXJ0KG8uYSAqIG8uYSArIG8uYiAqIG8uYiksIG8ubCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxjaChsLCBjLCBoLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaGNsQ29udmVydChsKSA6IG5ldyBIY2woaCwgYywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGgpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5jID0gK2M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZnVuY3Rpb24gaGNsMmxhYihvKSB7XG4gIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gby5oICogZGVnMnJhZDtcbiAgcmV0dXJuIG5ldyBMYWIoby5sLCBNYXRoLmNvcyhoKSAqIG8uYywgTWF0aC5zaW4oaCkgKiBvLmMsIG8ub3BhY2l0eSk7XG59XG5cbmRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCArIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhjbDJsYWIodGhpcykucmdiKCk7XG4gIH1cbn0pKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-color/src/lab.js\n");

/***/ }),

/***/ "./node_modules/d3-color/src/math.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-color/src/math.js ***!
  \*******************************************/
/*! exports provided: deg2rad, rad2deg */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"deg2rad\", function() { return deg2rad; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rad2deg\", function() { return rad2deg; });\nvar deg2rad = Math.PI / 180;\nvar rad2deg = 180 / Math.PI;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanM/NTMwYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwO1xuZXhwb3J0IHZhciByYWQyZGVnID0gMTgwIC8gTWF0aC5QSTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-color/src/math.js\n");

/***/ }),

/***/ "./node_modules/d3-dispatch/src/dispatch.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-dispatch/src/dispatch.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar noop = {value: function() {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (dispatch);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcz9jNjhmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBub29wID0ge3ZhbHVlOiBmdW5jdGlvbigpIHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-dispatch/src/dispatch.js\n");

/***/ }),

/***/ "./node_modules/d3-dispatch/src/index.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-dispatch/src/index.js ***!
  \***********************************************/
/*! exports provided: dispatch */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dispatch_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dispatch.js */ \"./node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dispatch\", function() { return _dispatch_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9pbmRleC5qcz9kZjQ1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBkaXNwYXRjaH0gZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-dispatch/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/defaultLocale.js":
/*!*****************************************************!*\
  !*** ./node_modules/d3-format/src/defaultLocale.js ***!
  \*****************************************************/
/*! exports provided: format, formatPrefix, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"format\", function() { return format; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatPrefix\", function() { return formatPrefix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return defaultLocale; });\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale.js */ \"./node_modules/d3-format/src/locale.js\");\n\n\nvar locale;\nvar format;\nvar formatPrefix;\n\ndefaultLocale({\n  decimal: \".\",\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"],\n  minus: \"-\"\n});\n\nfunction defaultLocale(definition) {\n  locale = Object(_locale_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcz8xMjMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIGZvcm1hdDtcbmV4cG9ydCB2YXIgZm9ybWF0UHJlZml4O1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGVjaW1hbDogXCIuXCIsXG4gIHRob3VzYW5kczogXCIsXCIsXG4gIGdyb3VwaW5nOiBbM10sXG4gIGN1cnJlbmN5OiBbXCIkXCIsIFwiXCJdLFxuICBtaW51czogXCItXCJcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICBmb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xuICByZXR1cm4gbG9jYWxlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/defaultLocale.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/exponent.js":
/*!************************************************!*\
  !*** ./node_modules/d3-format/src/exponent.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ \"./node_modules/d3-format/src/formatDecimal.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(x) {\n  return x = Object(_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Math.abs(x)), x ? x[1] : NaN;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9leHBvbmVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzP2E3ZmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4ID0gZm9ybWF0RGVjaW1hbChNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/exponent.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/formatDecimal.js":
/*!*****************************************************!*\
  !*** ./node_modules/d3-format/src/formatDecimal.js ***!
  \*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcz9hYTc0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWwoMS4yMykgcmV0dXJucyBbXCIxMjNcIiwgMF0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/formatDecimal.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/formatGroup.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-format/src/formatGroup.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\"] = (function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzPzk4NzEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/formatGroup.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/formatNumerals.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-format/src/formatNumerals.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\"] = (function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXROdW1lcmFscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzPzAxNGEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obnVtZXJhbHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1swLTldL2csIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBudW1lcmFsc1sraV07XG4gICAgfSk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/formatNumerals.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/formatPrefixAuto.js":
/*!********************************************************!*\
  !*** ./node_modules/d3-format/src/formatPrefixAuto.js ***!
  \********************************************************/
/*! exports provided: prefixExponent, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prefixExponent\", function() { return prefixExponent; });\n/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ \"./node_modules/d3-format/src/formatDecimal.js\");\n\n\nvar prefixExponent;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(x, p) {\n  var d = Object(_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + Object(_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0UHJlZml4QXV0by5qcz9jZGVkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWwoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/formatPrefixAuto.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/formatRounded.js":
/*!*****************************************************!*\
  !*** ./node_modules/d3-format/src/formatRounded.js ***!
  \*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ \"./node_modules/d3-format/src/formatDecimal.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(x, p) {\n  var d = Object(_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRSb3VuZGVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcz8zZjc4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/formatRounded.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/formatSpecifier.js":
/*!*******************************************************!*\
  !*** ./node_modules/d3-format/src/formatSpecifier.js ***!
  \*******************************************************/
/*! exports provided: default, FormatSpecifier */
/***/ (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 formatSpecifier; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormatSpecifier\", function() { return FormatSpecifier; });\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nfunction formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanM/MDliOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgaWYgKCEobWF0Y2ggPSByZS5leGVjKHNwZWNpZmllcikpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvcm1hdDogXCIgKyBzcGVjaWZpZXIpO1xuICB2YXIgbWF0Y2g7XG4gIHJldHVybiBuZXcgRm9ybWF0U3BlY2lmaWVyKHtcbiAgICBmaWxsOiBtYXRjaFsxXSxcbiAgICBhbGlnbjogbWF0Y2hbMl0sXG4gICAgc2lnbjogbWF0Y2hbM10sXG4gICAgc3ltYm9sOiBtYXRjaFs0XSxcbiAgICB6ZXJvOiBtYXRjaFs1XSxcbiAgICB3aWR0aDogbWF0Y2hbNl0sXG4gICAgY29tbWE6IG1hdGNoWzddLFxuICAgIHByZWNpc2lvbjogbWF0Y2hbOF0gJiYgbWF0Y2hbOF0uc2xpY2UoMSksXG4gICAgdHJpbTogbWF0Y2hbOV0sXG4gICAgdHlwZTogbWF0Y2hbMTBdXG4gIH0pO1xufVxuXG5mb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlID0gRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZTsgLy8gaW5zdGFuY2VvZlxuXG5leHBvcnQgZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICB0aGlzLmZpbGwgPSBzcGVjaWZpZXIuZmlsbCA9PT0gdW5kZWZpbmVkID8gXCIgXCIgOiBzcGVjaWZpZXIuZmlsbCArIFwiXCI7XG4gIHRoaXMuYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24gPT09IHVuZGVmaW5lZCA/IFwiPlwiIDogc3BlY2lmaWVyLmFsaWduICsgXCJcIjtcbiAgdGhpcy5zaWduID0gc3BlY2lmaWVyLnNpZ24gPT09IHVuZGVmaW5lZCA/IFwiLVwiIDogc3BlY2lmaWVyLnNpZ24gKyBcIlwiO1xuICB0aGlzLnN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIuc3ltYm9sICsgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFzcGVjaWZpZXIuemVybztcbiAgdGhpcy53aWR0aCA9IHNwZWNpZmllci53aWR0aCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci53aWR0aDtcbiAgdGhpcy5jb21tYSA9ICEhc3BlY2lmaWVyLmNvbW1hO1xuICB0aGlzLnByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIucHJlY2lzaW9uO1xuICB0aGlzLnRyaW0gPSAhIXNwZWNpZmllci50cmltO1xuICB0aGlzLnR5cGUgPSBzcGVjaWZpZXIudHlwZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci50eXBlICsgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09PSB1bmRlZmluZWQgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/formatSpecifier.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/formatTrim.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-format/src/formatTrim.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUcmltLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcz85MWRiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRyaW1zIGluc2lnbmlmaWNhbnQgemVyb3MsIGUuZy4sIHJlcGxhY2VzIDEuMjAwMGsgd2l0aCAxLjJrLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocykge1xuICBvdXQ6IGZvciAodmFyIG4gPSBzLmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7XG4gICAgc3dpdGNoIChzW2ldKSB7XG4gICAgICBjYXNlIFwiLlwiOiBpMCA9IGkxID0gaTsgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOiBpZiAoaTAgPT09IDApIGkwID0gaTsgaTEgPSBpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IGlmICghK3NbaV0pIGJyZWFrIG91dDsgaWYgKGkwID4gMCkgaTAgPSAwOyBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGkwID4gMCA/IHMuc2xpY2UoMCwgaTApICsgcy5zbGljZShpMSArIDEpIDogcztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/formatTrim.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/formatTypes.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-format/src/formatTypes.js ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatPrefixAuto.js */ \"./node_modules/d3-format/src/formatPrefixAuto.js\");\n/* harmony import */ var _formatRounded_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatRounded.js */ \"./node_modules/d3-format/src/formatRounded.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  \"%\": function(x, p) { return (x * 100).toFixed(p); },\n  \"b\": function(x) { return Math.round(x).toString(2); },\n  \"c\": function(x) { return x + \"\"; },\n  \"d\": function(x) { return Math.round(x).toString(10); },\n  \"e\": function(x, p) { return x.toExponential(p); },\n  \"f\": function(x, p) { return x.toFixed(p); },\n  \"g\": function(x, p) { return x.toPrecision(p); },\n  \"o\": function(x) { return Math.round(x).toString(8); },\n  \"p\": function(x, p) { return Object(_formatRounded_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(x * 100, p); },\n  \"r\": _formatRounded_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  \"s\": _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n  \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n  \"x\": function(x) { return Math.round(x).toString(16); }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUeXBlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzP2I0ZWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZvcm1hdFByZWZpeEF1dG8gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGZvcm1hdFJvdW5kZWQgZnJvbSBcIi4vZm9ybWF0Um91bmRlZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiJVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiAoeCAqIDEwMCkudG9GaXhlZChwKTsgfSxcbiAgXCJiXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMik7IH0sXG4gIFwiY1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiB4ICsgXCJcIjsgfSxcbiAgXCJkXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTApOyB9LFxuICBcImVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b0V4cG9uZW50aWFsKHApOyB9LFxuICBcImZcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b0ZpeGVkKHApOyB9LFxuICBcImdcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b1ByZWNpc2lvbihwKTsgfSxcbiAgXCJvXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCk7IH0sXG4gIFwicFwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApOyB9LFxuICBcInJcIjogZm9ybWF0Um91bmRlZCxcbiAgXCJzXCI6IGZvcm1hdFByZWZpeEF1dG8sXG4gIFwiWFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOyB9LFxuICBcInhcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNik7IH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/formatTypes.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/identity.js":
/*!************************************************!*\
  !*** ./node_modules/d3-format/src/identity.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\"] = (function(x) {\n  return x;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pZGVudGl0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2lkZW50aXR5LmpzPzExNDkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/identity.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/index.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-format/src/index.js ***!
  \*********************************************/
/*! exports provided: formatDefaultLocale, format, formatPrefix, formatLocale, formatSpecifier, FormatSpecifier, precisionFixed, precisionPrefix, precisionRound */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ \"./node_modules/d3-format/src/defaultLocale.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"formatDefaultLocale\", function() { return _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"format\", function() { return _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"format\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"formatPrefix\", function() { return _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"formatPrefix\"]; });\n\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale.js */ \"./node_modules/d3-format/src/locale.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"formatLocale\", function() { return _locale_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatSpecifier.js */ \"./node_modules/d3-format/src/formatSpecifier.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"formatSpecifier\", function() { return _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FormatSpecifier\", function() { return _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__[\"FormatSpecifier\"]; });\n\n/* harmony import */ var _precisionFixed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./precisionFixed.js */ \"./node_modules/d3-format/src/precisionFixed.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"precisionFixed\", function() { return _precisionFixed_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _precisionPrefix_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./precisionPrefix.js */ \"./node_modules/d3-format/src/precisionPrefix.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"precisionPrefix\", function() { return _precisionPrefix_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _precisionRound_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./precisionRound.js */ \"./node_modules/d3-format/src/precisionRound.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"precisionRound\", function() { return _precisionRound_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2luZGV4LmpzP2FkNjgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtkZWZhdWx0IGFzIGZvcm1hdERlZmF1bHRMb2NhbGUsIGZvcm1hdCwgZm9ybWF0UHJlZml4fSBmcm9tIFwiLi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9ybWF0TG9jYWxlfSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JtYXRTcGVjaWZpZXIsIEZvcm1hdFNwZWNpZmllcn0gZnJvbSBcIi4vZm9ybWF0U3BlY2lmaWVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcHJlY2lzaW9uRml4ZWR9IGZyb20gXCIuL3ByZWNpc2lvbkZpeGVkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcHJlY2lzaW9uUHJlZml4fSBmcm9tIFwiLi9wcmVjaXNpb25QcmVmaXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcIi4vcHJlY2lzaW9uUm91bmQuanNcIjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/locale.js":
/*!**********************************************!*\
  !*** ./node_modules/d3-format/src/locale.js ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ \"./node_modules/d3-format/src/exponent.js\");\n/* harmony import */ var _formatGroup_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatGroup.js */ \"./node_modules/d3-format/src/formatGroup.js\");\n/* harmony import */ var _formatNumerals_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatNumerals.js */ \"./node_modules/d3-format/src/formatNumerals.js\");\n/* harmony import */ var _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./formatSpecifier.js */ \"./node_modules/d3-format/src/formatSpecifier.js\");\n/* harmony import */ var _formatTrim_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./formatTrim.js */ \"./node_modules/d3-format/src/formatTrim.js\");\n/* harmony import */ var _formatTypes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatTypes.js */ \"./node_modules/d3-format/src/formatTypes.js\");\n/* harmony import */ var _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./formatPrefixAuto.js */ \"./node_modules/d3-format/src/formatPrefixAuto.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./identity.js */ \"./node_modules/d3-format/src/identity.js\");\n\n\n\n\n\n\n\n\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? _identity_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"] : Object(_formatGroup_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? _identity_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"] : Object(_formatNumerals_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = Object(_formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!_formatTypes_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"][type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = _formatTypes_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"][type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Perform the initial formatting.\n        var valueNegative = value < 0;\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = Object(_formatTrim_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value);\n\n        // If a negative value rounds to zero during formatting, treat as positive.\n        if (valueNegative && +value === 0) valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\n        valueSuffix = (type === \"s\" ? prefixes[8 + _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_6__[\"prefixExponent\"] / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = Object(_formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(Object(_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanM/YjE3MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IGxvY2FsZS5taW51cyArIFwiXCIsXG4gICAgICBuYW4gPSBsb2NhbGUubmFuID09PSB1bmRlZmluZWQgPyBcIk5hTlwiIDogbG9jYWxlLm5hbiArIFwiXCI7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcbiAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcbiAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXG4gICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gVGhlIFwiXCIgdHlwZSwgYW5kIGFueSBpbnZhbGlkIHR5cGUsIGlzIGFuIGFsaWFzIGZvciBcIi4xMn5nXCIuXG4gICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXG4gICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5UHJlZml4IDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cbiAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXG4gICAgICAgIG1heWJlU3VmZml4ID0gL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNlxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/IG5hbiA6IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgaWYgKHRyaW0pIHZhbHVlID0gZm9ybWF0VHJpbSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgYSBuZWdhdGl2ZSB2YWx1ZSByb3VuZHMgdG8gemVybyBkdXJpbmcgZm9ybWF0dGluZywgdHJlYXQgYXMgcG9zaXRpdmUuXG4gICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCkgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IG1pbnVzKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XG5cbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/locale.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/precisionFixed.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-format/src/precisionFixed.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ \"./node_modules/d3-format/src/exponent.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(step) {\n  return Math.max(0, -Object(_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Math.abs(step)));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzP2RhZDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/precisionFixed.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/precisionPrefix.js":
/*!*******************************************************!*\
  !*** ./node_modules/d3-format/src/precisionPrefix.js ***!
  \*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ \"./node_modules/d3-format/src/exponent.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(Object(_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) / 3))) * 3 - Object(_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Math.abs(step)));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanM/ZDkzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/precisionPrefix.js\n");

/***/ }),

/***/ "./node_modules/d3-format/src/precisionRound.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-format/src/precisionRound.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ \"./node_modules/d3-format/src/exponent.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, Object(_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(max) - Object(_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(step)) + 1;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblJvdW5kLmpzP2Q5ODkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIG1heCkge1xuICBzdGVwID0gTWF0aC5hYnMoc3RlcCksIG1heCA9IE1hdGguYWJzKG1heCkgLSBzdGVwO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgZXhwb25lbnQobWF4KSAtIGV4cG9uZW50KHN0ZXApKSArIDE7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-format/src/precisionRound.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/array.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-interpolate/src/array.js ***!
  \**************************************************/
/*! exports provided: default, genericArray */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"genericArray\", function() { return genericArray; });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"./node_modules/d3-interpolate/src/value.js\");\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./numberArray.js */ \"./node_modules/d3-interpolate/src/numberArray.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n  return (Object(_numberArray_js__WEBPACK_IMPORTED_MODULE_1__[\"isNumberArray\"])(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : genericArray)(a, b);\n});\n\nfunction genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = Object(_value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2FycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcz82NzMwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gKGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheSA6IGdlbmVyaWNBcnJheSkoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljQXJyYXkoYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/array.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/basis.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-interpolate/src/basis.js ***!
  \**************************************************/
/*! exports provided: basis, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"basis\", function() { return basis; });\nfunction basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcz9jODRhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/basis.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/basisClosed.js":
/*!********************************************************!*\
  !*** ./node_modules/d3-interpolate/src/basisClosed.js ***!
  \********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ \"./node_modules/d3-interpolate/src/basis.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return Object(_basis_js__WEBPACK_IMPORTED_MODULE_0__[\"basis\"])((t - i / n) * n, v0, v1, v2, v3);\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzQ2xvc2VkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpc0Nsb3NlZC5qcz80YmNkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLFxuICAgICAgICB2MCA9IHZhbHVlc1soaSArIG4gLSAxKSAlIG5dLFxuICAgICAgICB2MSA9IHZhbHVlc1tpICUgbl0sXG4gICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSxcbiAgICAgICAgdjMgPSB2YWx1ZXNbKGkgKyAyKSAlIG5dO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/basisClosed.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/color.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-interpolate/src/color.js ***!
  \**************************************************/
/*! exports provided: hue, gamma, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hue\", function() { return hue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gamma\", function() { return gamma; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return nogamma; });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"./node_modules/d3-interpolate/src/constant.js\");\n\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nfunction hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : Object(_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : Object(_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n  };\n}\n\nfunction nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : Object(_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcz9iMDU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/color.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/constant.js":
/*!*****************************************************!*\
  !*** ./node_modules/d3-interpolate/src/constant.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\"] = (function(x) {\n  return function() {\n    return x;\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcz9jNjk4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/constant.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/cubehelix.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-interpolate/src/cubehelix.js ***!
  \******************************************************/
/*! exports provided: default, cubehelixLong */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cubehelixLong\", function() { return cubehelixLong; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"cubehelix\"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"cubehelix\"])(end)).h),\n          s = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.s, end.s),\n          l = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n          opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"hue\"]));\nvar cubehelixLong = cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2N1YmVoZWxpeC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzPzM4NzIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjdWJlaGVsaXggYXMgY29sb3JDdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXgoaHVlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gY3ViZWhlbGl4R2FtbWEoeSkge1xuICAgIHkgPSAreTtcblxuICAgIGZ1bmN0aW9uIGN1YmVoZWxpeChzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckN1YmVoZWxpeChzdGFydCkpLmgsIChlbmQgPSBjb2xvckN1YmVoZWxpeChlbmQpKS5oKSxcbiAgICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgICAgc3RhcnQubCA9IGwoTWF0aC5wb3codCwgeSkpO1xuICAgICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3ViZWhlbGl4LmdhbW1hID0gY3ViZWhlbGl4R2FtbWE7XG5cbiAgICByZXR1cm4gY3ViZWhlbGl4O1xuICB9KSgxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3ViZWhlbGl4KGh1ZSk7XG5leHBvcnQgdmFyIGN1YmVoZWxpeExvbmcgPSBjdWJlaGVsaXgoY29sb3IpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/cubehelix.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/date.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-interpolate/src/date.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\"] = (function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanM/MWI2ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/date.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/discrete.js":
/*!*****************************************************!*\
  !*** ./node_modules/d3-interpolate/src/discrete.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\"] = (function(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Rpc2NyZXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kaXNjcmV0ZS5qcz81MDYxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJhbmdlKSB7XG4gIHZhciBuID0gcmFuZ2UubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiByYW5nZVtNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMSwgTWF0aC5mbG9vcih0ICogbikpKV07XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/discrete.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/hcl.js":
/*!************************************************!*\
  !*** ./node_modules/d3-interpolate/src/hcl.js ***!
  \************************************************/
/*! exports provided: default, hclLong */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hclLong\", function() { return hclLong; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"hcl\"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"hcl\"])(end)).h),\n        c = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.c, end.c),\n        l = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n        opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hcl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"hue\"]));\nvar hclLong = hcl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2hjbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaGNsLmpzPzVhY2YiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtoY2wgYXMgY29sb3JIY2x9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5mdW5jdGlvbiBoY2woaHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgdmFyIGggPSBodWUoKHN0YXJ0ID0gY29sb3JIY2woc3RhcnQpKS5oLCAoZW5kID0gY29sb3JIY2woZW5kKSkuaCksXG4gICAgICAgIGMgPSBjb2xvcihzdGFydC5jLCBlbmQuYyksXG4gICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgc3RhcnQuYyA9IGModCk7XG4gICAgICBzdGFydC5sID0gbCh0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhjbChodWUpO1xuZXhwb3J0IHZhciBoY2xMb25nID0gaGNsKGNvbG9yKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/hcl.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/hsl.js":
/*!************************************************!*\
  !*** ./node_modules/d3-interpolate/src/hsl.js ***!
  \************************************************/
/*! exports provided: default, hslLong */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hslLong\", function() { return hslLong; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"hsl\"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"hsl\"])(end)).h),\n        s = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.s, end.s),\n        l = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n        opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hsl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"hue\"]));\nvar hslLong = hsl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2hzbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHNsLmpzPzcwZDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtoc2wgYXMgY29sb3JIc2x9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5mdW5jdGlvbiBoc2woaHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgdmFyIGggPSBodWUoKHN0YXJ0ID0gY29sb3JIc2woc3RhcnQpKS5oLCAoZW5kID0gY29sb3JIc2woZW5kKSkuaCksXG4gICAgICAgIHMgPSBjb2xvcihzdGFydC5zLCBlbmQucyksXG4gICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICBzdGFydC5sID0gbCh0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhzbChodWUpO1xuZXhwb3J0IHZhciBoc2xMb25nID0gaHNsKGNvbG9yKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/hsl.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/hue.js":
/*!************************************************!*\
  !*** ./node_modules/d3-interpolate/src/hue.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-interpolate/src/color.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n  var i = Object(_color_js__WEBPACK_IMPORTED_MODULE_0__[\"hue\"])(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2h1ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHVlLmpzPzUzYTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSBodWUoK2EsICtiKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgeCA9IGkodCk7XG4gICAgcmV0dXJuIHggLSAzNjAgKiBNYXRoLmZsb29yKHggLyAzNjApO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/hue.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/index.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-interpolate/src/index.js ***!
  \**************************************************/
/*! exports provided: interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateDate, interpolateDiscrete, interpolateHue, interpolateNumber, interpolateNumberArray, interpolateObject, interpolateRound, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateZoom, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateHsl, interpolateHslLong, interpolateLab, interpolateHcl, interpolateHclLong, interpolateCubehelix, interpolateCubehelixLong, piecewise, quantize */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"./node_modules/d3-interpolate/src/value.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolate\", function() { return _value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array.js */ \"./node_modules/d3-interpolate/src/array.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateArray\", function() { return _array_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis.js */ \"./node_modules/d3-interpolate/src/basis.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateBasis\", function() { return _basis_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed.js */ \"./node_modules/d3-interpolate/src/basisClosed.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateBasisClosed\", function() { return _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./date.js */ \"./node_modules/d3-interpolate/src/date.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateDate\", function() { return _date_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _discrete_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./discrete.js */ \"./node_modules/d3-interpolate/src/discrete.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateDiscrete\", function() { return _discrete_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _hue_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hue.js */ \"./node_modules/d3-interpolate/src/hue.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHue\", function() { return _hue_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./number.js */ \"./node_modules/d3-interpolate/src/number.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateNumber\", function() { return _number_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./numberArray.js */ \"./node_modules/d3-interpolate/src/numberArray.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateNumberArray\", function() { return _numberArray_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./object.js */ \"./node_modules/d3-interpolate/src/object.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateObject\", function() { return _object_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _round_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./round.js */ \"./node_modules/d3-interpolate/src/round.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateRound\", function() { return _round_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./string.js */ \"./node_modules/d3-interpolate/src/string.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateString\", function() { return _string_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _transform_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./transform/index.js */ \"./node_modules/d3-interpolate/src/transform/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateTransformCss\", function() { return _transform_index_js__WEBPACK_IMPORTED_MODULE_12__[\"interpolateTransformCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateTransformSvg\", function() { return _transform_index_js__WEBPACK_IMPORTED_MODULE_12__[\"interpolateTransformSvg\"]; });\n\n/* harmony import */ var _zoom_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./zoom.js */ \"./node_modules/d3-interpolate/src/zoom.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateZoom\", function() { return _zoom_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./rgb.js */ \"./node_modules/d3-interpolate/src/rgb.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateRgb\", function() { return _rgb_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateRgbBasis\", function() { return _rgb_js__WEBPACK_IMPORTED_MODULE_14__[\"rgbBasis\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateRgbBasisClosed\", function() { return _rgb_js__WEBPACK_IMPORTED_MODULE_14__[\"rgbBasisClosed\"]; });\n\n/* harmony import */ var _hsl_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hsl.js */ \"./node_modules/d3-interpolate/src/hsl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHsl\", function() { return _hsl_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHslLong\", function() { return _hsl_js__WEBPACK_IMPORTED_MODULE_15__[\"hslLong\"]; });\n\n/* harmony import */ var _lab_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./lab.js */ \"./node_modules/d3-interpolate/src/lab.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateLab\", function() { return _lab_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _hcl_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hcl.js */ \"./node_modules/d3-interpolate/src/hcl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHcl\", function() { return _hcl_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHclLong\", function() { return _hcl_js__WEBPACK_IMPORTED_MODULE_17__[\"hclLong\"]; });\n\n/* harmony import */ var _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./cubehelix.js */ \"./node_modules/d3-interpolate/src/cubehelix.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateCubehelix\", function() { return _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateCubehelixLong\", function() { return _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__[\"cubehelixLong\"]; });\n\n/* harmony import */ var _piecewise_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./piecewise.js */ \"./node_modules/d3-interpolate/src/piecewise.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"piecewise\", function() { return _piecewise_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"]; });\n\n/* harmony import */ var _quantize_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./quantize.js */ \"./node_modules/d3-interpolate/src/quantize.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"quantize\", function() { return _quantize_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9pbmRleC5qcz9hNDNkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZX0gZnJvbSBcIi4vdmFsdWUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUFycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZURhdGV9IGZyb20gXCIuL2RhdGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZURpc2NyZXRlfSBmcm9tIFwiLi9kaXNjcmV0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlSHVlfSBmcm9tIFwiLi9odWUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU51bWJlcn0gZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU9iamVjdH0gZnJvbSBcIi4vb2JqZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcIi4vcm91bmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5leHBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtQ3NzLCBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Z30gZnJvbSBcIi4vdHJhbnNmb3JtL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVab29tfSBmcm9tIFwiLi96b29tLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZ2IsIHJnYkJhc2lzIGFzIGludGVycG9sYXRlUmdiQmFzaXMsIHJnYkJhc2lzQ2xvc2VkIGFzIGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWR9IGZyb20gXCIuL3JnYi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlSHNsLCBoc2xMb25nIGFzIGludGVycG9sYXRlSHNsTG9uZ30gZnJvbSBcIi4vaHNsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVMYWJ9IGZyb20gXCIuL2xhYi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlSGNsLCBoY2xMb25nIGFzIGludGVycG9sYXRlSGNsTG9uZ30gZnJvbSBcIi4vaGNsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVDdWJlaGVsaXgsIGN1YmVoZWxpeExvbmcgYXMgaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiLi9jdWJlaGVsaXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwaWVjZXdpc2V9IGZyb20gXCIuL3BpZWNld2lzZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHF1YW50aXplfSBmcm9tIFwiLi9xdWFudGl6ZS5qc1wiO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/lab.js":
/*!************************************************!*\
  !*** ./node_modules/d3-interpolate/src/lab.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 lab; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction lab(start, end) {\n  var l = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"lab\"])(start)).l, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"lab\"])(end)).l),\n      a = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.a, end.a),\n      b = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.b, end.b),\n      opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2xhYi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbGFiLmpzPzEyNWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtsYWIgYXMgY29sb3JMYWJ9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yIGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihzdGFydCwgZW5kKSB7XG4gIHZhciBsID0gY29sb3IoKHN0YXJ0ID0gY29sb3JMYWIoc3RhcnQpKS5sLCAoZW5kID0gY29sb3JMYWIoZW5kKSkubCksXG4gICAgICBhID0gY29sb3Ioc3RhcnQuYSwgZW5kLmEpLFxuICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgc3RhcnQubCA9IGwodCk7XG4gICAgc3RhcnQuYSA9IGEodCk7XG4gICAgc3RhcnQuYiA9IGIodCk7XG4gICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/lab.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/number.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-interpolate/src/number.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\"] = (function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzP2UzMTciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/number.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/numberArray.js":
/*!********************************************************!*\
  !*** ./node_modules/d3-interpolate/src/numberArray.js ***!
  \********************************************************/
/*! exports provided: default, isNumberArray */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNumberArray\", function() { return isNumberArray; });\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n});\n\nfunction isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlckFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXJBcnJheS5qcz81MWRlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgaWYgKCFiKSBiID0gW107XG4gIHZhciBuID0gYSA/IE1hdGgubWluKGIubGVuZ3RoLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgYyA9IGIuc2xpY2UoKSxcbiAgICAgIGk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY1tpXSA9IGFbaV0gKiAoMSAtIHQpICsgYltpXSAqIHQ7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5KHgpIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh4KSAmJiAhKHggaW5zdGFuY2VvZiBEYXRhVmlldyk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/numberArray.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/object.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-interpolate/src/object.js ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"./node_modules/d3-interpolate/src/value.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = Object(_value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL29iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvb2JqZWN0LmpzPzcxYmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/object.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/piecewise.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-interpolate/src/piecewise.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 piecewise; });\nfunction piecewise(interpolate, values) {\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3BpZWNld2lzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcGllY2V3aXNlLmpzP2FjMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGllY2V3aXNlKGludGVycG9sYXRlLCB2YWx1ZXMpIHtcbiAgdmFyIGkgPSAwLCBuID0gdmFsdWVzLmxlbmd0aCAtIDEsIHYgPSB2YWx1ZXNbMF0sIEkgPSBuZXcgQXJyYXkobiA8IDAgPyAwIDogbik7XG4gIHdoaWxlIChpIDwgbikgSVtpXSA9IGludGVycG9sYXRlKHYsIHYgPSB2YWx1ZXNbKytpXSk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMSwgTWF0aC5mbG9vcih0ICo9IG4pKSk7XG4gICAgcmV0dXJuIElbaV0odCAtIGkpO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/piecewise.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/quantize.js":
/*!*****************************************************!*\
  !*** ./node_modules/d3-interpolate/src/quantize.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\"] = (function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3F1YW50aXplLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9xdWFudGl6ZS5qcz8xYWY5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGludGVycG9sYXRvciwgbikge1xuICB2YXIgc2FtcGxlcyA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHNhbXBsZXNbaV0gPSBpbnRlcnBvbGF0b3IoaSAvIChuIC0gMSkpO1xuICByZXR1cm4gc2FtcGxlcztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/quantize.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/rgb.js":
/*!************************************************!*\
  !*** ./node_modules/d3-interpolate/src/rgb.js ***!
  \************************************************/
/*! exports provided: default, rgbBasis, rgbBasisClosed */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rgbBasis\", function() { return rgbBasis; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rgbBasisClosed\", function() { return rgbBasisClosed; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./basis.js */ \"./node_modules/d3-interpolate/src/basis.js\");\n/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basisClosed.js */ \"./node_modules/d3-interpolate/src/basisClosed.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-interpolate/src/color.js\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ((function rgbGamma(y) {\n  var color = Object(_color_js__WEBPACK_IMPORTED_MODULE_3__[\"gamma\"])(y);\n\n  function rgb(start, end) {\n    var r = color((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"rgb\"])(start)).r, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"rgb\"])(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1));\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"rgb\"])(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nvar rgbBasis = rgbSpline(_basis_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvar rgbBasisClosed = rgbSpline(_basisClosed_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzP2UzNjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/rgb.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/round.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-interpolate/src/round.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\"] = (function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcz81ODU3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/round.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/string.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-interpolate/src/string.js ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number.js */ \"./node_modules/d3-interpolate/src/number.js\");\n\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvc3RyaW5nLmpzPzkwZWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxcbiAgICByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGJpID0gcmVBLmxhc3RJbmRleCA9IHJlQi5sYXN0SW5kZXggPSAwLCAvLyBzY2FuIGluZGV4IGZvciBuZXh0IG51bWJlciBpbiBiXG4gICAgICBhbSwgLy8gY3VycmVudCBtYXRjaCBpbiBhXG4gICAgICBibSwgLy8gY3VycmVudCBtYXRjaCBpbiBiXG4gICAgICBicywgLy8gc3RyaW5nIHByZWNlZGluZyBjdXJyZW50IG51bWJlciBpbiBiLCBpZiBhbnlcbiAgICAgIGkgPSAtMSwgLy8gaW5kZXggaW4gc1xuICAgICAgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcblxuICAvLyBDb2VyY2UgaW5wdXRzIHRvIHN0cmluZ3MuXG4gIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xuXG4gIC8vIEludGVycG9sYXRlIHBhaXJzIG9mIG51bWJlcnMgaW4gYSAmIGIuXG4gIHdoaWxlICgoYW0gPSByZUEuZXhlYyhhKSlcbiAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xuICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgeyAvLyBhIHN0cmluZyBwcmVjZWRlcyB0aGUgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYnMgPSBiLnNsaWNlKGJpLCBicyk7XG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gICAgfVxuICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBibTsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYm07XG4gICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcbiAgICAgIHNbKytpXSA9IG51bGw7XG4gICAgICBxLnB1c2goe2k6IGksIHg6IG51bWJlcihhbSwgYm0pfSk7XG4gICAgfVxuICAgIGJpID0gcmVCLmxhc3RJbmRleDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5zIG9mIGIuXG4gIGlmIChiaSA8IGIubGVuZ3RoKSB7XG4gICAgYnMgPSBiLnNsaWNlKGJpKTtcbiAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICBlbHNlIHNbKytpXSA9IGJzO1xuICB9XG5cbiAgLy8gU3BlY2lhbCBvcHRpbWl6YXRpb24gZm9yIG9ubHkgYSBzaW5nbGUgbWF0Y2guXG4gIC8vIE90aGVyd2lzZSwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgbnVtYmVycyBhbmQgcmVqb2luIHRoZSBzdHJpbmcuXG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAocVswXVxuICAgICAgPyBvbmUocVswXS54KVxuICAgICAgOiB6ZXJvKGIpKVxuICAgICAgOiAoYiA9IHEubGVuZ3RoLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgICAgICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/string.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/transform/decompose.js":
/*!****************************************************************!*\
  !*** ./node_modules/d3-interpolate/src/transform/decompose.js ***!
  \****************************************************************/
/*! exports provided: identity, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"identity\", function() { return identity; });\nvar degrees = 180 / Math.PI;\n\nvar identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9kZWNvbXBvc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9kZWNvbXBvc2UuanM/MzI1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/transform/decompose.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/transform/index.js":
/*!************************************************************!*\
  !*** ./node_modules/d3-interpolate/src/transform/index.js ***!
  \************************************************************/
/*! exports provided: interpolateTransformCss, interpolateTransformSvg */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"interpolateTransformCss\", function() { return interpolateTransformCss; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"interpolateTransformSvg\", function() { return interpolateTransformSvg; });\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../number.js */ \"./node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse.js */ \"./node_modules/d3-interpolate/src/transform/parse.js\");\n\n\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(xa, xb)}, {i: i - 2, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(xa, xb)}, {i: i - 2, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nvar interpolateTransformCss = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__[\"parseCss\"], \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__[\"parseSvg\"], \", \", \")\", \")\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2luZGV4LmpzPzRiNzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2UuanNcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/transform/index.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/transform/parse.js":
/*!************************************************************!*\
  !*** ./node_modules/d3-interpolate/src/transform/parse.js ***!
  \************************************************************/
/*! exports provided: parseCss, parseSvg */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseCss\", function() { return parseCss; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseSvg\", function() { return parseSvg; });\n/* harmony import */ var _decompose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decompose.js */ \"./node_modules/d3-interpolate/src/transform/decompose.js\");\n\n\nvar cssNode,\n    cssRoot,\n    cssView,\n    svgNode;\n\nfunction parseCss(value) {\n  if (value === \"none\") return _decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n  if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n  cssNode.style.transform = value;\n  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n  cssRoot.removeChild(cssNode);\n  value = value.slice(7, -1).split(\",\");\n  return Object(_decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nfunction parseSvg(value) {\n  if (value == null) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n  value = value.matrix;\n  return Object(_decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9wYXJzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzP2RhNzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2UuanNcIjtcblxudmFyIGNzc05vZGUsXG4gICAgY3NzUm9vdCxcbiAgICBjc3NWaWV3LFxuICAgIHN2Z05vZGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IFwibm9uZVwiKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghY3NzTm9kZSkgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIiksIGNzc1Jvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGNzc1ZpZXcgPSBkb2N1bWVudC5kZWZhdWx0VmlldztcbiAgY3NzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgdmFsdWUgPSBjc3NWaWV3LmdldENvbXB1dGVkU3R5bGUoY3NzUm9vdC5hcHBlbmRDaGlsZChjc3NOb2RlKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKTtcbiAgY3NzUm9vdC5yZW1vdmVDaGlsZChjc3NOb2RlKTtcbiAgdmFsdWUgPSB2YWx1ZS5zbGljZSg3LCAtMSkuc3BsaXQoXCIsXCIpO1xuICByZXR1cm4gZGVjb21wb3NlKCt2YWx1ZVswXSwgK3ZhbHVlWzFdLCArdmFsdWVbMl0sICt2YWx1ZVszXSwgK3ZhbHVlWzRdLCArdmFsdWVbNV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/transform/parse.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/value.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-interpolate/src/value.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rgb.js */ \"./node_modules/d3-interpolate/src/rgb.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./array.js */ \"./node_modules/d3-interpolate/src/array.js\");\n/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./date.js */ \"./node_modules/d3-interpolate/src/date.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number.js */ \"./node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./object.js */ \"./node_modules/d3-interpolate/src/object.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./string.js */ \"./node_modules/d3-interpolate/src/string.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./constant.js */ \"./node_modules/d3-interpolate/src/constant.js\");\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./numberArray.js */ \"./node_modules/d3-interpolate/src/numberArray.js\");\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? Object(_constant_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(b)\n      : (t === \"number\" ? _number_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n      : t === \"string\" ? ((c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"color\"])(b)) ? (b = c, _rgb_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) : _string_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])\n      : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_0__[\"color\"] ? _rgb_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n      : b instanceof Date ? _date_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n      : Object(_numberArray_js__WEBPACK_IMPORTED_MODULE_8__[\"isNumberArray\"])(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n      : Array.isArray(b) ? _array_js__WEBPACK_IMPORTED_MODULE_2__[\"genericArray\"]\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? _object_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n      : _number_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(a, b);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3ZhbHVlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcz9lYTFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHJnYiBmcm9tIFwiLi9yZ2IuanNcIjtcbmltcG9ydCB7Z2VuZXJpY0FycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGRhdGUgZnJvbSBcIi4vZGF0ZS5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmltcG9ydCBvYmplY3QgZnJvbSBcIi4vb2JqZWN0LmpzXCI7XG5pbXBvcnQgc3RyaW5nIGZyb20gXCIuL3N0cmluZy5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IpIDogc3RyaW5nKVxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyByZ2JcbiAgICAgIDogYiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlXG4gICAgICA6IGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheVxuICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gZ2VuZXJpY0FycmF5XG4gICAgICA6IHR5cGVvZiBiLnZhbHVlT2YgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYi50b1N0cmluZyAhPT0gXCJmdW5jdGlvblwiIHx8IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/value.js\n");

/***/ }),

/***/ "./node_modules/d3-interpolate/src/zoom.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-interpolate/src/zoom.js ***!
  \*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar rho = Math.SQRT2,\n    rho2 = 2,\n    rho4 = 4,\n    epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(p0, p1) {\n  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n      dx = ux1 - ux0,\n      dy = uy1 - uy0,\n      d2 = dx * dx + dy * dy,\n      i,\n      S;\n\n  // Special case for u0 ≅ u1.\n  if (d2 < epsilon2) {\n    S = Math.log(w1 / w0) / rho;\n    i = function(t) {\n      return [\n        ux0 + t * dx,\n        uy0 + t * dy,\n        w0 * Math.exp(rho * t * S)\n      ];\n    }\n  }\n\n  // General case.\n  else {\n    var d1 = Math.sqrt(d2),\n        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n    S = (r1 - r0) / rho;\n    i = function(t) {\n      var s = t * S,\n          coshr0 = cosh(r0),\n          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n      return [\n        ux0 + u * dx,\n        uy0 + u * dy,\n        w0 * coshr0 / cosh(rho * s + r0)\n      ];\n    }\n  }\n\n  i.duration = S * 1000;\n\n  return i;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3pvb20uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3pvb20uanM/Y2U3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmhvID0gTWF0aC5TUVJUMixcbiAgICByaG8yID0gMixcbiAgICByaG80ID0gNCxcbiAgICBlcHNpbG9uMiA9IDFlLTEyO1xuXG5mdW5jdGlvbiBjb3NoKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSArIDEgLyB4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHNpbmgoeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpIC0gMSAvIHgpIC8gMjtcbn1cblxuZnVuY3Rpb24gdGFuaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCgyICogeCkpIC0gMSkgLyAoeCArIDEpO1xufVxuXG4vLyBwMCA9IFt1eDAsIHV5MCwgdzBdXG4vLyBwMSA9IFt1eDEsIHV5MSwgdzFdXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwMCwgcDEpIHtcbiAgdmFyIHV4MCA9IHAwWzBdLCB1eTAgPSBwMFsxXSwgdzAgPSBwMFsyXSxcbiAgICAgIHV4MSA9IHAxWzBdLCB1eTEgPSBwMVsxXSwgdzEgPSBwMVsyXSxcbiAgICAgIGR4ID0gdXgxIC0gdXgwLFxuICAgICAgZHkgPSB1eTEgLSB1eTAsXG4gICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5LFxuICAgICAgaSxcbiAgICAgIFM7XG5cbiAgLy8gU3BlY2lhbCBjYXNlIGZvciB1MCDiiYUgdTEuXG4gIGlmIChkMiA8IGVwc2lsb24yKSB7XG4gICAgUyA9IE1hdGgubG9nKHcxIC8gdzApIC8gcmhvO1xuICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB1eDAgKyB0ICogZHgsXG4gICAgICAgIHV5MCArIHQgKiBkeSxcbiAgICAgICAgdzAgKiBNYXRoLmV4cChyaG8gKiB0ICogUylcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhbCBjYXNlLlxuICBlbHNlIHtcbiAgICB2YXIgZDEgPSBNYXRoLnNxcnQoZDIpLFxuICAgICAgICBiMCA9ICh3MSAqIHcxIC0gdzAgKiB3MCArIHJobzQgKiBkMikgLyAoMiAqIHcwICogcmhvMiAqIGQxKSxcbiAgICAgICAgYjEgPSAodzEgKiB3MSAtIHcwICogdzAgLSByaG80ICogZDIpIC8gKDIgKiB3MSAqIHJobzIgKiBkMSksXG4gICAgICAgIHIwID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIwICogYjAgKyAxKSAtIGIwKSxcbiAgICAgICAgcjEgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjEgKiBiMSArIDEpIC0gYjEpO1xuICAgIFMgPSAocjEgLSByMCkgLyByaG87XG4gICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBzID0gdCAqIFMsXG4gICAgICAgICAgY29zaHIwID0gY29zaChyMCksXG4gICAgICAgICAgdSA9IHcwIC8gKHJobzIgKiBkMSkgKiAoY29zaHIwICogdGFuaChyaG8gKiBzICsgcjApIC0gc2luaChyMCkpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdXgwICsgdSAqIGR4LFxuICAgICAgICB1eTAgKyB1ICogZHksXG4gICAgICAgIHcwICogY29zaHIwIC8gY29zaChyaG8gKiBzICsgcjApXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIGkuZHVyYXRpb24gPSBTICogMTAwMDtcblxuICByZXR1cm4gaTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-interpolate/src/zoom.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/array.js":
/*!********************************************!*\
  !*** ./node_modules/d3-scale/src/array.js ***!
  \********************************************/
/*! exports provided: map, slice */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"map\", function() { return map; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"slice\", function() { return slice; });\nvar array = Array.prototype;\n\nvar map = array.map;\nvar slice = array.slice;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2FycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcz85Y2ZhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBtYXAgPSBhcnJheS5tYXA7XG5leHBvcnQgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/array.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/band.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-scale/src/band.js ***!
  \*******************************************/
/*! exports provided: default, point */
/***/ (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 band; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"point\", function() { return point; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _ordinal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ordinal */ \"./node_modules/d3-scale/src/ordinal.js\");\n\n\n\n\nfunction band() {\n  var scale = Object(_ordinal__WEBPACK_IMPORTED_MODULE_2__[\"default\"])().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      range = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = range[1] < range[0],\n        start = range[reverse - 0],\n        stop = range[1 - reverse];\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"range\"])(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = [+_[0], +_[1]], round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), range)\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initRange\"].apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nfunction point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanM/YjAyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JhbmdlIGFzIHNlcXVlbmNlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5pbXBvcnQgb3JkaW5hbCBmcm9tIFwiLi9vcmRpbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhbmQoKSB7XG4gIHZhciBzY2FsZSA9IG9yZGluYWwoKS51bmtub3duKHVuZGVmaW5lZCksXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW4sXG4gICAgICBvcmRpbmFsUmFuZ2UgPSBzY2FsZS5yYW5nZSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgc3RlcCxcbiAgICAgIGJhbmR3aWR0aCxcbiAgICAgIHJvdW5kID0gZmFsc2UsXG4gICAgICBwYWRkaW5nSW5uZXIgPSAwLFxuICAgICAgcGFkZGluZ091dGVyID0gMCxcbiAgICAgIGFsaWduID0gMC41O1xuXG4gIGRlbGV0ZSBzY2FsZS51bmtub3duO1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIG4gPSBkb21haW4oKS5sZW5ndGgsXG4gICAgICAgIHJldmVyc2UgPSByYW5nZVsxXSA8IHJhbmdlWzBdLFxuICAgICAgICBzdGFydCA9IHJhbmdlW3JldmVyc2UgLSAwXSxcbiAgICAgICAgc3RvcCA9IHJhbmdlWzEgLSByZXZlcnNlXTtcbiAgICBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgxLCBuIC0gcGFkZGluZ0lubmVyICsgcGFkZGluZ091dGVyICogMik7XG4gICAgaWYgKHJvdW5kKSBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICBzdGFydCArPSAoc3RvcCAtIHN0YXJ0IC0gc3RlcCAqIChuIC0gcGFkZGluZ0lubmVyKSkgKiBhbGlnbjtcbiAgICBiYW5kd2lkdGggPSBzdGVwICogKDEgLSBwYWRkaW5nSW5uZXIpO1xuICAgIGlmIChyb3VuZCkgc3RhcnQgPSBNYXRoLnJvdW5kKHN0YXJ0KSwgYmFuZHdpZHRoID0gTWF0aC5yb3VuZChiYW5kd2lkdGgpO1xuICAgIHZhciB2YWx1ZXMgPSBzZXF1ZW5jZShuKS5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gc3RhcnQgKyBzdGVwICogaTsgfSk7XG4gICAgcmV0dXJuIG9yZGluYWxSYW5nZShyZXZlcnNlID8gdmFsdWVzLnJldmVyc2UoKSA6IHZhbHVlcyk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBbK19bMF0sICtfWzFdXSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gcmFuZ2UgPSBbK19bMF0sICtfWzFdXSwgcm91bmQgPSB0cnVlLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuYmFuZHdpZHRoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmR3aWR0aDtcbiAgfTtcblxuICBzY2FsZS5zdGVwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHN0ZXA7XG4gIH07XG5cbiAgc2NhbGUucm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIV8sIHJlc2NhbGUoKSkgOiByb3VuZDtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWluKDEsIHBhZGRpbmdPdXRlciA9ICtfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgXyksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ091dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdPdXRlciA9ICtfLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKGRvbWFpbigpLCByYW5nZSlcbiAgICAgICAgLnJvdW5kKHJvdW5kKVxuICAgICAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdJbm5lcilcbiAgICAgICAgLnBhZGRpbmdPdXRlcihwYWRkaW5nT3V0ZXIpXG4gICAgICAgIC5hbGlnbihhbGlnbik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShyZXNjYWxlKCksIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHBvaW50aXNoKHNjYWxlKSB7XG4gIHZhciBjb3B5ID0gc2NhbGUuY29weTtcblxuICBzY2FsZS5wYWRkaW5nID0gc2NhbGUucGFkZGluZ091dGVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ0lubmVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ091dGVyO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcG9pbnRpc2goY29weSgpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludCgpIHtcbiAgcmV0dXJuIHBvaW50aXNoKGJhbmQuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/band.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/constant.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-scale/src/constant.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\"] = (function(x) {\n  return function() {\n    return x;\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcz80ZGYxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/constant.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/continuous.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-scale/src/continuous.js ***!
  \*************************************************/
/*! exports provided: identity, copy, transformer, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"identity\", function() { return identity; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"copy\", function() { return copy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"transformer\", function() { return transformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return continuous; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ \"./node_modules/d3-interpolate/src/index.js\");\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./array */ \"./node_modules/d3-scale/src/array.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constant */ \"./node_modules/d3-scale/src/constant.js\");\n/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number */ \"./node_modules/d3-scale/src/number.js\");\n\n\n\n\n\n\nvar unit = [0, 1];\n\nfunction identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : Object(_constant__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n  var a = domain[0], b = domain[domain.length - 1], t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"bisect\"])(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nfunction copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nfunction transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_1__[\"interpolate\"],\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolate__WEBPACK_IMPORTED_MODULE_1__[\"interpolateNumber\"])))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_2__[\"map\"].call(_, _number__WEBPACK_IMPORTED_MODULE_4__[\"default\"]), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_2__[\"slice\"].call(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = _array__WEBPACK_IMPORTED_MODULE_2__[\"slice\"].call(_), interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_1__[\"interpolateRound\"], rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nfunction continuous(transform, untransform) {\n  return transformer()(transform, untransform);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanM/ZTk4MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7bWFwLCBzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxudmFyIHVuaXQgPSBbMCwgMV07XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGlzTmFOKGIpID8gTmFOIDogMC41KTtcbn1cblxuZnVuY3Rpb24gY2xhbXBlcihkb21haW4pIHtcbiAgdmFyIGEgPSBkb21haW5bMF0sIGIgPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdLCB0O1xuICBpZiAoYSA+IGIpIHQgPSBhLCBhID0gYiwgYiA9IHQ7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB4KSk7IH07XG59XG5cbi8vIG5vcm1hbGl6ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByYW5nZSB2YWx1ZSB4IGluIFthLGJdLlxuZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gbm9ybWFsaXplKGQxLCBkMCksIHIwID0gaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IG5vcm1hbGl6ZShkMCwgZDEpLCByMCA9IGludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGogPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpIC0gMSxcbiAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICByID0gbmV3IEFycmF5KGopLFxuICAgICAgaSA9IC0xO1xuXG4gIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICBpZiAoZG9tYWluW2pdIDwgZG9tYWluWzBdKSB7XG4gICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gIH1cblxuICB3aGlsZSAoKytpIDwgaikge1xuICAgIGRbaV0gPSBub3JtYWxpemUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gaW50ZXJwb2xhdGUocmFuZ2VbaV0sIHJhbmdlW2kgKyAxXSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHZhciBpID0gYmlzZWN0KGRvbWFpbiwgeCwgMSwgaikgLSAxO1xuICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0XG4gICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgIC5yYW5nZShzb3VyY2UucmFuZ2UoKSlcbiAgICAgIC5pbnRlcnBvbGF0ZShzb3VyY2UuaW50ZXJwb2xhdGUoKSlcbiAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSlcbiAgICAgIC51bmtub3duKHNvdXJjZS51bmtub3duKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXIoKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdW50cmFuc2Zvcm0sXG4gICAgICB1bmtub3duLFxuICAgICAgY2xhbXAgPSBpZGVudGl0eSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgcGllY2V3aXNlID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSA+IDIgPyBwb2x5bWFwIDogYmltYXA7XG4gICAgb3V0cHV0ID0gaW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gbWFwLmNhbGwoXywgbnVtYmVyKSwgY2xhbXAgPT09IGlkZW50aXR5IHx8IChjbGFtcCA9IGNsYW1wZXIoZG9tYWluKSksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gc2xpY2UuY2FsbChfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSBfID8gY2xhbXBlcihkb21haW4pIDogaWRlbnRpdHksIHNjYWxlKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXModHJhbnNmb3JtLCB1bnRyYW5zZm9ybSkge1xuICByZXR1cm4gdHJhbnNmb3JtZXIoKSh0cmFuc2Zvcm0sIHVudHJhbnNmb3JtKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/continuous.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/diverging.js":
/*!************************************************!*\
  !*** ./node_modules/d3-scale/src/diverging.js ***!
  \************************************************/
/*! exports provided: default, divergingLog, divergingSymlog, divergingPow, divergingSqrt */
/***/ (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 diverging; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"divergingLog\", function() { return divergingLog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"divergingSymlog\", function() { return divergingSymlog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"divergingPow\", function() { return divergingPow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"divergingSqrt\", function() { return divergingSqrt; });\n/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous */ \"./node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ \"./node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ \"./node_modules/d3-scale/src/log.js\");\n/* harmony import */ var _sequential__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sequential */ \"./node_modules/d3-scale/src/sequential.js\");\n/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./symlog */ \"./node_modules/d3-scale/src/symlog.js\");\n/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pow */ \"./node_modules/d3-scale/src/pow.js\");\n\n\n\n\n\n\n\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = _continuous__WEBPACK_IMPORTED_MODULE_0__[\"identity\"],\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n    return scale;\n  };\n}\n\nfunction diverging() {\n  var scale = Object(_linear__WEBPACK_IMPORTED_MODULE_2__[\"linearish\"])(transformer()(_continuous__WEBPACK_IMPORTED_MODULE_0__[\"identity\"]));\n\n  scale.copy = function() {\n    return Object(_sequential__WEBPACK_IMPORTED_MODULE_4__[\"copy\"])(scale, diverging());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initInterpolator\"].apply(scale, arguments);\n}\n\nfunction divergingLog() {\n  var scale = Object(_log__WEBPACK_IMPORTED_MODULE_3__[\"loggish\"])(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return Object(_sequential__WEBPACK_IMPORTED_MODULE_4__[\"copy\"])(scale, divergingLog()).base(scale.base());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initInterpolator\"].apply(scale, arguments);\n}\n\nfunction divergingSymlog() {\n  var scale = Object(_symlog__WEBPACK_IMPORTED_MODULE_5__[\"symlogish\"])(transformer());\n\n  scale.copy = function() {\n    return Object(_sequential__WEBPACK_IMPORTED_MODULE_4__[\"copy\"])(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initInterpolator\"].apply(scale, arguments);\n}\n\nfunction divergingPow() {\n  var scale = Object(_pow__WEBPACK_IMPORTED_MODULE_6__[\"powish\"])(transformer());\n\n  scale.copy = function() {\n    return Object(_sequential__WEBPACK_IMPORTED_MODULE_4__[\"copy\"])(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initInterpolator\"].apply(scale, arguments);\n}\n\nfunction divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2RpdmVyZ2luZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvZGl2ZXJnaW5nLmpzPzM4ZmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0SW50ZXJwb2xhdG9yfSBmcm9tIFwiLi9pbml0XCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5pbXBvcnQge2xvZ2dpc2h9IGZyb20gXCIuL2xvZ1wiO1xuaW1wb3J0IHtjb3B5fSBmcm9tIFwiLi9zZXF1ZW50aWFsXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAwLjUsXG4gICAgICB4MiA9IDEsXG4gICAgICB0MCxcbiAgICAgIHQxLFxuICAgICAgdDIsXG4gICAgICBrMTAsXG4gICAgICBrMjEsXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGNsYW1wID0gZmFsc2UsXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAoeCA9IDAuNSArICgoeCA9ICt0cmFuc2Zvcm0oeCkpIC0gdDEpICogKHggPCB0MSA/IGsxMCA6IGsyMSksIGludGVycG9sYXRvcihjbGFtcCA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHgpKSA6IHgpKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0MCA9IHRyYW5zZm9ybSh4MCA9ICtfWzBdKSwgdDEgPSB0cmFuc2Zvcm0oeDEgPSArX1sxXSksIHQyID0gdHJhbnNmb3JtKHgyID0gK19bMl0pLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMC41IC8gKHQxIC0gdDApLCBrMjEgPSB0MSA9PT0gdDIgPyAwIDogMC41IC8gKHQyIC0gdDEpLCBzY2FsZSkgOiBbeDAsIHgxLCB4Ml07XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHNjYWxlKSA6IGNsYW1wO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRyYW5zZm9ybSA9IHQsIHQwID0gdCh4MCksIHQxID0gdCh4MSksIHQyID0gdCh4MiksIGsxMCA9IHQwID09PSB0MSA/IDAgOiAwLjUgLyAodDEgLSB0MCksIGsyMSA9IHQxID09PSB0MiA/IDAgOiAwLjUgLyAodDIgLSB0MSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXZlcmdpbmcoKSB7XG4gIHZhciBzY2FsZSA9IGxpbmVhcmlzaCh0cmFuc2Zvcm1lcigpKGlkZW50aXR5KSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmcoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdMb2coKSB7XG4gIHZhciBzY2FsZSA9IGxvZ2dpc2godHJhbnNmb3JtZXIoKSkuZG9tYWluKFswLjEsIDEsIDEwXSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmdMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2ZXJnaW5nU3ltbG9nKCkge1xuICB2YXIgc2NhbGUgPSBzeW1sb2dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmdTeW1sb2coKSkuY29uc3RhbnQoc2NhbGUuY29uc3RhbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGRpdmVyZ2luZ1BvdygpKS5leHBvbmVudChzY2FsZS5leHBvbmVudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmVyZ2luZ1NxcnQoKSB7XG4gIHJldHVybiBkaXZlcmdpbmdQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/diverging.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/identity.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-scale/src/identity.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 identity; });\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ \"./node_modules/d3-scale/src/array.js\");\n/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./linear */ \"./node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./number */ \"./node_modules/d3-scale/src/number.js\");\n\n\n\n\nfunction identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_0__[\"map\"].call(_, _number__WEBPACK_IMPORTED_MODULE_2__[\"default\"]), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? _array__WEBPACK_IMPORTED_MODULE_0__[\"map\"].call(domain, _number__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) : [0, 1];\n\n  return Object(_linear__WEBPACK_IMPORTED_MODULE_1__[\"linearish\"])(scale);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2lkZW50aXR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pZGVudGl0eS5qcz9kNGUyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWFwfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtsaW5lYXJpc2h9IGZyb20gXCIuL2xpbmVhclwiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaWRlbnRpdHkoZG9tYWluKSB7XG4gIHZhciB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiB4O1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gc2NhbGU7XG5cbiAgc2NhbGUuZG9tYWluID0gc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gbWFwLmNhbGwoXywgbnVtYmVyKSwgc2NhbGUpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5KGRvbWFpbikudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICBkb21haW4gPSBhcmd1bWVudHMubGVuZ3RoID8gbWFwLmNhbGwoZG9tYWluLCBudW1iZXIpIDogWzAsIDFdO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/identity.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/index.js":
/*!********************************************!*\
  !*** ./node_modules/d3-scale/src/index.js ***!
  \********************************************/
/*! exports provided: scaleBand, scalePoint, scaleIdentity, scaleLinear, scaleLog, scaleSymlog, scaleOrdinal, scaleImplicit, scalePow, scaleSqrt, scaleQuantile, scaleQuantize, scaleThreshold, scaleTime, scaleUtc, scaleSequential, scaleSequentialLog, scaleSequentialPow, scaleSequentialSqrt, scaleSequentialSymlog, scaleSequentialQuantile, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSqrt, scaleDivergingSymlog, tickFormat */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _band__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./band */ \"./node_modules/d3-scale/src/band.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleBand\", function() { return _band__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scalePoint\", function() { return _band__WEBPACK_IMPORTED_MODULE_0__[\"point\"]; });\n\n/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity */ \"./node_modules/d3-scale/src/identity.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleIdentity\", function() { return _identity__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ \"./node_modules/d3-scale/src/linear.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleLinear\", function() { return _linear__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ \"./node_modules/d3-scale/src/log.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleLog\", function() { return _log__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symlog */ \"./node_modules/d3-scale/src/symlog.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleSymlog\", function() { return _symlog__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _ordinal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ordinal */ \"./node_modules/d3-scale/src/ordinal.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleOrdinal\", function() { return _ordinal__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleImplicit\", function() { return _ordinal__WEBPACK_IMPORTED_MODULE_5__[\"implicit\"]; });\n\n/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pow */ \"./node_modules/d3-scale/src/pow.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scalePow\", function() { return _pow__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleSqrt\", function() { return _pow__WEBPACK_IMPORTED_MODULE_6__[\"sqrt\"]; });\n\n/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./quantile */ \"./node_modules/d3-scale/src/quantile.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleQuantile\", function() { return _quantile__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _quantize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./quantize */ \"./node_modules/d3-scale/src/quantize.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleQuantize\", function() { return _quantize__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _threshold__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./threshold */ \"./node_modules/d3-scale/src/threshold.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleThreshold\", function() { return _threshold__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _time__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./time */ \"./node_modules/d3-scale/src/time.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleTime\", function() { return _time__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _utcTime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utcTime */ \"./node_modules/d3-scale/src/utcTime.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleUtc\", function() { return _utcTime__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _sequential__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./sequential */ \"./node_modules/d3-scale/src/sequential.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleSequential\", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleSequentialLog\", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__[\"sequentialLog\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleSequentialPow\", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__[\"sequentialPow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleSequentialSqrt\", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__[\"sequentialSqrt\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleSequentialSymlog\", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__[\"sequentialSymlog\"]; });\n\n/* harmony import */ var _sequentialQuantile__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./sequentialQuantile */ \"./node_modules/d3-scale/src/sequentialQuantile.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleSequentialQuantile\", function() { return _sequentialQuantile__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _diverging__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diverging */ \"./node_modules/d3-scale/src/diverging.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleDiverging\", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleDivergingLog\", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__[\"divergingLog\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleDivergingPow\", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__[\"divergingPow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleDivergingSqrt\", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__[\"divergingSqrt\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"scaleDivergingSymlog\", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__[\"divergingSymlog\"]; });\n\n/* harmony import */ var _tickFormat__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./tickFormat */ \"./node_modules/d3-scale/src/tickFormat.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"tickFormat\", function() { return _tickFormat__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\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\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbmRleC5qcz9jZTI0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVCYW5kLFxuICBwb2ludCBhcyBzY2FsZVBvaW50XG59IGZyb20gXCIuL2JhbmRcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUlkZW50aXR5XG59IGZyb20gXCIuL2lkZW50aXR5XCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMb2dcbn0gZnJvbSBcIi4vbG9nXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTeW1sb2dcbn0gZnJvbSBcIi4vc3ltbG9nXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVPcmRpbmFsLFxuICBpbXBsaWNpdCBhcyBzY2FsZUltcGxpY2l0XG59IGZyb20gXCIuL29yZGluYWxcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVBvdyxcbiAgc3FydCBhcyBzY2FsZVNxcnRcbn0gZnJvbSBcIi4vcG93XCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVRdWFudGlsZVxufSBmcm9tIFwiLi9xdWFudGlsZVwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpemVcbn0gZnJvbSBcIi4vcXVhbnRpemVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRocmVzaG9sZFxufSBmcm9tIFwiLi90aHJlc2hvbGRcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRpbWVcbn0gZnJvbSBcIi4vdGltZVwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVXRjXG59IGZyb20gXCIuL3V0Y1RpbWVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWwsXG4gIHNlcXVlbnRpYWxMb2cgYXMgc2NhbGVTZXF1ZW50aWFsTG9nLFxuICBzZXF1ZW50aWFsUG93IGFzIHNjYWxlU2VxdWVudGlhbFBvdyxcbiAgc2VxdWVudGlhbFNxcnQgYXMgc2NhbGVTZXF1ZW50aWFsU3FydCxcbiAgc2VxdWVudGlhbFN5bWxvZyBhcyBzY2FsZVNlcXVlbnRpYWxTeW1sb2dcbn0gZnJvbSBcIi4vc2VxdWVudGlhbFwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU2VxdWVudGlhbFF1YW50aWxlXG59IGZyb20gXCIuL3NlcXVlbnRpYWxRdWFudGlsZVwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlRGl2ZXJnaW5nLFxuICBkaXZlcmdpbmdMb2cgYXMgc2NhbGVEaXZlcmdpbmdMb2csXG4gIGRpdmVyZ2luZ1BvdyBhcyBzY2FsZURpdmVyZ2luZ1BvdyxcbiAgZGl2ZXJnaW5nU3FydCBhcyBzY2FsZURpdmVyZ2luZ1NxcnQsXG4gIGRpdmVyZ2luZ1N5bWxvZyBhcyBzY2FsZURpdmVyZ2luZ1N5bWxvZ1xufSBmcm9tIFwiLi9kaXZlcmdpbmdcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aWNrRm9ybWF0XG59IGZyb20gXCIuL3RpY2tGb3JtYXRcIjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQU9BO0FBQ0E7QUFHQTtBQUNBO0FBT0E7QUFDQTtBQUdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/init.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-scale/src/init.js ***!
  \*******************************************/
/*! exports provided: initRange, initInterpolator */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initRange\", function() { return initRange; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initInterpolator\", function() { return initInterpolator; });\nfunction initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nfunction initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.interpolator(domain); break;\n    default: this.interpolator(interpolator).domain(domain); break;\n  }\n  return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanM/ZDQ4YyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMTogdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/init.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/linear.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-scale/src/linear.js ***!
  \*********************************************/
/*! exports provided: linearish, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"linearish\", function() { return linearish; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return linear; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ \"./node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _tickFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickFormat */ \"./node_modules/d3-scale/src/tickFormat.js\");\n\n\n\n\n\nfunction linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"ticks\"])(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return Object(_tickFormat__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain(),\n        i0 = 0,\n        i1 = d.length - 1,\n        start = d[i0],\n        stop = d[i1],\n        step;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n\n    step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"tickIncrement\"])(start, stop, count);\n\n    if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n      step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"tickIncrement\"])(start, stop, count);\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n      step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"tickIncrement\"])(start, stop, count);\n    }\n\n    if (step > 0) {\n      d[i0] = Math.floor(start / step) * step;\n      d[i1] = Math.ceil(stop / step) * step;\n      domain(d);\n    } else if (step < 0) {\n      d[i0] = Math.ceil(start * step) / step;\n      d[i1] = Math.floor(stop * step) / step;\n      domain(d);\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nfunction linear() {\n  var scale = Object(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"identity\"], _continuous__WEBPACK_IMPORTED_MODULE_1__[\"identity\"]);\n\n  scale.copy = function() {\n    return Object(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"copy\"])(scale, linear());\n  };\n\n  _init__WEBPACK_IMPORTED_MODULE_2__[\"initRange\"].apply(scale, arguments);\n\n  return linearish(scale);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzPzU0OGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHksIGlkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuaW1wb3J0IHRpY2tGb3JtYXQgZnJvbSBcIi4vdGlja0Zvcm1hdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbGluZWFyaXNoKHNjYWxlKSB7XG4gIHZhciBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja0Zvcm1hdChkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50LCBzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDEwO1xuXG4gICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgaTAgPSAwLFxuICAgICAgICBpMSA9IGQubGVuZ3RoIC0gMSxcbiAgICAgICAgc3RhcnQgPSBkW2kwXSxcbiAgICAgICAgc3RvcCA9IGRbaTFdLFxuICAgICAgICBzdGVwO1xuXG4gICAgaWYgKHN0b3AgPCBzdGFydCkge1xuICAgICAgc3RlcCA9IHN0YXJ0LCBzdGFydCA9IHN0b3AsIHN0b3AgPSBzdGVwO1xuICAgICAgc3RlcCA9IGkwLCBpMCA9IGkxLCBpMSA9IHN0ZXA7XG4gICAgfVxuXG4gICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcblxuICAgIGlmIChzdGVwID4gMCkge1xuICAgICAgc3RhcnQgPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIH1cblxuICAgIGlmIChzdGVwID4gMCkge1xuICAgICAgZFtpMF0gPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgZFtpMV0gPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIGRvbWFpbihkKTtcbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICBkW2kwXSA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIGRbaTFdID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgZG9tYWluKGQpO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpbmVhcigpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cyhpZGVudGl0eSwgaWRlbnRpdHkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbGluZWFyKCkpO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/linear.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/log.js":
/*!******************************************!*\
  !*** ./node_modules/d3-scale/src/log.js ***!
  \******************************************/
/*! exports provided: loggish, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loggish\", function() { return loggish; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return log; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ \"./node_modules/d3-format/src/index.js\");\n/* harmony import */ var _nice__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nice */ \"./node_modules/d3-scale/src/nice.js\");\n/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./continuous */ \"./node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\n\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n  return function(x) {\n    return -f(-x);\n  };\n}\n\nfunction loggish(transform) {\n  var scale = transform(transformLog, transformExp),\n      domain = scale.domain,\n      base = 10,\n      logs,\n      pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = function(count) {\n    var d = domain(),\n        u = d[0],\n        v = d[d.length - 1],\n        r;\n\n    if (r = v < u) i = u, u = v, v = i;\n\n    var i = logs(u),\n        j = logs(v),\n        p,\n        k,\n        t,\n        n = count == null ? 10 : +count,\n        z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.round(i) - 1, j = Math.round(j) + 1;\n      if (u > 0) for (; i < j; ++i) {\n        for (k = 1, p = pows(i); k < base; ++k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i < j; ++i) {\n        for (k = base - 1, p = pows(i); k >= 1; --k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n    } else {\n      z = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"ticks\"])(i, j, Math.min(j - i, n)).map(pows);\n    }\n\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n    if (typeof specifier !== \"function\") specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"format\"])(specifier);\n    if (count === Infinity) return specifier;\n    if (count == null) count = 10;\n    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return function(d) {\n      var i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = function() {\n    return domain(Object(_nice__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(domain(), {\n      floor: function(x) { return pows(Math.floor(logs(x))); },\n      ceil: function(x) { return pows(Math.ceil(logs(x))); }\n    }));\n  };\n\n  return scale;\n}\n\nfunction log() {\n  var scale = loggish(Object(_continuous__WEBPACK_IMPORTED_MODULE_3__[\"transformer\"])()).domain([1, 10]);\n\n  scale.copy = function() {\n    return Object(_continuous__WEBPACK_IMPORTED_MODULE_3__[\"copy\"])(scale, log()).base(scale.base());\n  };\n\n  _init__WEBPACK_IMPORTED_MODULE_4__[\"initRange\"].apply(scale, arguments);\n\n  return scale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xvZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbG9nLmpzPzlmNDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0aWNrc30gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2Zvcm1hdH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZVwiO1xuaW1wb3J0IHtjb3B5LCB0cmFuc2Zvcm1lcn0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZnVuY3Rpb24gdHJhbnNmb3JtTG9nKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1FeHAoeCkge1xuICByZXR1cm4gTWF0aC5leHAoeCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxvZ24oeCkge1xuICByZXR1cm4gLU1hdGgubG9nKC14KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRXhwbih4KSB7XG4gIHJldHVybiAtTWF0aC5leHAoLXgpO1xufVxuXG5mdW5jdGlvbiBwb3cxMCh4KSB7XG4gIHJldHVybiBpc0Zpbml0ZSh4KSA/ICsoXCIxZVwiICsgeCkgOiB4IDwgMCA/IDAgOiB4O1xufVxuXG5mdW5jdGlvbiBwb3dwKGJhc2UpIHtcbiAgcmV0dXJuIGJhc2UgPT09IDEwID8gcG93MTBcbiAgICAgIDogYmFzZSA9PT0gTWF0aC5FID8gTWF0aC5leHBcbiAgICAgIDogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5wb3coYmFzZSwgeCk7IH07XG59XG5cbmZ1bmN0aW9uIGxvZ3AoYmFzZSkge1xuICByZXR1cm4gYmFzZSA9PT0gTWF0aC5FID8gTWF0aC5sb2dcbiAgICAgIDogYmFzZSA9PT0gMTAgJiYgTWF0aC5sb2cxMFxuICAgICAgfHwgYmFzZSA9PT0gMiAmJiBNYXRoLmxvZzJcbiAgICAgIHx8IChiYXNlID0gTWF0aC5sb2coYmFzZSksIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgubG9nKHgpIC8gYmFzZTsgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZmxlY3QoZikge1xuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAtZigteCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dnaXNoKHRyYW5zZm9ybSkge1xuICB2YXIgc2NhbGUgPSB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nLCB0cmFuc2Zvcm1FeHApLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgYmFzZSA9IDEwLFxuICAgICAgbG9ncyxcbiAgICAgIHBvd3M7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICBsb2dzID0gbG9ncChiYXNlKSwgcG93cyA9IHBvd3AoYmFzZSk7XG4gICAgaWYgKGRvbWFpbigpWzBdIDwgMCkge1xuICAgICAgbG9ncyA9IHJlZmxlY3QobG9ncyksIHBvd3MgPSByZWZsZWN0KHBvd3MpO1xuICAgICAgdHJhbnNmb3JtKHRyYW5zZm9ybUxvZ24sIHRyYW5zZm9ybUV4cG4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nLCB0cmFuc2Zvcm1FeHApO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBzY2FsZS5iYXNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGJhc2UgPSArXywgcmVzY2FsZSgpKSA6IGJhc2U7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbihfKSwgcmVzY2FsZSgpKSA6IGRvbWFpbigpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICB1ID0gZFswXSxcbiAgICAgICAgdiA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgcjtcblxuICAgIGlmIChyID0gdiA8IHUpIGkgPSB1LCB1ID0gdiwgdiA9IGk7XG5cbiAgICB2YXIgaSA9IGxvZ3ModSksXG4gICAgICAgIGogPSBsb2dzKHYpLFxuICAgICAgICBwLFxuICAgICAgICBrLFxuICAgICAgICB0LFxuICAgICAgICBuID0gY291bnQgPT0gbnVsbCA/IDEwIDogK2NvdW50LFxuICAgICAgICB6ID0gW107XG5cbiAgICBpZiAoIShiYXNlICUgMSkgJiYgaiAtIGkgPCBuKSB7XG4gICAgICBpID0gTWF0aC5yb3VuZChpKSAtIDEsIGogPSBNYXRoLnJvdW5kKGopICsgMTtcbiAgICAgIGlmICh1ID4gMCkgZm9yICg7IGkgPCBqOyArK2kpIHtcbiAgICAgICAgZm9yIChrID0gMSwgcCA9IHBvd3MoaSk7IGsgPCBiYXNlOyArK2spIHtcbiAgICAgICAgICB0ID0gcCAqIGs7XG4gICAgICAgICAgaWYgKHQgPCB1KSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZvciAoOyBpIDwgajsgKytpKSB7XG4gICAgICAgIGZvciAoayA9IGJhc2UgLSAxLCBwID0gcG93cyhpKTsgayA+PSAxOyAtLWspIHtcbiAgICAgICAgICB0ID0gcCAqIGs7XG4gICAgICAgICAgaWYgKHQgPCB1KSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB6ID0gdGlja3MoaSwgaiwgTWF0aC5taW4oaiAtIGksIG4pKS5tYXAocG93cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHIgPyB6LnJldmVyc2UoKSA6IHo7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICBpZiAoc3BlY2lmaWVyID09IG51bGwpIHNwZWNpZmllciA9IGJhc2UgPT09IDEwID8gXCIuMGVcIiA6IFwiLFwiO1xuICAgIGlmICh0eXBlb2Ygc3BlY2lmaWVyICE9PSBcImZ1bmN0aW9uXCIpIHNwZWNpZmllciA9IGZvcm1hdChzcGVjaWZpZXIpO1xuICAgIGlmIChjb3VudCA9PT0gSW5maW5pdHkpIHJldHVybiBzcGVjaWZpZXI7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG4gICAgdmFyIGsgPSBNYXRoLm1heCgxLCBiYXNlICogY291bnQgLyBzY2FsZS50aWNrcygpLmxlbmd0aCk7IC8vIFRPRE8gZmFzdCBlc3RpbWF0ZT9cbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgdmFyIGkgPSBkIC8gcG93cyhNYXRoLnJvdW5kKGxvZ3MoZCkpKTtcbiAgICAgIGlmIChpICogYmFzZSA8IGJhc2UgLSAwLjUpIGkgKj0gYmFzZTtcbiAgICAgIHJldHVybiBpIDw9IGsgPyBzcGVjaWZpZXIoZCkgOiBcIlwiO1xuICAgIH07XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb21haW4obmljZShkb21haW4oKSwge1xuICAgICAgZmxvb3I6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHBvd3MoTWF0aC5mbG9vcihsb2dzKHgpKSk7IH0sXG4gICAgICBjZWlsOiBmdW5jdGlvbih4KSB7IHJldHVybiBwb3dzKE1hdGguY2VpbChsb2dzKHgpKSk7IH1cbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBzY2FsZSA9IGxvZ2dpc2godHJhbnNmb3JtZXIoKSkuZG9tYWluKFsxLCAxMF0pO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbG9nKCkpLmJhc2Uoc2NhbGUuYmFzZSgpKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/log.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/nice.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-scale/src/nice.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\"] = (function(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL25pY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL25pY2UuanM/NmRjNiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkb21haW4sIGludGVydmFsKSB7XG4gIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpO1xuXG4gIHZhciBpMCA9IDAsXG4gICAgICBpMSA9IGRvbWFpbi5sZW5ndGggLSAxLFxuICAgICAgeDAgPSBkb21haW5baTBdLFxuICAgICAgeDEgPSBkb21haW5baTFdLFxuICAgICAgdDtcblxuICBpZiAoeDEgPCB4MCkge1xuICAgIHQgPSBpMCwgaTAgPSBpMSwgaTEgPSB0O1xuICAgIHQgPSB4MCwgeDAgPSB4MSwgeDEgPSB0O1xuICB9XG5cbiAgZG9tYWluW2kwXSA9IGludGVydmFsLmZsb29yKHgwKTtcbiAgZG9tYWluW2kxXSA9IGludGVydmFsLmNlaWwoeDEpO1xuICByZXR1cm4gZG9tYWluO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/nice.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/number.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-scale/src/number.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\"] = (function(x) {\n  return +x;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbnVtYmVyLmpzP2UyNmUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gK3g7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/number.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/ordinal.js":
/*!**********************************************!*\
  !*** ./node_modules/d3-scale/src/ordinal.js ***!
  \**********************************************/
/*! exports provided: implicit, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"implicit\", function() { return implicit; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ordinal; });\n/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-collection */ \"./node_modules/d3-collection/src/index.js\");\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ \"./node_modules/d3-scale/src/array.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\nvar implicit = {name: \"implicit\"};\n\nfunction ordinal() {\n  var index = Object(d3_collection__WEBPACK_IMPORTED_MODULE_0__[\"map\"])(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = Object(d3_collection__WEBPACK_IMPORTED_MODULE_0__[\"map\"])();\n    var i = -1, n = _.length, d, key;\n    while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__[\"slice\"].call(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  _init__WEBPACK_IMPORTED_MODULE_2__[\"initRange\"].apply(scale, arguments);\n\n  return scale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanM/ZGYxOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuXG5leHBvcnQgdmFyIGltcGxpY2l0ID0ge25hbWU6IFwiaW1wbGljaXRcIn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGluYWwoKSB7XG4gIHZhciBpbmRleCA9IG1hcCgpLFxuICAgICAgZG9tYWluID0gW10sXG4gICAgICByYW5nZSA9IFtdLFxuICAgICAgdW5rbm93biA9IGltcGxpY2l0O1xuXG4gIGZ1bmN0aW9uIHNjYWxlKGQpIHtcbiAgICB2YXIga2V5ID0gZCArIFwiXCIsIGkgPSBpbmRleC5nZXQoa2V5KTtcbiAgICBpZiAoIWkpIHtcbiAgICAgIGlmICh1bmtub3duICE9PSBpbXBsaWNpdCkgcmV0dXJuIHVua25vd247XG4gICAgICBpbmRleC5zZXQoa2V5LCBpID0gZG9tYWluLnB1c2goZCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuZ2VbKGkgLSAxKSAlIHJhbmdlLmxlbmd0aF07XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW10sIGluZGV4ID0gbWFwKCk7XG4gICAgdmFyIGkgPSAtMSwgbiA9IF8ubGVuZ3RoLCBkLCBrZXk7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghaW5kZXguaGFzKGtleSA9IChkID0gX1tpXSkgKyBcIlwiKSkgaW5kZXguc2V0KGtleSwgZG9tYWluLnB1c2goZCkpO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIHNjYWxlKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9yZGluYWwoZG9tYWluLCByYW5nZSkudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/ordinal.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/pow.js":
/*!******************************************!*\
  !*** ./node_modules/d3-scale/src/pow.js ***!
  \******************************************/
/*! exports provided: powish, default, sqrt */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"powish\", function() { return powish; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return pow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sqrt\", function() { return sqrt; });\n/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ \"./node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ \"./node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nfunction powish(transform) {\n  var scale = transform(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"identity\"], _continuous__WEBPACK_IMPORTED_MODULE_1__[\"identity\"]),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"identity\"], _continuous__WEBPACK_IMPORTED_MODULE_1__[\"identity\"])\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return Object(_linear__WEBPACK_IMPORTED_MODULE_0__[\"linearish\"])(scale);\n}\n\nfunction pow() {\n  var scale = powish(Object(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"transformer\"])());\n\n  scale.copy = function() {\n    return Object(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"copy\"])(scale, pow()).exponent(scale.exponent());\n  };\n\n  _init__WEBPACK_IMPORTED_MODULE_2__[\"initRange\"].apply(scale, arguments);\n\n  return scale;\n}\n\nfunction sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3Bvdy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcG93LmpzPzc4OWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtsaW5lYXJpc2h9IGZyb20gXCIuL2xpbmVhclwiO1xuaW1wb3J0IHtjb3B5LCBpZGVudGl0eSwgdHJhbnNmb3JtZXJ9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBvdyhleHBvbmVudCkge1xuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4IDwgMCA/IC1NYXRoLnBvdygteCwgZXhwb25lbnQpIDogTWF0aC5wb3coeCwgZXhwb25lbnQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TcXJ0KHgpIHtcbiAgcmV0dXJuIHggPCAwID8gLU1hdGguc3FydCgteCkgOiBNYXRoLnNxcnQoeCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNxdWFyZSh4KSB7XG4gIHJldHVybiB4IDwgMCA/IC14ICogeCA6IHggKiB4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG93aXNoKHRyYW5zZm9ybSkge1xuICB2YXIgc2NhbGUgPSB0cmFuc2Zvcm0oaWRlbnRpdHksIGlkZW50aXR5KSxcbiAgICAgIGV4cG9uZW50ID0gMTtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHJldHVybiBleHBvbmVudCA9PT0gMSA/IHRyYW5zZm9ybShpZGVudGl0eSwgaWRlbnRpdHkpXG4gICAgICAgIDogZXhwb25lbnQgPT09IDAuNSA/IHRyYW5zZm9ybSh0cmFuc2Zvcm1TcXJ0LCB0cmFuc2Zvcm1TcXVhcmUpXG4gICAgICAgIDogdHJhbnNmb3JtKHRyYW5zZm9ybVBvdyhleHBvbmVudCksIHRyYW5zZm9ybVBvdygxIC8gZXhwb25lbnQpKTtcbiAgfVxuXG4gIHNjYWxlLmV4cG9uZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4cG9uZW50ID0gK18sIHJlc2NhbGUoKSkgOiBleHBvbmVudDtcbiAgfTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcG93KCkge1xuICB2YXIgc2NhbGUgPSBwb3dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBwb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNxcnQoKSB7XG4gIHJldHVybiBwb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/pow.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/quantile.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-scale/src/quantile.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 quantile; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ \"./node_modules/d3-scale/src/array.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"quantile\"])(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"bisect\"])(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"ascending\"]);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__[\"slice\"].call(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_2__[\"initRange\"].apply(scale, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3F1YW50aWxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGlsZS5qcz83MjZhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXNjZW5kaW5nLCBiaXNlY3QsIHF1YW50aWxlIGFzIHRocmVzaG9sZH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhbnRpbGUoKSB7XG4gIHZhciBkb21haW4gPSBbXSxcbiAgICAgIHJhbmdlID0gW10sXG4gICAgICB0aHJlc2hvbGRzID0gW10sXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIGkgPSAwLCBuID0gTWF0aC5tYXgoMSwgcmFuZ2UubGVuZ3RoKTtcbiAgICB0aHJlc2hvbGRzID0gbmV3IEFycmF5KG4gLSAxKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGhyZXNob2xkc1tpIC0gMV0gPSB0aHJlc2hvbGQoZG9tYWluLCBpIC8gbik7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IHJhbmdlW2Jpc2VjdCh0aHJlc2hvbGRzLCB4KV07XG4gIH1cblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBpIDwgMCA/IFtOYU4sIE5hTl0gOiBbXG4gICAgICBpID4gMCA/IHRocmVzaG9sZHNbaSAtIDFdIDogZG9tYWluWzBdLFxuICAgICAgaSA8IHRocmVzaG9sZHMubGVuZ3RoID8gdGhyZXNob2xkc1tpXSA6IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV1cbiAgICBdO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IF8ubGVuZ3RoLCBkOyBpIDwgbjsgKytpKSBpZiAoZCA9IF9baV0sIGQgIT0gbnVsbCAmJiAhaXNOYU4oZCA9ICtkKSkgZG9tYWluLnB1c2goZCk7XG4gICAgZG9tYWluLnNvcnQoYXNjZW5kaW5nKTtcbiAgICByZXR1cm4gcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5xdWFudGlsZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhyZXNob2xkcy5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcXVhbnRpbGUoKVxuICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/quantile.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/quantize.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-scale/src/quantize.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 quantize; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ \"./node_modules/d3-scale/src/array.js\");\n/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ \"./node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\n\nfunction quantize() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x <= x ? range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"bisect\"])(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = _array__WEBPACK_IMPORTED_MODULE_1__[\"slice\"].call(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_3__[\"initRange\"].apply(Object(_linear__WEBPACK_IMPORTED_MODULE_2__[\"linearish\"])(scale), arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3F1YW50aXplLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGl6ZS5qcz83ZjgwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFudGl6ZSgpIHtcbiAgdmFyIHgwID0gMCxcbiAgICAgIHgxID0gMSxcbiAgICAgIG4gPSAxLFxuICAgICAgZG9tYWluID0gWzAuNV0sXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4IDw9IHggPyByYW5nZVtiaXNlY3QoZG9tYWluLCB4LCAwLCBuKV0gOiB1bmtub3duO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgaSA9IC0xO1xuICAgIGRvbWFpbiA9IG5ldyBBcnJheShuKTtcbiAgICB3aGlsZSAoKytpIDwgbikgZG9tYWluW2ldID0gKChpICsgMSkgKiB4MSAtIChpIC0gbikgKiB4MCkgLyAobiArIDEpO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9ICtfWzBdLCB4MSA9ICtfWzFdLCByZXNjYWxlKCkpIDogW3gwLCB4MV07XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobiA9IChyYW5nZSA9IHNsaWNlLmNhbGwoXykpLmxlbmd0aCAtIDEsIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmludmVydEV4dGVudCA9IGZ1bmN0aW9uKHkpIHtcbiAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgcmV0dXJuIGkgPCAwID8gW05hTiwgTmFOXVxuICAgICAgICA6IGkgPCAxID8gW3gwLCBkb21haW5bMF1dXG4gICAgICAgIDogaSA+PSBuID8gW2RvbWFpbltuIC0gMV0sIHgxXVxuICAgICAgICA6IFtkb21haW5baSAtIDFdLCBkb21haW5baV1dO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnRocmVzaG9sZHMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBxdWFudGl6ZSgpXG4gICAgICAgIC5kb21haW4oW3gwLCB4MV0pXG4gICAgICAgIC5yYW5nZShyYW5nZSlcbiAgICAgICAgLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShsaW5lYXJpc2goc2NhbGUpLCBhcmd1bWVudHMpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/quantize.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/sequential.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-scale/src/sequential.js ***!
  \*************************************************/
/*! exports provided: copy, default, sequentialLog, sequentialSymlog, sequentialPow, sequentialSqrt */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"copy\", function() { return copy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return sequential; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sequentialLog\", function() { return sequentialLog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sequentialSymlog\", function() { return sequentialSymlog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sequentialPow\", function() { return sequentialPow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sequentialSqrt\", function() { return sequentialSqrt; });\n/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous */ \"./node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ \"./node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ \"./node_modules/d3-scale/src/log.js\");\n/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symlog */ \"./node_modules/d3-scale/src/symlog.js\");\n/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pow */ \"./node_modules/d3-scale/src/pow.js\");\n\n\n\n\n\n\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = _continuous__WEBPACK_IMPORTED_MODULE_0__[\"identity\"],\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nfunction copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nfunction sequential() {\n  var scale = Object(_linear__WEBPACK_IMPORTED_MODULE_2__[\"linearish\"])(transformer()(_continuous__WEBPACK_IMPORTED_MODULE_0__[\"identity\"]));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initInterpolator\"].apply(scale, arguments);\n}\n\nfunction sequentialLog() {\n  var scale = Object(_log__WEBPACK_IMPORTED_MODULE_3__[\"loggish\"])(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initInterpolator\"].apply(scale, arguments);\n}\n\nfunction sequentialSymlog() {\n  var scale = Object(_symlog__WEBPACK_IMPORTED_MODULE_4__[\"symlogish\"])(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initInterpolator\"].apply(scale, arguments);\n}\n\nfunction sequentialPow() {\n  var scale = Object(_pow__WEBPACK_IMPORTED_MODULE_5__[\"powish\"])(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_1__[\"initInterpolator\"].apply(scale, arguments);\n}\n\nfunction sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWwuanM/Y2U2YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7bG9nZ2lzaH0gZnJvbSBcIi4vbG9nXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgdDAsXG4gICAgICB0MSxcbiAgICAgIGsxMCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGludGVycG9sYXRvciA9IGlkZW50aXR5LFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IGludGVycG9sYXRvcihrMTAgPT09IDAgPyAwLjUgOiAoeCA9ICh0cmFuc2Zvcm0oeCkgLSB0MCkgKiBrMTAsIGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeCkpIDogeCkpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHQwID0gdHJhbnNmb3JtKHgwID0gK19bMF0pLCB0MSA9IHRyYW5zZm9ybSh4MSA9ICtfWzFdKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDEgLyAodDEgLSB0MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB0MCA9IHQoeDApLCB0MSA9IHQoeDEpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMSAvICh0MSAtIHQwKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLmludGVycG9sYXRvcihzb3VyY2UuaW50ZXJwb2xhdG9yKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbCgpIHtcbiAgdmFyIHNjYWxlID0gbGluZWFyaXNoKHRyYW5zZm9ybWVyKCkoaWRlbnRpdHkpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWwoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsTG9nKCkge1xuICB2YXIgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMSwgMTBdKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbFN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc2VxdWVudGlhbFN5bWxvZygpKS5jb25zdGFudChzY2FsZS5jb25zdGFudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbnRpYWxQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxQb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsU3FydCgpIHtcbiAgcmV0dXJuIHNlcXVlbnRpYWxQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/sequential.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/sequentialQuantile.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-scale/src/sequentialQuantile.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 sequentialQuantile; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ \"./node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction sequentialQuantile() {\n  var domain = [],\n      interpolator = _continuous__WEBPACK_IMPORTED_MODULE_1__[\"identity\"];\n\n  function scale(x) {\n    if (!isNaN(x = +x)) return interpolator((Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"bisect\"])(domain, x) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"ascending\"]);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_2__[\"initInterpolator\"].apply(scale, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWxRdWFudGlsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc2VxdWVudGlhbFF1YW50aWxlLmpzPzA3ZmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthc2NlbmRpbmcsIGJpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbFF1YW50aWxlKCkge1xuICB2YXIgZG9tYWluID0gW10sXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgaWYgKCFpc05hTih4ID0gK3gpKSByZXR1cm4gaW50ZXJwb2xhdG9yKChiaXNlY3QoZG9tYWluLCB4KSAtIDEpIC8gKGRvbWFpbi5sZW5ndGggLSAxKSk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBfLmxlbmd0aCwgZDsgaSA8IG47ICsraSkgaWYgKGQgPSBfW2ldLCBkICE9IG51bGwgJiYgIWlzTmFOKGQgPSArZCkpIGRvbWFpbi5wdXNoKGQpO1xuICAgIGRvbWFpbi5zb3J0KGFzY2VuZGluZyk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXF1ZW50aWFsUXVhbnRpbGUoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/sequentialQuantile.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/symlog.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-scale/src/symlog.js ***!
  \*********************************************/
/*! exports provided: symlogish, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"symlogish\", function() { return symlogish; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return symlog; });\n/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ \"./node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ \"./node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nfunction symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return Object(_linear__WEBPACK_IMPORTED_MODULE_0__[\"linearish\"])(scale);\n}\n\nfunction symlog() {\n  var scale = symlogish(Object(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"transformer\"])());\n\n  scale.copy = function() {\n    return Object(_continuous__WEBPACK_IMPORTED_MODULE_1__[\"copy\"])(scale, symlog()).constant(scale.constant());\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_2__[\"initRange\"].apply(scale, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3N5bWxvZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc3ltbG9nLmpzP2MwMmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtsaW5lYXJpc2h9IGZyb20gXCIuL2xpbmVhclwiO1xuaW1wb3J0IHtjb3B5LCB0cmFuc2Zvcm1lcn0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZnVuY3Rpb24gdHJhbnNmb3JtU3ltbG9nKGMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gTWF0aC5zaWduKHgpICogTWF0aC5sb2cxcChNYXRoLmFicyh4IC8gYykpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TeW1leHAoYykge1xuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBNYXRoLnNpZ24oeCkgKiBNYXRoLmV4cG0xKE1hdGguYWJzKHgpKSAqIGM7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzeW1sb2dpc2godHJhbnNmb3JtKSB7XG4gIHZhciBjID0gMSwgc2NhbGUgPSB0cmFuc2Zvcm0odHJhbnNmb3JtU3ltbG9nKGMpLCB0cmFuc2Zvcm1TeW1leHAoYykpO1xuXG4gIHNjYWxlLmNvbnN0YW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdHJhbnNmb3JtKHRyYW5zZm9ybVN5bWxvZyhjID0gK18pLCB0cmFuc2Zvcm1TeW1leHAoYykpIDogYztcbiAgfTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ltbG9nKCkge1xuICB2YXIgc2NhbGUgPSBzeW1sb2dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBzeW1sb2coKSkuY29uc3RhbnQoc2NhbGUuY29uc3RhbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/symlog.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/threshold.js":
/*!************************************************!*\
  !*** ./node_modules/d3-scale/src/threshold.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 threshold; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ \"./node_modules/d3-scale/src/array.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x <= x ? range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"bisect\"])(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_1__[\"slice\"].call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__[\"slice\"].call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return _init__WEBPACK_IMPORTED_MODULE_2__[\"initRange\"].apply(scale, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RocmVzaG9sZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGhyZXNob2xkLmpzPzZiMGYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocmVzaG9sZCgpIHtcbiAgdmFyIGRvbWFpbiA9IFswLjVdLFxuICAgICAgcmFuZ2UgPSBbMCwgMV0sXG4gICAgICB1bmtub3duLFxuICAgICAgbiA9IDE7XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4IDw9IHggPyByYW5nZVtiaXNlY3QoZG9tYWluLCB4LCAwLCBuKV0gOiB1bmtub3duO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IHNsaWNlLmNhbGwoXyksIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGggLSAxKSwgc2NhbGUpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoIC0gMSksIHNjYWxlKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUuaW52ZXJ0RXh0ZW50ID0gZnVuY3Rpb24oeSkge1xuICAgIHZhciBpID0gcmFuZ2UuaW5kZXhPZih5KTtcbiAgICByZXR1cm4gW2RvbWFpbltpIC0gMV0sIGRvbWFpbltpXV07XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRocmVzaG9sZCgpXG4gICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/threshold.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/tickFormat.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-scale/src/tickFormat.js ***!
  \*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ \"./node_modules/d3-format/src/index.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(start, stop, count, specifier) {\n  var step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"tickStep\"])(start, stop, count),\n      precision;\n  specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatSpecifier\"])(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"precisionPrefix\"])(step, value))) specifier.precision = precision;\n      return Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatPrefix\"])(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"precisionRound\"])(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"precisionFixed\"])(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"format\"])(specifier);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanM/YjJjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpY2tTdGVwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0LCBmb3JtYXRQcmVmaXgsIGZvcm1hdFNwZWNpZmllciwgcHJlY2lzaW9uRml4ZWQsIHByZWNpc2lvblByZWZpeCwgcHJlY2lzaW9uUm91bmR9IGZyb20gXCJkMy1mb3JtYXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgdmFyIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLFxuICAgICAgcHJlY2lzaW9uO1xuICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyID09IG51bGwgPyBcIixmXCIgOiBzcGVjaWZpZXIpO1xuICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgY2FzZSBcInNcIjoge1xuICAgICAgdmFyIHZhbHVlID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSk7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbjtcbiAgICAgIHJldHVybiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNhc2UgXCJcIjpcbiAgICBjYXNlIFwiZVwiOlxuICAgIGNhc2UgXCJnXCI6XG4gICAgY2FzZSBcInBcIjpcbiAgICBjYXNlIFwiclwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25Sb3VuZChzdGVwLCBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcImVcIik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImZcIjpcbiAgICBjYXNlIFwiJVwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25GaXhlZChzdGVwKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiJVwiKSAqIDI7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvcm1hdChzcGVjaWZpZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/tickFormat.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/time.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-scale/src/time.js ***!
  \*******************************************/
/*! exports provided: calendar, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"calendar\", function() { return calendar; });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-time */ \"./node_modules/d3-time/src/index.js\");\n/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time-format */ \"./node_modules/d3-time-format/src/index.js\");\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./array */ \"./node_modules/d3-scale/src/array.js\");\n/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./continuous */ \"./node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _nice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./nice */ \"./node_modules/d3-scale/src/nice.js\");\n\n\n\n\n\n\n\n\nvar durationSecond = 1000,\n    durationMinute = durationSecond * 60,\n    durationHour = durationMinute * 60,\n    durationDay = durationHour * 24,\n    durationWeek = durationDay * 7,\n    durationMonth = durationDay * 30,\n    durationYear = durationDay * 365;\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n  var scale = Object(_continuous__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_continuous__WEBPACK_IMPORTED_MODULE_4__[\"identity\"], _continuous__WEBPACK_IMPORTED_MODULE_4__[\"identity\"]),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  var tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  function tickInterval(interval, start, stop, step) {\n    if (interval == null) interval = 10;\n\n    // If a desired tick count is specified, pick a reasonable tick interval\n    // based on the extent of the domain and a rough estimate of tick size.\n    // Otherwise, assume interval is already a time interval and use it.\n    if (typeof interval === \"number\") {\n      var target = Math.abs(stop - start) / interval,\n          i = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"bisector\"])(function(i) { return i[2]; }).right(tickIntervals, target);\n      if (i === tickIntervals.length) {\n        step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"tickStep\"])(start / durationYear, stop / durationYear, interval);\n        interval = year;\n      } else if (i) {\n        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n        step = i[1];\n        interval = i[0];\n      } else {\n        step = Math.max(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__[\"tickStep\"])(start, stop, interval), 1);\n        interval = millisecond;\n      }\n    }\n\n    return step == null ? interval : interval.every(step);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(_array__WEBPACK_IMPORTED_MODULE_3__[\"map\"].call(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval, step) {\n    var d = domain(),\n        t0 = d[0],\n        t1 = d[d.length - 1],\n        r = t1 < t0,\n        t;\n    if (r) t = t0, t0 = t1, t1 = t;\n    t = tickInterval(interval, t0, t1, step);\n    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n    return r ? t.reverse() : t;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval, step) {\n    var d = domain();\n    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n        ? domain(Object(_nice__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(d, interval))\n        : scale;\n  };\n\n  scale.copy = function() {\n    return Object(_continuous__WEBPACK_IMPORTED_MODULE_4__[\"copy\"])(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n  };\n\n  return scale;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  return _init__WEBPACK_IMPORTED_MODULE_5__[\"initRange\"].apply(calendar(d3_time__WEBPACK_IMPORTED_MODULE_1__[\"timeYear\"], d3_time__WEBPACK_IMPORTED_MODULE_1__[\"timeMonth\"], d3_time__WEBPACK_IMPORTED_MODULE_1__[\"timeWeek\"], d3_time__WEBPACK_IMPORTED_MODULE_1__[\"timeDay\"], d3_time__WEBPACK_IMPORTED_MODULE_1__[\"timeHour\"], d3_time__WEBPACK_IMPORTED_MODULE_1__[\"timeMinute\"], d3_time__WEBPACK_IMPORTED_MODULE_1__[\"timeSecond\"], d3_time__WEBPACK_IMPORTED_MODULE_1__[\"timeMillisecond\"], d3_time_format__WEBPACK_IMPORTED_MODULE_2__[\"timeFormat\"]).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpbWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpbWUuanM/NDc0OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Jpc2VjdG9yLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3RpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZU1pbGxpc2Vjb25kfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHt0aW1lRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCB7bWFwfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5LCBpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2VcIjtcblxudmFyIGR1cmF0aW9uU2Vjb25kID0gMTAwMCxcbiAgICBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjAsXG4gICAgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MCxcbiAgICBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0LFxuICAgIGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNyxcbiAgICBkdXJhdGlvbk1vbnRoID0gZHVyYXRpb25EYXkgKiAzMCxcbiAgICBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcblxuZnVuY3Rpb24gZGF0ZSh0KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh0KTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlID8gK3QgOiArbmV3IERhdGUoK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLCBmb3JtYXQpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cyhpZGVudGl0eSwgaWRlbnRpdHkpLFxuICAgICAgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0LFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHZhciBmb3JtYXRNaWxsaXNlY29uZCA9IGZvcm1hdChcIi4lTFwiKSxcbiAgICAgIGZvcm1hdFNlY29uZCA9IGZvcm1hdChcIjolU1wiKSxcbiAgICAgIGZvcm1hdE1pbnV0ZSA9IGZvcm1hdChcIiVJOiVNXCIpLFxuICAgICAgZm9ybWF0SG91ciA9IGZvcm1hdChcIiVJICVwXCIpLFxuICAgICAgZm9ybWF0RGF5ID0gZm9ybWF0KFwiJWEgJWRcIiksXG4gICAgICBmb3JtYXRXZWVrID0gZm9ybWF0KFwiJWIgJWRcIiksXG4gICAgICBmb3JtYXRNb250aCA9IGZvcm1hdChcIiVCXCIpLFxuICAgICAgZm9ybWF0WWVhciA9IGZvcm1hdChcIiVZXCIpO1xuXG4gIHZhciB0aWNrSW50ZXJ2YWxzID0gW1xuICAgIFtzZWNvbmQsICAxLCAgICAgIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAgNSwgIDUgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgMTUsIDE1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDMwLCAzMCAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbbWludXRlLCAgMSwgICAgICBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgIDUsICA1ICogZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsIDE1LCAxNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAzMCwgMzAgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgWyAgaG91ciwgIDEsICAgICAgZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsICAzLCAgMyAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgNiwgIDYgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgMTIsIDEyICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgICBkYXksICAxLCAgICAgIGR1cmF0aW9uRGF5ICAgXSxcbiAgICBbICAgZGF5LCAgMiwgIDIgKiBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgd2VlaywgIDEsICAgICAgZHVyYXRpb25XZWVrICBdLFxuICAgIFsgbW9udGgsICAxLCAgICAgIGR1cmF0aW9uTW9udGggXSxcbiAgICBbIG1vbnRoLCAgMywgIDMgKiBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyAgeWVhciwgIDEsICAgICAgZHVyYXRpb25ZZWFyICBdXG4gIF07XG5cbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChkYXRlKSB7XG4gICAgcmV0dXJuIChzZWNvbmQoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWlsbGlzZWNvbmRcbiAgICAgICAgOiBtaW51dGUoZGF0ZSkgPCBkYXRlID8gZm9ybWF0U2Vjb25kXG4gICAgICAgIDogaG91cihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaW51dGVcbiAgICAgICAgOiBkYXkoZGF0ZSkgPCBkYXRlID8gZm9ybWF0SG91clxuICAgICAgICA6IG1vbnRoKGRhdGUpIDwgZGF0ZSA/ICh3ZWVrKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdERheSA6IGZvcm1hdFdlZWspXG4gICAgICAgIDogeWVhcihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNb250aFxuICAgICAgICA6IGZvcm1hdFllYXIpKGRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGlja0ludGVydmFsKGludGVydmFsLCBzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChpbnRlcnZhbCA9PSBudWxsKSBpbnRlcnZhbCA9IDEwO1xuXG4gICAgLy8gSWYgYSBkZXNpcmVkIHRpY2sgY291bnQgaXMgc3BlY2lmaWVkLCBwaWNrIGEgcmVhc29uYWJsZSB0aWNrIGludGVydmFsXG4gICAgLy8gYmFzZWQgb24gdGhlIGV4dGVudCBvZiB0aGUgZG9tYWluIGFuZCBhIHJvdWdoIGVzdGltYXRlIG9mIHRpY2sgc2l6ZS5cbiAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSBpbnRlcnZhbCBpcyBhbHJlYWR5IGEgdGltZSBpbnRlcnZhbCBhbmQgdXNlIGl0LlxuICAgIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gaW50ZXJ2YWwsXG4gICAgICAgICAgaSA9IGJpc2VjdG9yKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGlbMl07IH0pLnJpZ2h0KHRpY2tJbnRlcnZhbHMsIHRhcmdldCk7XG4gICAgICBpZiAoaSA9PT0gdGlja0ludGVydmFscy5sZW5ndGgpIHtcbiAgICAgICAgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0IC8gZHVyYXRpb25ZZWFyLCBzdG9wIC8gZHVyYXRpb25ZZWFyLCBpbnRlcnZhbCk7XG4gICAgICAgIGludGVydmFsID0geWVhcjtcbiAgICAgIH0gZWxzZSBpZiAoaSkge1xuICAgICAgICBpID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgICAgICBzdGVwID0gaVsxXTtcbiAgICAgICAgaW50ZXJ2YWwgPSBpWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcCA9IE1hdGgubWF4KHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBpbnRlcnZhbCksIDEpO1xuICAgICAgICBpbnRlcnZhbCA9IG1pbGxpc2Vjb25kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGVwID09IG51bGwgPyBpbnRlcnZhbCA6IGludGVydmFsLmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpbnZlcnQoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGRvbWFpbihtYXAuY2FsbChfLCBudW1iZXIpKSA6IGRvbWFpbigpLm1hcChkYXRlKTtcbiAgfTtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgdDAgPSBkWzBdLFxuICAgICAgICB0MSA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgciA9IHQxIDwgdDAsXG4gICAgICAgIHQ7XG4gICAgaWYgKHIpIHQgPSB0MCwgdDAgPSB0MSwgdDEgPSB0O1xuICAgIHQgPSB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIHQwLCB0MSwgc3RlcCk7XG4gICAgdCA9IHQgPyB0LnJhbmdlKHQwLCB0MSArIDEpIDogW107IC8vIGluY2x1c2l2ZSBzdG9wXG4gICAgcmV0dXJuIHIgPyB0LnJldmVyc2UoKSA6IHQ7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gKGludGVydmFsID0gdGlja0ludGVydmFsKGludGVydmFsLCBkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIHN0ZXApKVxuICAgICAgICA/IGRvbWFpbihuaWNlKGQsIGludGVydmFsKSlcbiAgICAgICAgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwgZm9ybWF0KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShjYWxlbmRhcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVNaWxsaXNlY29uZCwgdGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyMDAwLCAwLCAxKSwgbmV3IERhdGUoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/time.js\n");

/***/ }),

/***/ "./node_modules/d3-scale/src/utcTime.js":
/*!**********************************************!*\
  !*** ./node_modules/d3-scale/src/utcTime.js ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./time */ \"./node_modules/d3-scale/src/time.js\");\n/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-time-format */ \"./node_modules/d3-time-format/src/index.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time */ \"./node_modules/d3-time/src/index.js\");\n/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init */ \"./node_modules/d3-scale/src/init.js\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  return _init__WEBPACK_IMPORTED_MODULE_3__[\"initRange\"].apply(Object(_time__WEBPACK_IMPORTED_MODULE_0__[\"calendar\"])(d3_time__WEBPACK_IMPORTED_MODULE_2__[\"utcYear\"], d3_time__WEBPACK_IMPORTED_MODULE_2__[\"utcMonth\"], d3_time__WEBPACK_IMPORTED_MODULE_2__[\"utcWeek\"], d3_time__WEBPACK_IMPORTED_MODULE_2__[\"utcDay\"], d3_time__WEBPACK_IMPORTED_MODULE_2__[\"utcHour\"], d3_time__WEBPACK_IMPORTED_MODULE_2__[\"utcMinute\"], d3_time__WEBPACK_IMPORTED_MODULE_2__[\"utcSecond\"], d3_time__WEBPACK_IMPORTED_MODULE_2__[\"utcMillisecond\"], d3_time_format__WEBPACK_IMPORTED_MODULE_1__[\"utcFormat\"]).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3V0Y1RpbWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3V0Y1RpbWUuanM/M2I0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NhbGVuZGFyfSBmcm9tIFwiLi90aW1lXCI7XG5pbXBvcnQge3V0Y0Zvcm1hdH0gZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5pbXBvcnQge3V0Y1llYXIsIHV0Y01vbnRoLCB1dGNXZWVrLCB1dGNEYXksIHV0Y0hvdXIsIHV0Y01pbnV0ZSwgdXRjU2Vjb25kLCB1dGNNaWxsaXNlY29uZH0gZnJvbSBcImQzLXRpbWVcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KGNhbGVuZGFyKHV0Y1llYXIsIHV0Y01vbnRoLCB1dGNXZWVrLCB1dGNEYXksIHV0Y0hvdXIsIHV0Y01pbnV0ZSwgdXRjU2Vjb25kLCB1dGNNaWxsaXNlY29uZCwgdXRjRm9ybWF0KS5kb21haW4oW0RhdGUuVVRDKDIwMDAsIDAsIDEpLCBEYXRlLlVUQygyMDAwLCAwLCAyKV0pLCBhcmd1bWVudHMpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-scale/src/utcTime.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/constant.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-selection/src/constant.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\"] = (function(x) {\n  return function() {\n    return x;\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzP2QyNTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/constant.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/create.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-selection/src/create.js ***!
  \*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./creator */ \"./node_modules/d3-selection/src/creator.js\");\n/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./select */ \"./node_modules/d3-selection/src/select.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name) {\n  return Object(_select__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_creator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name).call(document.documentElement));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdGUuanM/YThiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi9jcmVhdG9yXCI7XG5pbXBvcnQgc2VsZWN0IGZyb20gXCIuL3NlbGVjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3QoY3JlYXRvcihuYW1lKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/create.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/creator.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-selection/src/creator.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespace */ \"./node_modules/d3-selection/src/namespace.js\");\n/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./namespaces */ \"./node_modules/d3-selection/src/namespaces.js\");\n\n\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === _namespaces__WEBPACK_IMPORTED_MODULE_1__[\"xhtml\"] && document.documentElement.namespaceURI === _namespaces__WEBPACK_IMPORTED_MODULE_1__[\"xhtml\"]\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name) {\n  var fullname = Object(_namespace__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRvci5qcz81N2Y1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4vbmFtZXNwYWNlXCI7XG5pbXBvcnQge3hodG1sfSBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0b3JJbmhlcml0KG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcbiAgICAgICAgdXJpID0gdGhpcy5uYW1lc3BhY2VVUkk7XG4gICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXG4gICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgbmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiAoZnVsbG5hbWUubG9jYWxcbiAgICAgID8gY3JlYXRvckZpeGVkXG4gICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/creator.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/index.js":
/*!************************************************!*\
  !*** ./node_modules/d3-selection/src/index.js ***!
  \************************************************/
/*! exports provided: create, creator, local, matcher, mouse, namespace, namespaces, clientPoint, select, selectAll, selection, selector, selectorAll, style, touch, touches, window, event, customEvent */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create */ \"./node_modules/d3-selection/src/create.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"create\", function() { return _create__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./creator */ \"./node_modules/d3-selection/src/creator.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"creator\", function() { return _creator__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _local__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./local */ \"./node_modules/d3-selection/src/local.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"local\", function() { return _local__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _matcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./matcher */ \"./node_modules/d3-selection/src/matcher.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matcher\", function() { return _matcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _mouse__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mouse */ \"./node_modules/d3-selection/src/mouse.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"mouse\", function() { return _mouse__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./namespace */ \"./node_modules/d3-selection/src/namespace.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"namespace\", function() { return _namespace__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./namespaces */ \"./node_modules/d3-selection/src/namespaces.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"namespaces\", function() { return _namespaces__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./point */ \"./node_modules/d3-selection/src/point.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"clientPoint\", function() { return _point__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./select */ \"./node_modules/d3-selection/src/select.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"select\", function() { return _select__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./selectAll */ \"./node_modules/d3-selection/src/selectAll.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"selectAll\", function() { return _selectAll__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./selection/index */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"selection\", function() { return _selection_index__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./selector */ \"./node_modules/d3-selection/src/selector.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"selector\", function() { return _selector__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _selectorAll__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./selectorAll */ \"./node_modules/d3-selection/src/selectorAll.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"selectorAll\", function() { return _selectorAll__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _selection_style__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./selection/style */ \"./node_modules/d3-selection/src/selection/style.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"style\", function() { return _selection_style__WEBPACK_IMPORTED_MODULE_13__[\"styleValue\"]; });\n\n/* harmony import */ var _touch__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./touch */ \"./node_modules/d3-selection/src/touch.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"touch\", function() { return _touch__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _touches__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./touches */ \"./node_modules/d3-selection/src/touches.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"touches\", function() { return _touches__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./window */ \"./node_modules/d3-selection/src/window.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"window\", function() { return _window__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./selection/on */ \"./node_modules/d3-selection/src/selection/on.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"event\", function() { return _selection_on__WEBPACK_IMPORTED_MODULE_17__[\"event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"customEvent\", function() { return _selection_on__WEBPACK_IMPORTED_MODULE_17__[\"customEvent\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzP2ZkMzIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0ZX0gZnJvbSBcIi4vY3JlYXRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3JlYXRvcn0gZnJvbSBcIi4vY3JlYXRvclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxvY2FsfSBmcm9tIFwiLi9sb2NhbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1hdGNoZXJ9IGZyb20gXCIuL21hdGNoZXJcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtb3VzZX0gZnJvbSBcIi4vbW91c2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBuYW1lc3BhY2V9IGZyb20gXCIuL25hbWVzcGFjZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG5hbWVzcGFjZXN9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjbGllbnRQb2ludH0gZnJvbSBcIi4vcG9pbnRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3R9IGZyb20gXCIuL3NlbGVjdFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdEFsbH0gZnJvbSBcIi4vc2VsZWN0QWxsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0aW9ufSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3Rvcn0gZnJvbSBcIi4vc2VsZWN0b3JcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3RvckFsbH0gZnJvbSBcIi4vc2VsZWN0b3JBbGxcIjtcbmV4cG9ydCB7c3R5bGVWYWx1ZSBhcyBzdHlsZX0gZnJvbSBcIi4vc2VsZWN0aW9uL3N0eWxlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdG91Y2h9IGZyb20gXCIuL3RvdWNoXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdG91Y2hlc30gZnJvbSBcIi4vdG91Y2hlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHdpbmRvd30gZnJvbSBcIi4vd2luZG93XCI7XG5leHBvcnQge2V2ZW50LCBjdXN0b21FdmVudH0gZnJvbSBcIi4vc2VsZWN0aW9uL29uXCI7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/local.js":
/*!************************************************!*\
  !*** ./node_modules/d3-selection/src/local.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 local; });\nvar nextId = 0;\n\nfunction local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9sb2NhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2xvY2FsLmpzPzFjNTIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG5leHRJZCA9IDA7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvY2FsKCkge1xuICByZXR1cm4gbmV3IExvY2FsO1xufVxuXG5mdW5jdGlvbiBMb2NhbCgpIHtcbiAgdGhpcy5fID0gXCJAXCIgKyAoKytuZXh0SWQpLnRvU3RyaW5nKDM2KTtcbn1cblxuTG9jYWwucHJvdG90eXBlID0gbG9jYWwucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTG9jYWwsXG4gIGdldDogZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBpZCA9IHRoaXMuXztcbiAgICB3aGlsZSAoIShpZCBpbiBub2RlKSkgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHJldHVybjtcbiAgICByZXR1cm4gbm9kZVtpZF07XG4gIH0sXG4gIHNldDogZnVuY3Rpb24obm9kZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gbm9kZVt0aGlzLl9dID0gdmFsdWU7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiB0aGlzLl8gaW4gbm9kZSAmJiBkZWxldGUgbm9kZVt0aGlzLl9dO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/local.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/matcher.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-selection/src/matcher.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\"] = (function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcz8wYTc4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/matcher.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/mouse.js":
/*!************************************************!*\
  !*** ./node_modules/d3-selection/src/mouse.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ \"./node_modules/d3-selection/src/sourceEvent.js\");\n/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ \"./node_modules/d3-selection/src/point.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(node) {\n  var event = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n  if (event.changedTouches) event = event.changedTouches[0];\n  return Object(_point__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(node, event);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tb3VzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21vdXNlLmpzP2UyNGUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50XCI7XG5pbXBvcnQgcG9pbnQgZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICB2YXIgZXZlbnQgPSBzb3VyY2VFdmVudCgpO1xuICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpIGV2ZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/mouse.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/namespace.js":
/*!****************************************************!*\
  !*** ./node_modules/d3-selection/src/namespace.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces */ \"./node_modules/d3-selection/src/namespaces.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return _namespaces__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasOwnProperty(prefix) ? {space: _namespaces__WEBPACK_IMPORTED_MODULE_0__[\"default\"][prefix], local: name} : name;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanM/NmNkNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/namespace.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/namespaces.js":
/*!*****************************************************!*\
  !*** ./node_modules/d3-selection/src/namespaces.js ***!
  \*****************************************************/
/*! exports provided: xhtml, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"xhtml\", function() { return xhtml; });\nvar xhtml = \"http://www.w3.org/1999/xhtml\";\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2VzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcz9lMzExIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgeGh0bWwgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzdmc6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeGh0bWw6IHhodG1sLFxuICB4bGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHhtbDogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIlxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/namespaces.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/point.js":
/*!************************************************!*\
  !*** ./node_modules/d3-selection/src/point.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\"] = (function(node, event) {\n  var svg = node.ownerSVGElement || node;\n\n  if (svg.createSVGPoint) {\n    var point = svg.createSVGPoint();\n    point.x = event.clientX, point.y = event.clientY;\n    point = point.matrixTransform(node.getScreenCTM().inverse());\n    return [point.x, point.y];\n  }\n\n  var rect = node.getBoundingClientRect();\n  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9wb2ludC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3BvaW50LmpzP2YwN2YiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgZXZlbnQpIHtcbiAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG5cbiAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xuICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcbiAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgcmV0dXJuIFtwb2ludC54LCBwb2ludC55XTtcbiAgfVxuXG4gIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIFtldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gbm9kZS5jbGllbnRMZWZ0LCBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBub2RlLmNsaWVudFRvcF07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/point.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/select.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-selection/src/select.js ***!
  \*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(selector) {\n  return typeof selector === \"string\"\n      ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"]([[document.querySelector(selector)]], [document.documentElement])\n      : new _selection_index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"]([[selector]], _selection_index__WEBPACK_IMPORTED_MODULE_0__[\"root\"]);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanM/MDBhNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/select.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selectAll.js":
/*!****************************************************!*\
  !*** ./node_modules/d3-selection/src/selectAll.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(selector) {\n  return typeof selector === \"string\"\n      ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"]([document.querySelectorAll(selector)], [document.documentElement])\n      : new _selection_index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"]([selector == null ? [] : selector], _selection_index__WEBPACK_IMPORTED_MODULE_0__[\"root\"]);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RBbGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RBbGwuanM/MTI3YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcildLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgIDogbmV3IFNlbGVjdGlvbihbc2VsZWN0b3IgPT0gbnVsbCA/IFtdIDogc2VsZWN0b3JdLCByb290KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selectAll.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/append.js":
/*!***********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/append.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator */ \"./node_modules/d3-selection/src/creator.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name) {\n  var create = typeof name === \"function\" ? name : Object(_creator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcz9kYjdkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/append.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/attr.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/attr.js ***!
  \*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../namespace */ \"./node_modules/d3-selection/src/namespace.js\");\n\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name, value) {\n  var fullname = Object(_namespace__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXR0ci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzP2Y4NzIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi4vbmFtZXNwYWNlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xuICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/attr.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/call.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/call.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\"] = (function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzPzBhZGQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/call.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/classed.js":
/*!************************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/classed.js ***!
  \************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xhc3NlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbGFzc2VkLmpzPzUwYjkiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/classed.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/clone.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/clone.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanM/ZWExMyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShmYWxzZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKHRydWUpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/clone.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/data.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/data.js ***!
  \*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _enter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enter */ \"./node_modules/d3-selection/src/selection/enter.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ \"./node_modules/d3-selection/src/constant.js\");\n\n\n\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new _enter__WEBPACK_IMPORTED_MODULE_1__[\"EnterNode\"](parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = {},\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n      if (keyValue in nodeByKeyValue) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue[keyValue] = node;\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\n    if (node = nodeByKeyValue[keyValue]) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue[keyValue] = null;\n    } else {\n      enter[i] = new _enter__WEBPACK_IMPORTED_MODULE_1__[\"EnterNode\"](parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(value, key) {\n  if (!value) {\n    data = new Array(this.size()), j = -1;\n    this.each(function(d) { data[++j] = d; });\n    return data;\n  }\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = Object(_constant__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = value.call(parent, parent && parent.__data__, j, parents),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new _index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"](update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXRhLmpzPzEyMDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXJcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnRcIjtcblxudmFyIGtleVByZWZpeCA9IFwiJFwiOyAvLyBQcm90ZWN0IGFnYWluc3Qga2V5cyBsaWtlIOKAnF9fcHJvdG9fX+KAnS5cblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSB7fSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAga2V5VmFsdWVzID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKSxcbiAgICAgIGtleVZhbHVlO1xuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAvLyBJZiBtdWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIGtleSwgdGhlIGR1cGxpY2F0ZXMgYXJlIGFkZGVkIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgICBpZiAoa2V5VmFsdWUgaW4gbm9kZUJ5S2V5VmFsdWUpIHtcbiAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgLy8gSWYgdGhlcmUgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSwgam9pbiBhbmQgYWRkIGl0IHRvIHVwZGF0ZS5cbiAgLy8gSWYgdGhlcmUgaXMgbm90IChvciB0aGUga2V5IGlzIGEgZHVwbGljYXRlKSwgYWRkIGl0IHRvIGVudGVyLlxuICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChwYXJlbnQsIGRhdGFbaV0sIGksIGRhdGEpO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdKSB7XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlW2tleVZhbHVlc1tpXV0gPT09IG5vZGUpKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgZGF0YSA9IG5ldyBBcnJheSh0aGlzLnNpemUoKSksIGogPSAtMTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oZCkgeyBkYXRhWysral0gPSBkOyB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IHZhbHVlLmNhbGwocGFyZW50LCBwYXJlbnQgJiYgcGFyZW50Ll9fZGF0YV9fLCBqLCBwYXJlbnRzKSxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICBleGl0R3JvdXAgPSBleGl0W2pdID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKTtcblxuICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXG4gICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XG4gICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gIHVwZGF0ZS5fZXhpdCA9IGV4aXQ7XG4gIHJldHVybiB1cGRhdGU7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/data.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/datum.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/datum.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\"] = (function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanM/YzgwMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIiwgdmFsdWUpXG4gICAgICA6IHRoaXMubm9kZSgpLl9fZGF0YV9fO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/datum.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/dispatch.js":
/*!*************************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/dispatch.js ***!
  \*************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window */ \"./node_modules/d3-selection/src/window.js\");\n\n\nfunction dispatchEvent(node, type, params) {\n  var window = Object(_window__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanM/NGUyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/dispatch.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/each.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/each.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\"] = (function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZWFjaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzP2NlZmUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/each.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/empty.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/empty.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\"] = (function() {\n  return !this.node();\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanM/Y2ExNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/empty.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/enter.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/enter.js ***!
  \**********************************************************/
/*! exports provided: default, EnterNode */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EnterNode\", function() { return EnterNode; });\n/* harmony import */ var _sparse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sparse */ \"./node_modules/d3-selection/src/selection/sparse.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  return new _index__WEBPACK_IMPORTED_MODULE_1__[\"Selection\"](this._enter || this._groups.map(_sparse__WEBPACK_IMPORTED_MODULE_0__[\"default\"]), this._parents);\n});\n\nfunction EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanM/ZjY4OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZVwiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcbiAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgdGhpcy5fbmV4dCA9IG51bGw7XG4gIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xufVxuXG5FbnRlck5vZGUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMuX25leHQpOyB9LFxuICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/enter.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/exit.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/exit.js ***!
  \*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sparse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sparse */ \"./node_modules/d3-selection/src/selection/sparse.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  return new _index__WEBPACK_IMPORTED_MODULE_1__[\"Selection\"](this._exit || this._groups.map(_sparse__WEBPACK_IMPORTED_MODULE_0__[\"default\"]), this._parents);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9leGl0LmpzP2YzYjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/exit.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/filter.js":
/*!***********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/filter.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _matcher__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../matcher */ \"./node_modules/d3-selection/src/matcher.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(match) {\n  if (typeof match !== \"function\") match = Object(_matcher__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new _index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"](subgroups, this._parents);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcz8wY2RmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSBcIi4uL21hdGNoZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/filter.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/html.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/html.js ***!
  \*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaHRtbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzP2IyNDEiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/html.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/index.js ***!
  \**********************************************************/
/*! exports provided: root, Selection, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"root\", function() { return root; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Selection\", function() { return Selection; });\n/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./select */ \"./node_modules/d3-selection/src/selection/select.js\");\n/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./selectAll */ \"./node_modules/d3-selection/src/selection/selectAll.js\");\n/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./filter */ \"./node_modules/d3-selection/src/selection/filter.js\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data */ \"./node_modules/d3-selection/src/selection/data.js\");\n/* harmony import */ var _enter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./enter */ \"./node_modules/d3-selection/src/selection/enter.js\");\n/* harmony import */ var _exit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exit */ \"./node_modules/d3-selection/src/selection/exit.js\");\n/* harmony import */ var _join__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./join */ \"./node_modules/d3-selection/src/selection/join.js\");\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./merge */ \"./node_modules/d3-selection/src/selection/merge.js\");\n/* harmony import */ var _order__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./order */ \"./node_modules/d3-selection/src/selection/order.js\");\n/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sort */ \"./node_modules/d3-selection/src/selection/sort.js\");\n/* harmony import */ var _call__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./call */ \"./node_modules/d3-selection/src/selection/call.js\");\n/* harmony import */ var _nodes__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./nodes */ \"./node_modules/d3-selection/src/selection/nodes.js\");\n/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./node */ \"./node_modules/d3-selection/src/selection/node.js\");\n/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./size */ \"./node_modules/d3-selection/src/selection/size.js\");\n/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./empty */ \"./node_modules/d3-selection/src/selection/empty.js\");\n/* harmony import */ var _each__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./each */ \"./node_modules/d3-selection/src/selection/each.js\");\n/* harmony import */ var _attr__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./attr */ \"./node_modules/d3-selection/src/selection/attr.js\");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./style */ \"./node_modules/d3-selection/src/selection/style.js\");\n/* harmony import */ var _property__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./property */ \"./node_modules/d3-selection/src/selection/property.js\");\n/* harmony import */ var _classed__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./classed */ \"./node_modules/d3-selection/src/selection/classed.js\");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./text */ \"./node_modules/d3-selection/src/selection/text.js\");\n/* harmony import */ var _html__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./html */ \"./node_modules/d3-selection/src/selection/html.js\");\n/* harmony import */ var _raise__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./raise */ \"./node_modules/d3-selection/src/selection/raise.js\");\n/* harmony import */ var _lower__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./lower */ \"./node_modules/d3-selection/src/selection/lower.js\");\n/* harmony import */ var _append__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./append */ \"./node_modules/d3-selection/src/selection/append.js\");\n/* harmony import */ var _insert__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./insert */ \"./node_modules/d3-selection/src/selection/insert.js\");\n/* harmony import */ var _remove__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./remove */ \"./node_modules/d3-selection/src/selection/remove.js\");\n/* harmony import */ var _clone__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./clone */ \"./node_modules/d3-selection/src/selection/clone.js\");\n/* harmony import */ var _datum__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./datum */ \"./node_modules/d3-selection/src/selection/datum.js\");\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./on */ \"./node_modules/d3-selection/src/selection/on.js\");\n/* harmony import */ var _dispatch__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./dispatch */ \"./node_modules/d3-selection/src/selection/dispatch.js\");\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\n\n\nvar root = [null];\n\nfunction Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: _select__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n  selectAll: _selectAll__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  filter: _filter__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n  data: _data__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n  enter: _enter__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n  exit: _exit__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n  join: _join__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n  merge: _merge__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n  order: _order__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n  sort: _sort__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n  call: _call__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n  nodes: _nodes__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n  node: _node__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n  size: _size__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n  empty: _empty__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n  each: _each__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n  attr: _attr__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n  style: _style__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n  property: _property__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n  classed: _classed__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n  text: _text__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n  html: _html__WEBPACK_IMPORTED_MODULE_21__[\"default\"],\n  raise: _raise__WEBPACK_IMPORTED_MODULE_22__[\"default\"],\n  lower: _lower__WEBPACK_IMPORTED_MODULE_23__[\"default\"],\n  append: _append__WEBPACK_IMPORTED_MODULE_24__[\"default\"],\n  insert: _insert__WEBPACK_IMPORTED_MODULE_25__[\"default\"],\n  remove: _remove__WEBPACK_IMPORTED_MODULE_26__[\"default\"],\n  clone: _clone__WEBPACK_IMPORTED_MODULE_27__[\"default\"],\n  datum: _datum__WEBPACK_IMPORTED_MODULE_28__[\"default\"],\n  on: _on__WEBPACK_IMPORTED_MODULE_29__[\"default\"],\n  dispatch: _dispatch__WEBPACK_IMPORTED_MODULE_30__[\"default\"]\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (selection);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanM/ZTQ4YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXRcIjtcbmltcG9ydCBzZWxlY3Rpb25fam9pbiBmcm9tIFwiLi9qb2luXCI7XG5pbXBvcnQgc2VsZWN0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29yZGVyIGZyb20gXCIuL29yZGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NvcnQgZnJvbSBcIi4vc29ydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jYWxsIGZyb20gXCIuL2NhbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZXMgZnJvbSBcIi4vbm9kZXNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZSBmcm9tIFwiLi9ub2RlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NpemUgZnJvbSBcIi4vc2l6ZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbXB0eSBmcm9tIFwiLi9lbXB0eVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXR0ciBmcm9tIFwiLi9hdHRyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3Byb3BlcnR5IGZyb20gXCIuL3Byb3BlcnR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NsYXNzZWQgZnJvbSBcIi4vY2xhc3NlZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl90ZXh0IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCBzZWxlY3Rpb25faHRtbCBmcm9tIFwiLi9odG1sXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JhaXNlIGZyb20gXCIuL3JhaXNlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2xvd2VyIGZyb20gXCIuL2xvd2VyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2FwcGVuZCBmcm9tIFwiLi9hcHBlbmRcIjtcbmltcG9ydCBzZWxlY3Rpb25faW5zZXJ0IGZyb20gXCIuL2luc2VydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Nsb25lIGZyb20gXCIuL2Nsb25lXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdHVtIGZyb20gXCIuL2RhdHVtXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29uIGZyb20gXCIuL29uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Rpc3BhdGNoIGZyb20gXCIuL2Rpc3BhdGNoXCI7XG5cbmV4cG9ydCB2YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIG9yZGVyOiBzZWxlY3Rpb25fb3JkZXIsXG4gIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxuICBjYWxsOiBzZWxlY3Rpb25fY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX25vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX2VtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcbiAgYXR0cjogc2VsZWN0aW9uX2F0dHIsXG4gIHN0eWxlOiBzZWxlY3Rpb25fc3R5bGUsXG4gIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXG4gIGNsYXNzZWQ6IHNlbGVjdGlvbl9jbGFzc2VkLFxuICB0ZXh0OiBzZWxlY3Rpb25fdGV4dCxcbiAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXG4gIHJhaXNlOiBzZWxlY3Rpb25fcmFpc2UsXG4gIGxvd2VyOiBzZWxlY3Rpb25fbG93ZXIsXG4gIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcbiAgaW5zZXJ0OiBzZWxlY3Rpb25faW5zZXJ0LFxuICByZW1vdmU6IHNlbGVjdGlvbl9yZW1vdmUsXG4gIGNsb25lOiBzZWxlY3Rpb25fY2xvbmUsXG4gIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXG4gIG9uOiBzZWxlY3Rpb25fb24sXG4gIGRpc3BhdGNoOiBzZWxlY3Rpb25fZGlzcGF0Y2hcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdGlvbjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/index.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/insert.js":
/*!***********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/insert.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator */ \"./node_modules/d3-selection/src/creator.js\");\n/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector */ \"./node_modules/d3-selection/src/selector.js\");\n\n\n\nfunction constantNull() {\n  return null;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name, before) {\n  var create = typeof name === \"function\" ? name : Object(_creator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : Object(_selector__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5zZXJ0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcz81YTYxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/insert.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/join.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/join.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\"] = (function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n  if (onupdate != null) update = onupdate(update);\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9qb2luLmpzPzNmNzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgZW50ZXIgPSB0eXBlb2Ygb25lbnRlciA9PT0gXCJmdW5jdGlvblwiID8gb25lbnRlcihlbnRlcikgOiBlbnRlci5hcHBlbmQob25lbnRlciArIFwiXCIpO1xuICBpZiAob251cGRhdGUgIT0gbnVsbCkgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcbiAgaWYgKG9uZXhpdCA9PSBudWxsKSBleGl0LnJlbW92ZSgpOyBlbHNlIG9uZXhpdChleGl0KTtcbiAgcmV0dXJuIGVudGVyICYmIHVwZGF0ZSA/IGVudGVyLm1lcmdlKHVwZGF0ZSkub3JkZXIoKSA6IHVwZGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/join.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/lower.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/lower.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  return this.each(lower);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbG93ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbG93ZXIuanM/MTdjMyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBsb3dlcigpIHtcbiAgaWYgKHRoaXMucHJldmlvdXNTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsIHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/lower.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/merge.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/merge.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(selection) {\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new _index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"](merges, this._parents);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanM/OGI3YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0aW9uKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/merge.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/node.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/node.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\"] = (function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzPzk2ZTAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/node.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/nodes.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/nodes.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\"] = (function() {\n  var nodes = new Array(this.size()), i = -1;\n  this.each(function() { nodes[++i] = this; });\n  return nodes;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZXMuanM/OWIwNiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaSA9IC0xO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IG5vZGVzWysraV0gPSB0aGlzOyB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/nodes.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/on.js":
/*!*******************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/on.js ***!
  \*******************************************************/
/*! exports provided: event, default, customEvent */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"event\", function() { return event; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"customEvent\", function() { return customEvent; });\nvar filterEvents = {};\n\nvar event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = event; // Events can be reentrant (e.g., focus).\n    event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      event = event0;\n    }\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(typename, value, capture) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n});\n\nfunction customEvent(event1, listener, that, args) {\n  var event0 = event;\n  event1.sourceEvent = event;\n  event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    event = event0;\n  }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanM/MDE2NSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZmlsdGVyRXZlbnRzID0ge307XG5cbmV4cG9ydCB2YXIgZXZlbnQgPSBudWxsO1xuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICBpZiAoIShcIm9ubW91c2VlbnRlclwiIGluIGVsZW1lbnQpKSB7XG4gICAgZmlsdGVyRXZlbnRzID0ge21vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsIG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIn07XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsdGVyQ29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCk7XG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICBpZiAoIXJlbGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRoaXMgJiYgIShyZWxhdGVkLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpICYgOCkpKSB7XG4gICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKSB7XG4gIHJldHVybiBmdW5jdGlvbihldmVudDEpIHtcbiAgICB2YXIgZXZlbnQwID0gZXZlbnQ7IC8vIEV2ZW50cyBjYW4gYmUgcmVlbnRyYW50IChlLmcuLCBmb2N1cykuXG4gICAgZXZlbnQgPSBldmVudDE7XG4gICAgdHJ5IHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgdGhpcy5fX2RhdGFfXywgaW5kZXgsIGdyb3VwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXZlbnQgPSBldmVudDA7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvblJlbW92ZSh0eXBlbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uO1xuICAgIGlmICghb24pIHJldHVybjtcbiAgICBmb3IgKHZhciBqID0gMCwgaSA9IC0xLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAobyA9IG9uW2pdLCAoIXR5cGVuYW1lLnR5cGUgfHwgby50eXBlID09PSB0eXBlbmFtZS50eXBlKSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5jYXB0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uWysraV0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKytpKSBvbi5sZW5ndGggPSBpO1xuICAgIGVsc2UgZGVsZXRlIHRoaXMuX19vbjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25BZGQodHlwZW5hbWUsIHZhbHVlLCBjYXB0dXJlKSB7XG4gIHZhciB3cmFwID0gZmlsdGVyRXZlbnRzLmhhc093blByb3BlcnR5KHR5cGVuYW1lLnR5cGUpID8gZmlsdGVyQ29udGV4dExpc3RlbmVyIDogY29udGV4dExpc3RlbmVyO1xuICByZXR1cm4gZnVuY3Rpb24oZCwgaSwgZ3JvdXApIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb24sIG8sIGxpc3RlbmVyID0gd3JhcCh2YWx1ZSwgaSwgZ3JvdXApO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8uY2FwdHVyZSA9IGNhcHR1cmUpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBjYXB0dXJlOiBjYXB0dXJlfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGlmIChjYXB0dXJlID09IG51bGwpIGNhcHR1cmUgPSBmYWxzZTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIGNhcHR1cmUpKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FdmVudChldmVudDEsIGxpc3RlbmVyLCB0aGF0LCBhcmdzKSB7XG4gIHZhciBldmVudDAgPSBldmVudDtcbiAgZXZlbnQxLnNvdXJjZUV2ZW50ID0gZXZlbnQ7XG4gIGV2ZW50ID0gZXZlbnQxO1xuICB0cnkge1xuICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBldmVudCA9IGV2ZW50MDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/on.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/order.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/order.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\"] = (function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanM/YTE0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAtMSwgbSA9IGdyb3Vwcy5sZW5ndGg7ICsraiA8IG07KSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSBncm91cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOykge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBpZiAobmV4dCAmJiBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5leHQpIF4gNCkgbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/order.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/property.js":
/*!*************************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/property.js ***!
  \*************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanM/Y2RjMyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/property.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/raise.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/raise.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  return this.each(raise);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmFpc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmFpc2UuanM/MTkxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/raise.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/remove.js":
/*!***********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/remove.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  return this.each(remove);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JlbW92ZS5qcz8yNTkxIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/remove.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/select.js":
/*!***********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/select.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector */ \"./node_modules/d3-selection/src/selector.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(select) {\n  if (typeof select !== \"function\") select = Object(_selector__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new _index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"](subgroups, this._parents);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcz9iYWYzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3RvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/select.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/selectAll.js":
/*!**************************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/selectAll.js ***!
  \**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _selectorAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selectorAll */ \"./node_modules/d3-selection/src/selectorAll.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(select) {\n  if (typeof select !== \"function\") select = Object(_selectorAll__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new _index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"](subgroups, parents);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0QWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcz9mYjBmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/selectAll.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/size.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/size.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\"] = (function() {\n  var size = 0;\n  this.each(function() { ++size; });\n  return size;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zaXplLmpzPzlhYjQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzaXplID0gMDtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeyArK3NpemU7IH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/size.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/sort.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/sort.js ***!
  \*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new _index__WEBPACK_IMPORTED_MODULE_0__[\"Selection\"](sortgroups, this._parents).order();\n});\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zb3J0LmpzP2NhOWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/sort.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/sparse.js":
/*!***********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/sparse.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\"] = (function(update) {\n  return new Array(update.length);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcz82OThkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHVwZGF0ZSkge1xuICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/sparse.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/style.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/style.js ***!
  \**********************************************************/
/*! exports provided: default, styleValue */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styleValue\", function() { return styleValue; });\n/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window */ \"./node_modules/d3-selection/src/window.js\");\n\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n});\n\nfunction styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || Object(_window__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3R5bGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3R5bGUuanM/MzY0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQpKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSlcbiAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxuICAgICAgfHwgZGVmYXVsdFZpZXcobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/style.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selection/text.js":
/*!*********************************************************!*\
  !*** ./node_modules/d3-selection/src/selection/text.js ***!
  \*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi90ZXh0LmpzPzYxYjAiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selection/text.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selector.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-selection/src/selector.js ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction none() {}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yLmpzPzZmZDMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gbm9uZSgpIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gbm9uZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selector.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/selectorAll.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-selection/src/selectorAll.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction empty() {\n  return [];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yQWxsLmpzPzQyMzAiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZW1wdHkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/selectorAll.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/sourceEvent.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-selection/src/sourceEvent.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/on */ \"./node_modules/d3-selection/src/selection/on.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function() {\n  var current = _selection_on__WEBPACK_IMPORTED_MODULE_0__[\"event\"], source;\n  while (source = current.sourceEvent) current = source;\n  return current;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzPzRmZDQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtldmVudH0gZnJvbSBcIi4vc2VsZWN0aW9uL29uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY3VycmVudCA9IGV2ZW50LCBzb3VyY2U7XG4gIHdoaWxlIChzb3VyY2UgPSBjdXJyZW50LnNvdXJjZUV2ZW50KSBjdXJyZW50ID0gc291cmNlO1xuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/sourceEvent.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/touch.js":
/*!************************************************!*\
  !*** ./node_modules/d3-selection/src/touch.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ \"./node_modules/d3-selection/src/sourceEvent.js\");\n/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ \"./node_modules/d3-selection/src/point.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(node, touches, identifier) {\n  if (arguments.length < 3) identifier = touches, touches = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__[\"default\"])().changedTouches;\n\n  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n    if ((touch = touches[i]).identifier === identifier) {\n      return Object(_point__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(node, touch);\n    }\n  }\n\n  return null;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy90b3VjaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3RvdWNoLmpzPzYwOTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50XCI7XG5pbXBvcnQgcG9pbnQgZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgdG91Y2hlcywgaWRlbnRpZmllcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIGlkZW50aWZpZXIgPSB0b3VjaGVzLCB0b3VjaGVzID0gc291cmNlRXZlbnQoKS5jaGFuZ2VkVG91Y2hlcztcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IHRvdWNoZXMgPyB0b3VjaGVzLmxlbmd0aCA6IDAsIHRvdWNoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCh0b3VjaCA9IHRvdWNoZXNbaV0pLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJldHVybiBwb2ludChub2RlLCB0b3VjaCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/touch.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/touches.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-selection/src/touches.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ \"./node_modules/d3-selection/src/sourceEvent.js\");\n/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ \"./node_modules/d3-selection/src/point.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(node, touches) {\n  if (touches == null) touches = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__[\"default\"])().touches;\n\n  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n    points[i] = Object(_point__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(node, touches[i]);\n  }\n\n  return points;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy90b3VjaGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvdG91Y2hlcy5qcz82MjlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudFwiO1xuaW1wb3J0IHBvaW50IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIHRvdWNoZXMpIHtcbiAgaWYgKHRvdWNoZXMgPT0gbnVsbCkgdG91Y2hlcyA9IHNvdXJjZUV2ZW50KCkudG91Y2hlcztcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IHRvdWNoZXMgPyB0b3VjaGVzLmxlbmd0aCA6IDAsIHBvaW50cyA9IG5ldyBBcnJheShuKTsgaSA8IG47ICsraSkge1xuICAgIHBvaW50c1tpXSA9IHBvaW50KG5vZGUsIHRvdWNoZXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHBvaW50cztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/touches.js\n");

/***/ }),

/***/ "./node_modules/d3-selection/src/window.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-selection/src/window.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\"] = (function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanM/YTMxNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgIHx8IChub2RlLmRvY3VtZW50ICYmIG5vZGUpIC8vIG5vZGUgaXMgYSBXaW5kb3dcbiAgICAgIHx8IG5vZGUuZGVmYXVsdFZpZXc7IC8vIG5vZGUgaXMgYSBEb2N1bWVudFxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-selection/src/window.js\n");

/***/ }),

/***/ "./node_modules/d3-time-format/src/defaultLocale.js":
/*!**********************************************************!*\
  !*** ./node_modules/d3-time-format/src/defaultLocale.js ***!
  \**********************************************************/
/*! exports provided: timeFormat, timeParse, utcFormat, utcParse, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"timeFormat\", function() { return timeFormat; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"timeParse\", function() { return timeParse; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcFormat\", function() { return utcFormat; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcParse\", function() { return utcParse; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return defaultLocale; });\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale.js */ \"./node_modules/d3-time-format/src/locale.js\");\n\n\nvar locale;\nvar timeFormat;\nvar timeParse;\nvar utcFormat;\nvar utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nfunction defaultLocale(definition) {\n  locale = Object(_locale_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanM/NGMyMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciB0aW1lRm9ybWF0O1xuZXhwb3J0IHZhciB0aW1lUGFyc2U7XG5leHBvcnQgdmFyIHV0Y0Zvcm1hdDtcbmV4cG9ydCB2YXIgdXRjUGFyc2U7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkYXRlVGltZTogXCIleCwgJVhcIixcbiAgZGF0ZTogXCIlLW0vJS1kLyVZXCIsXG4gIHRpbWU6IFwiJS1JOiVNOiVTICVwXCIsXG4gIHBlcmlvZHM6IFtcIkFNXCIsIFwiUE1cIl0sXG4gIGRheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuICBzaG9ydERheXM6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgbW9udGhzOiBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSxcbiAgc2hvcnRNb250aHM6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIHRpbWVGb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICB0aW1lUGFyc2UgPSBsb2NhbGUucGFyc2U7XG4gIHV0Y0Zvcm1hdCA9IGxvY2FsZS51dGNGb3JtYXQ7XG4gIHV0Y1BhcnNlID0gbG9jYWxlLnV0Y1BhcnNlO1xuICByZXR1cm4gbG9jYWxlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-time-format/src/defaultLocale.js\n");

/***/ }),

/***/ "./node_modules/d3-time-format/src/index.js":
/*!**************************************************!*\
  !*** ./node_modules/d3-time-format/src/index.js ***!
  \**************************************************/
/*! exports provided: timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale, isoFormat, isoParse */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ \"./node_modules/d3-time-format/src/defaultLocale.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeFormatDefaultLocale\", function() { return _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeFormat\", function() { return _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"timeFormat\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeParse\", function() { return _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"timeParse\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcFormat\", function() { return _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"utcFormat\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcParse\", function() { return _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"utcParse\"]; });\n\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale.js */ \"./node_modules/d3-time-format/src/locale.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeFormatLocale\", function() { return _locale_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _isoFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isoFormat.js */ \"./node_modules/d3-time-format/src/isoFormat.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isoFormat\", function() { return _isoFormat_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _isoParse_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isoParse.js */ \"./node_modules/d3-time-format/src/isoParse.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isoParse\", function() { return _isoParse_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pbmRleC5qcz83MGUxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyB0aW1lRm9ybWF0RGVmYXVsdExvY2FsZSwgdGltZUZvcm1hdCwgdGltZVBhcnNlLCB1dGNGb3JtYXQsIHV0Y1BhcnNlfSBmcm9tIFwiLi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGltZUZvcm1hdExvY2FsZX0gZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaXNvRm9ybWF0fSBmcm9tIFwiLi9pc29Gb3JtYXQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpc29QYXJzZX0gZnJvbSBcIi4vaXNvUGFyc2UuanNcIjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-time-format/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-time-format/src/isoFormat.js":
/*!******************************************************!*\
  !*** ./node_modules/d3-time-format/src/isoFormat.js ***!
  \******************************************************/
/*! exports provided: isoSpecifier, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isoSpecifier\", function() { return isoSpecifier; });\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ \"./node_modules/d3-time-format/src/defaultLocale.js\");\n\n\nvar isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n  return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n    ? formatIsoNative\n    : Object(_defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"utcFormat\"])(isoSpecifier);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (formatIso);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2lzb0Zvcm1hdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzP2JmYjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt1dGNGb3JtYXR9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcblxuZXhwb3J0IHZhciBpc29TcGVjaWZpZXIgPSBcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiO1xuXG5mdW5jdGlvbiBmb3JtYXRJc29OYXRpdmUoZGF0ZSkge1xuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xufVxuXG52YXIgZm9ybWF0SXNvID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdcbiAgICA/IGZvcm1hdElzb05hdGl2ZVxuICAgIDogdXRjRm9ybWF0KGlzb1NwZWNpZmllcik7XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdElzbztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-time-format/src/isoFormat.js\n");

/***/ }),

/***/ "./node_modules/d3-time-format/src/isoParse.js":
/*!*****************************************************!*\
  !*** ./node_modules/d3-time-format/src/isoParse.js ***!
  \*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isoFormat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isoFormat.js */ \"./node_modules/d3-time-format/src/isoFormat.js\");\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultLocale.js */ \"./node_modules/d3-time-format/src/defaultLocale.js\");\n\n\n\nfunction parseIsoNative(string) {\n  var date = new Date(string);\n  return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n    ? parseIsoNative\n    : Object(_defaultLocale_js__WEBPACK_IMPORTED_MODULE_1__[\"utcParse\"])(_isoFormat_js__WEBPACK_IMPORTED_MODULE_0__[\"isoSpecifier\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (parseIso);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2lzb1BhcnNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29QYXJzZS5qcz9hMGNjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNvU3BlY2lmaWVyfSBmcm9tIFwiLi9pc29Gb3JtYXQuanNcIjtcbmltcG9ydCB7dXRjUGFyc2V9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcblxuZnVuY3Rpb24gcGFyc2VJc29OYXRpdmUoc3RyaW5nKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoc3RyaW5nKTtcbiAgcmV0dXJuIGlzTmFOKGRhdGUpID8gbnVsbCA6IGRhdGU7XG59XG5cbnZhciBwYXJzZUlzbyA9ICtuZXcgRGF0ZShcIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWlwiKVxuICAgID8gcGFyc2VJc29OYXRpdmVcbiAgICA6IHV0Y1BhcnNlKGlzb1NwZWNpZmllcik7XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlSXNvO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-time-format/src/isoParse.js\n");

/***/ }),

/***/ "./node_modules/d3-time-format/src/locale.js":
/*!***************************************************!*\
  !*** ./node_modules/d3-time-format/src/locale.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 formatLocale; });\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-time */ \"./node_modules/d3-time/src/index.js\");\n\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcMonday\"].ceil(week) : Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcMonday\"])(week);\n          week = d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcDay\"].offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeMonday\"].ceil(week) : Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeMonday\"])(week);\n          week = d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeDay\"].offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  var map = {}, i = -1, n = names.length;\n  while (++i < n) map[names[i].toLowerCase()] = i;\n  return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeDay\"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeYear\"])(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeSunday\"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeYear\"])(d) - 1, d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeThursday\"])(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeThursday\"].ceil(d);\n  return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeThursday\"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeYear\"])(d), d) + (Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeYear\"])(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeMonday\"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"timeYear\"])(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcDay\"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcYear\"])(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcSunday\"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcYear\"])(d) - 1, d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcThursday\"])(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcThursday\"].ceil(d);\n  return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcThursday\"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcYear\"])(d), d) + (Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcYear\"])(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcMonday\"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__[\"utcYear\"])(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvbG9jYWxlLmpzP2E1OTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdGltZURheSxcbiAgdGltZVN1bmRheSxcbiAgdGltZU1vbmRheSxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lWWVhcixcbiAgdXRjRGF5LFxuICB1dGNTdW5kYXksXG4gIHV0Y01vbmRheSxcbiAgdXRjVGh1cnNkYXksXG4gIHV0Y1llYXJcbn0gZnJvbSBcImQzLXRpbWVcIjtcblxuZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbn1cblxuZnVuY3Rpb24gdXRjRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbn1cblxuZnVuY3Rpb24gbmV3RGF0ZSh5LCBtLCBkKSB7XG4gIHJldHVybiB7eTogeSwgbTogbSwgZDogZCwgSDogMCwgTTogMCwgUzogMCwgTDogMH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSxcbiAgICAgIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsXG4gICAgICBsb2NhbGVfdGltZSA9IGxvY2FsZS50aW1lLFxuICAgICAgbG9jYWxlX3BlcmlvZHMgPSBsb2NhbGUucGVyaW9kcyxcbiAgICAgIGxvY2FsZV93ZWVrZGF5cyA9IGxvY2FsZS5kYXlzLFxuICAgICAgbG9jYWxlX3Nob3J0V2Vla2RheXMgPSBsb2NhbGUuc2hvcnREYXlzLFxuICAgICAgbG9jYWxlX21vbnRocyA9IGxvY2FsZS5tb250aHMsXG4gICAgICBsb2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7XG5cbiAgdmFyIHBlcmlvZFJlID0gZm9ybWF0UmUobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICB3ZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBtb250aFJlID0gZm9ybWF0UmUobG9jYWxlX21vbnRocyksXG4gICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydE1vbnRocyksXG4gICAgICBzaG9ydE1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7XG5cbiAgdmFyIGZvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0V2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0TW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJmXCI6IGZvcm1hdE1pY3Jvc2Vjb25kcyxcbiAgICBcIkhcIjogZm9ybWF0SG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdERheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0TWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0TWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0UGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0U2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0V2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0V2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0V2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0V2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0WWVhcixcbiAgICBcIllcIjogZm9ybWF0RnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFpvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHV0Y0Zvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFVUQ1Nob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0VVRDV2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0VVRDU2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0VVRDTW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJmXCI6IGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyxcbiAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRVVENRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0VVRDV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcbiAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHBhcnNlcyA9IHtcbiAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICBcImJcIjogcGFyc2VTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxuICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgIFwiZFwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImZcIjogcGFyc2VNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IHBhcnNlSG91cjI0LFxuICAgIFwiSVwiOiBwYXJzZUhvdXIyNCxcbiAgICBcImpcIjogcGFyc2VEYXlPZlllYXIsXG4gICAgXCJMXCI6IHBhcnNlTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBwYXJzZU1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBwYXJzZU1pbnV0ZXMsXG4gICAgXCJwXCI6IHBhcnNlUGVyaW9kLFxuICAgIFwicVwiOiBwYXJzZVF1YXJ0ZXIsXG4gICAgXCJRXCI6IHBhcnNlVW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogcGFyc2VTZWNvbmRzLFxuICAgIFwidVwiOiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IHBhcnNlV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogcGFyc2VXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IHBhcnNlV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogcGFyc2VMb2NhbGVEYXRlLFxuICAgIFwiWFwiOiBwYXJzZUxvY2FsZVRpbWUsXG4gICAgXCJ5XCI6IHBhcnNlWWVhcixcbiAgICBcIllcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIlpcIjogcGFyc2Vab25lLFxuICAgIFwiJVwiOiBwYXJzZUxpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgLy8gVGhlc2UgcmVjdXJzaXZlIGRpcmVjdGl2ZSBkZWZpbml0aW9ucyBtdXN0IGJlIGRlZmVycmVkLlxuICBmb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCBmb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgdXRjRm9ybWF0cyk7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllciwgZm9ybWF0cykge1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICB2YXIgc3RyaW5nID0gW10sXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIGogPSAwLFxuICAgICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICAgIGMsXG4gICAgICAgICAgcGFkLFxuICAgICAgICAgIGZvcm1hdDtcblxuICAgICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSBkYXRlID0gbmV3IERhdGUoK2RhdGUpO1xuXG4gICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSkgPT09IDM3KSB7XG4gICAgICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgICAgICBpZiAoKHBhZCA9IHBhZHNbYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKV0pICE9IG51bGwpIGMgPSBzcGVjaWZpZXIuY2hhckF0KCsraSk7XG4gICAgICAgICAgZWxzZSBwYWQgPSBjID09PSBcImVcIiA/IFwiIFwiIDogXCIwXCI7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9IGZvcm1hdHNbY10pIGMgPSBmb3JtYXQoZGF0ZSwgcGFkKTtcbiAgICAgICAgICBzdHJpbmcucHVzaChjKTtcbiAgICAgICAgICBqID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgIHJldHVybiBzdHJpbmcuam9pbihcIlwiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbmV3UGFyc2Uoc3BlY2lmaWVyLCBaKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIGQgPSBuZXdEYXRlKDE5MDAsIHVuZGVmaW5lZCwgMSksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApLFxuICAgICAgICAgIHdlZWssIGRheTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBJZiBhIFVOSVggdGltZXN0YW1wIGlzIHNwZWNpZmllZCwgcmV0dXJuIGl0LlxuICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xuICAgICAgaWYgKFwic1wiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLnMgKiAxMDAwICsgKFwiTFwiIGluIGQgPyBkLkwgOiAwKSk7XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgdXRjUGFyc2UsIG5ldmVyIHVzZSB0aGUgbG9jYWwgdGltZXpvbmUuXG4gICAgICBpZiAoWiAmJiAhKFwiWlwiIGluIGQpKSBkLlogPSAwO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIElmIHRoZSBtb250aCB3YXMgbm90IHNwZWNpZmllZCwgaW5oZXJpdCBmcm9tIHRoZSBxdWFydGVyLlxuICAgICAgaWYgKGQubSA9PT0gdW5kZWZpbmVkKSBkLm0gPSBcInFcIiBpbiBkID8gZC5xIDogMDtcblxuICAgICAgLy8gQ29udmVydCBkYXktb2Ytd2VlayBhbmQgd2Vlay1vZi15ZWFyIHRvIGRheS1vZi15ZWFyLlxuICAgICAgaWYgKFwiVlwiIGluIGQpIHtcbiAgICAgICAgaWYgKGQuViA8IDEgfHwgZC5WID4gNTMpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gMTtcbiAgICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldFVUQ0RheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHV0Y01vbmRheS5jZWlsKHdlZWspIDogdXRjTW9uZGF5KHdlZWspO1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXRVVENEYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdlZWsgPSBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKSwgZGF5ID0gd2Vlay5nZXREYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB0aW1lTW9uZGF5LmNlaWwod2VlaykgOiB0aW1lTW9uZGF5KHdlZWspO1xuICAgICAgICAgIHdlZWsgPSB0aW1lRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0RGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcIldcIiBpbiBkIHx8IFwiVVwiIGluIGQpIHtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IFwidVwiIGluIGQgPyBkLnUgJSA3IDogXCJXXCIgaW4gZCA/IDEgOiAwO1xuICAgICAgICBkYXkgPSBcIlpcIiBpbiBkID8gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldFVUQ0RheSgpIDogbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBsb2NhbERhdGUoZCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nLCBqKSB7XG4gICAgdmFyIGkgPSAwLFxuICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgbSA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgIGMsXG4gICAgICAgIHBhcnNlO1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBpZiAoaiA+PSBtKSByZXR1cm4gLTE7XG4gICAgICBjID0gc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIGlmIChjID09PSAzNykge1xuICAgICAgICBjID0gc3BlY2lmaWVyLmNoYXJBdChpKyspO1xuICAgICAgICBwYXJzZSA9IHBhcnNlc1tjIGluIHBhZHMgPyBzcGVjaWZpZXIuY2hhckF0KGkrKykgOiBjXTtcbiAgICAgICAgaWYgKCFwYXJzZSB8fCAoKGogPSBwYXJzZShkLCBzdHJpbmcsIGopKSA8IDApKSByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGMgIT0gc3RyaW5nLmNoYXJDb2RlQXQoaisrKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGo7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVBlcmlvZChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHBlcmlvZFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLnAgPSBwZXJpb2RMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydFdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydFdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gc2hvcnRXZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gd2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0TW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydE1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IHNob3J0TW9udGhMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IG1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlVGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV90aW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UXVhcnRlcihkKSB7XG4gICAgcmV0dXJuIDEgKyB+fihkLmdldE1vbnRoKCkgLyAzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1F1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRVVENNb250aCgpIC8gMyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgZm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIGZhbHNlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgdHJ1ZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBwYWRzID0ge1wiLVwiOiBcIlwiLCBcIl9cIjogXCIgXCIsIFwiMFwiOiBcIjBcIn0sXG4gICAgbnVtYmVyUmUgPSAvXlxccypcXGQrLywgLy8gbm90ZTogaWdub3JlcyBuZXh0IGRpcmVjdGl2ZVxuICAgIHBlcmNlbnRSZSA9IC9eJS8sXG4gICAgcmVxdW90ZVJlID0gL1tcXFxcXiQqKz98W1xcXSgpLnt9XS9nO1xuXG5mdW5jdGlvbiBwYWQodmFsdWUsIGZpbGwsIHdpZHRoKSB7XG4gIHZhciBzaWduID0gdmFsdWUgPCAwID8gXCItXCIgOiBcIlwiLFxuICAgICAgc3RyaW5nID0gKHNpZ24gPyAtdmFsdWUgOiB2YWx1ZSkgKyBcIlwiLFxuICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpICsgc3RyaW5nIDogc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gcmVxdW90ZShzKSB7XG4gIHJldHVybiBzLnJlcGxhY2UocmVxdW90ZVJlLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmUobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyBuYW1lcy5tYXAocmVxdW90ZSkuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMb29rdXAobmFtZXMpIHtcbiAgdmFyIG1hcCA9IHt9LCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBtYXBbbmFtZXNbaV0udG9Mb3dlckNhc2UoKV0gPSBpO1xuICByZXR1cm4gbWFwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC53ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJJU08oZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5WID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVsbFllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDQpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdICsgKCtuWzBdID4gNjggPyAxOTAwIDogMjAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2Vab25lKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IC9eKFopfChbKy1dXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPy8uZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5aID0gblsxXSA/IDAgOiAtKG5bMl0gKyAoblszXSB8fCBcIjAwXCIpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVF1YXJ0ZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC5xID0gblswXSAqIDMgLSAzLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTW9udGhOdW1iZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gblswXSAtIDEsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZk1vbnRoKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQubSA9IDAsIGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSG91cjI0KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuSCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWludXRlcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLk0gPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5TID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWxsaXNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWNyb3NlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gTWF0aC5mbG9vcihuWzBdIC8gMTAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaXRlcmFsUGVyY2VudChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBwZXJjZW50UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyBpICsgblswXS5sZW5ndGggOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQucyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdGltZURheS5jb3VudCh0aW1lWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZVN1bmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB0aW1lVGh1cnNkYXkoZCkgOiB0aW1lVGh1cnNkYXkuY2VpbChkKTtcbiAgcmV0dXJuIHBhZCh0aW1lVGh1cnNkYXkuY291bnQodGltZVllYXIoZCksIGQpICsgKHRpbWVZZWFyKGQpLmdldERheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXREYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZU1vbmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKHV0Y1RodXJzZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpICsgKHV0Y1llYXIoZCkuZ2V0VVRDRGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldFVUQ0RheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNNb25kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcbiAgcmV0dXJuIFwiKzAwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGl0ZXJhbFBlcmNlbnQoKSB7XG4gIHJldHVybiBcIiVcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcChkKSB7XG4gIHJldHVybiArZDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMoZCkge1xuICByZXR1cm4gTWF0aC5mbG9vcigrZCAvIDEwMDApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-time-format/src/locale.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/day.js":
/*!*****************************************!*\
  !*** ./node_modules/d3-time/src/day.js ***!
  \*****************************************/
/*! exports provided: default, days */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"days\", function() { return days; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nvar day = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setDate(date.getDate() + step);\n}, function(start, end) {\n  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationMinute\"]) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationDay\"];\n}, function(date) {\n  return date.getDate() - 1;\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (day);\nvar days = day.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2RheS5qcz83NDJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBkYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkYXk7XG5leHBvcnQgdmFyIGRheXMgPSBkYXkucmFuZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/day.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/duration.js":
/*!**********************************************!*\
  !*** ./node_modules/d3-time/src/duration.js ***!
  \**********************************************/
/*! exports provided: durationSecond, durationMinute, durationHour, durationDay, durationWeek */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"durationSecond\", function() { return durationSecond; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"durationMinute\", function() { return durationMinute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"durationHour\", function() { return durationHour; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"durationDay\", function() { return durationDay; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"durationWeek\", function() { return durationWeek; });\nvar durationSecond = 1e3;\nvar durationMinute = 6e4;\nvar durationHour = 36e5;\nvar durationDay = 864e5;\nvar durationWeek = 6048e5;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanM/MTczOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIGR1cmF0aW9uU2Vjb25kID0gMWUzO1xuZXhwb3J0IHZhciBkdXJhdGlvbk1pbnV0ZSA9IDZlNDtcbmV4cG9ydCB2YXIgZHVyYXRpb25Ib3VyID0gMzZlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25EYXkgPSA4NjRlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25XZWVrID0gNjA0OGU1O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/duration.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/hour.js":
/*!******************************************!*\
  !*** ./node_modules/d3-time/src/hour.js ***!
  \******************************************/
/*! exports provided: default, hours */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hours\", function() { return hours; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nvar hour = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationSecond\"] - date.getMinutes() * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationMinute\"]);\n}, function(date, step) {\n  date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationHour\"]);\n}, function(start, end) {\n  return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationHour\"];\n}, function(date) {\n  return date.getHours();\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hour);\nvar hours = hour.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzP2IzYzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91ciwgZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG52YXIgaG91ciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gZGF0ZS5nZXRTZWNvbmRzKCkgKiBkdXJhdGlvblNlY29uZCAtIGRhdGUuZ2V0TWludXRlcygpICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgaG91cjtcbmV4cG9ydCB2YXIgaG91cnMgPSBob3VyLnJhbmdlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/hour.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/index.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-time/src/index.js ***!
  \*******************************************/
/*! exports provided: timeInterval, timeMillisecond, timeMilliseconds, utcMillisecond, utcMilliseconds, timeSecond, timeSeconds, utcSecond, utcSeconds, timeMinute, timeMinutes, timeHour, timeHours, timeDay, timeDays, timeWeek, timeWeeks, timeSunday, timeSundays, timeMonday, timeMondays, timeTuesday, timeTuesdays, timeWednesday, timeWednesdays, timeThursday, timeThursdays, timeFriday, timeFridays, timeSaturday, timeSaturdays, timeMonth, timeMonths, timeYear, timeYears, utcMinute, utcMinutes, utcHour, utcHours, utcDay, utcDays, utcWeek, utcWeeks, utcSunday, utcSundays, utcMonday, utcMondays, utcTuesday, utcTuesdays, utcWednesday, utcWednesdays, utcThursday, utcThursdays, utcFriday, utcFridays, utcSaturday, utcSaturdays, utcMonth, utcMonths, utcYear, utcYears */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeInterval\", function() { return _interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _millisecond_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./millisecond.js */ \"./node_modules/d3-time/src/millisecond.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeMillisecond\", function() { return _millisecond_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeMilliseconds\", function() { return _millisecond_js__WEBPACK_IMPORTED_MODULE_1__[\"milliseconds\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcMillisecond\", function() { return _millisecond_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcMilliseconds\", function() { return _millisecond_js__WEBPACK_IMPORTED_MODULE_1__[\"milliseconds\"]; });\n\n/* harmony import */ var _second_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./second.js */ \"./node_modules/d3-time/src/second.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeSecond\", function() { return _second_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeSeconds\", function() { return _second_js__WEBPACK_IMPORTED_MODULE_2__[\"seconds\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcSecond\", function() { return _second_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcSeconds\", function() { return _second_js__WEBPACK_IMPORTED_MODULE_2__[\"seconds\"]; });\n\n/* harmony import */ var _minute_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./minute.js */ \"./node_modules/d3-time/src/minute.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeMinute\", function() { return _minute_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeMinutes\", function() { return _minute_js__WEBPACK_IMPORTED_MODULE_3__[\"minutes\"]; });\n\n/* harmony import */ var _hour_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hour.js */ \"./node_modules/d3-time/src/hour.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeHour\", function() { return _hour_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeHours\", function() { return _hour_js__WEBPACK_IMPORTED_MODULE_4__[\"hours\"]; });\n\n/* harmony import */ var _day_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./day.js */ \"./node_modules/d3-time/src/day.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeDay\", function() { return _day_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeDays\", function() { return _day_js__WEBPACK_IMPORTED_MODULE_5__[\"days\"]; });\n\n/* harmony import */ var _week_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./week.js */ \"./node_modules/d3-time/src/week.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeWeek\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"sunday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeWeeks\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"sundays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeSunday\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"sunday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeSundays\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"sundays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeMonday\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"monday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeMondays\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"mondays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeTuesday\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"tuesday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeTuesdays\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"tuesdays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeWednesday\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"wednesday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeWednesdays\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"wednesdays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeThursday\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"thursday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeThursdays\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"thursdays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeFriday\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"friday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeFridays\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"fridays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeSaturday\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"saturday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeSaturdays\", function() { return _week_js__WEBPACK_IMPORTED_MODULE_6__[\"saturdays\"]; });\n\n/* harmony import */ var _month_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./month.js */ \"./node_modules/d3-time/src/month.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeMonth\", function() { return _month_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeMonths\", function() { return _month_js__WEBPACK_IMPORTED_MODULE_7__[\"months\"]; });\n\n/* harmony import */ var _year_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./year.js */ \"./node_modules/d3-time/src/year.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeYear\", function() { return _year_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timeYears\", function() { return _year_js__WEBPACK_IMPORTED_MODULE_8__[\"years\"]; });\n\n/* harmony import */ var _utcMinute_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utcMinute.js */ \"./node_modules/d3-time/src/utcMinute.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcMinute\", function() { return _utcMinute_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcMinutes\", function() { return _utcMinute_js__WEBPACK_IMPORTED_MODULE_9__[\"utcMinutes\"]; });\n\n/* harmony import */ var _utcHour_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utcHour.js */ \"./node_modules/d3-time/src/utcHour.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcHour\", function() { return _utcHour_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcHours\", function() { return _utcHour_js__WEBPACK_IMPORTED_MODULE_10__[\"utcHours\"]; });\n\n/* harmony import */ var _utcDay_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utcDay.js */ \"./node_modules/d3-time/src/utcDay.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcDay\", function() { return _utcDay_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcDays\", function() { return _utcDay_js__WEBPACK_IMPORTED_MODULE_11__[\"utcDays\"]; });\n\n/* harmony import */ var _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utcWeek.js */ \"./node_modules/d3-time/src/utcWeek.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcWeek\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcSunday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcWeeks\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcSundays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcSunday\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcSunday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcSundays\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcSundays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcMonday\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcMonday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcMondays\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcMondays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcTuesday\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcTuesday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcTuesdays\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcTuesdays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcWednesday\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcWednesday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcWednesdays\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcWednesdays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcThursday\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcThursday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcThursdays\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcThursdays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcFriday\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcFriday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcFridays\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcFridays\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcSaturday\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcSaturday\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcSaturdays\", function() { return _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__[\"utcSaturdays\"]; });\n\n/* harmony import */ var _utcMonth_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utcMonth.js */ \"./node_modules/d3-time/src/utcMonth.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcMonth\", function() { return _utcMonth_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcMonths\", function() { return _utcMonth_js__WEBPACK_IMPORTED_MODULE_13__[\"utcMonths\"]; });\n\n/* harmony import */ var _utcYear_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utcYear.js */ \"./node_modules/d3-time/src/utcYear.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcYear\", function() { return _utcYear_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"utcYears\", function() { return _utcYear_js__WEBPACK_IMPORTED_MODULE_14__[\"utcYears\"]; });\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\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW5kZXguanM/YjYwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVJbnRlcnZhbFxufSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVNaWxsaXNlY29uZCxcbiAgbWlsbGlzZWNvbmRzIGFzIHRpbWVNaWxsaXNlY29uZHMsXG4gIGRlZmF1bHQgYXMgdXRjTWlsbGlzZWNvbmQsXG4gIG1pbGxpc2Vjb25kcyBhcyB1dGNNaWxsaXNlY29uZHNcbn0gZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lU2Vjb25kLFxuICBzZWNvbmRzIGFzIHRpbWVTZWNvbmRzLFxuICBkZWZhdWx0IGFzIHV0Y1NlY29uZCxcbiAgc2Vjb25kcyBhcyB1dGNTZWNvbmRzXG59IGZyb20gXCIuL3NlY29uZC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVNaW51dGUsXG4gIG1pbnV0ZXMgYXMgdGltZU1pbnV0ZXNcbn0gZnJvbSBcIi4vbWludXRlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZUhvdXIsXG4gIGhvdXJzIGFzIHRpbWVIb3Vyc1xufSBmcm9tIFwiLi9ob3VyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZURheSxcbiAgZGF5cyBhcyB0aW1lRGF5c1xufSBmcm9tIFwiLi9kYXkuanNcIjtcblxuZXhwb3J0IHtcbiAgc3VuZGF5IGFzIHRpbWVXZWVrLFxuICBzdW5kYXlzIGFzIHRpbWVXZWVrcyxcbiAgc3VuZGF5IGFzIHRpbWVTdW5kYXksXG4gIHN1bmRheXMgYXMgdGltZVN1bmRheXMsXG4gIG1vbmRheSBhcyB0aW1lTW9uZGF5LFxuICBtb25kYXlzIGFzIHRpbWVNb25kYXlzLFxuICB0dWVzZGF5IGFzIHRpbWVUdWVzZGF5LFxuICB0dWVzZGF5cyBhcyB0aW1lVHVlc2RheXMsXG4gIHdlZG5lc2RheSBhcyB0aW1lV2VkbmVzZGF5LFxuICB3ZWRuZXNkYXlzIGFzIHRpbWVXZWRuZXNkYXlzLFxuICB0aHVyc2RheSBhcyB0aW1lVGh1cnNkYXksXG4gIHRodXJzZGF5cyBhcyB0aW1lVGh1cnNkYXlzLFxuICBmcmlkYXkgYXMgdGltZUZyaWRheSxcbiAgZnJpZGF5cyBhcyB0aW1lRnJpZGF5cyxcbiAgc2F0dXJkYXkgYXMgdGltZVNhdHVyZGF5LFxuICBzYXR1cmRheXMgYXMgdGltZVNhdHVyZGF5c1xufSBmcm9tIFwiLi93ZWVrLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZU1vbnRoLFxuICBtb250aHMgYXMgdGltZU1vbnRoc1xufSBmcm9tIFwiLi9tb250aC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVZZWFyLFxuICB5ZWFycyBhcyB0aW1lWWVhcnNcbn0gZnJvbSBcIi4veWVhci5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHV0Y01pbnV0ZSxcbiAgdXRjTWludXRlcyBhcyB1dGNNaW51dGVzXG59IGZyb20gXCIuL3V0Y01pbnV0ZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHV0Y0hvdXIsXG4gIHV0Y0hvdXJzIGFzIHV0Y0hvdXJzXG59IGZyb20gXCIuL3V0Y0hvdXIuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB1dGNEYXksXG4gIHV0Y0RheXMgYXMgdXRjRGF5c1xufSBmcm9tIFwiLi91dGNEYXkuanNcIjtcblxuZXhwb3J0IHtcbiAgdXRjU3VuZGF5IGFzIHV0Y1dlZWssXG4gIHV0Y1N1bmRheXMgYXMgdXRjV2Vla3MsXG4gIHV0Y1N1bmRheSBhcyB1dGNTdW5kYXksXG4gIHV0Y1N1bmRheXMgYXMgdXRjU3VuZGF5cyxcbiAgdXRjTW9uZGF5IGFzIHV0Y01vbmRheSxcbiAgdXRjTW9uZGF5cyBhcyB1dGNNb25kYXlzLFxuICB1dGNUdWVzZGF5IGFzIHV0Y1R1ZXNkYXksXG4gIHV0Y1R1ZXNkYXlzIGFzIHV0Y1R1ZXNkYXlzLFxuICB1dGNXZWRuZXNkYXkgYXMgdXRjV2VkbmVzZGF5LFxuICB1dGNXZWRuZXNkYXlzIGFzIHV0Y1dlZG5lc2RheXMsXG4gIHV0Y1RodXJzZGF5IGFzIHV0Y1RodXJzZGF5LFxuICB1dGNUaHVyc2RheXMgYXMgdXRjVGh1cnNkYXlzLFxuICB1dGNGcmlkYXkgYXMgdXRjRnJpZGF5LFxuICB1dGNGcmlkYXlzIGFzIHV0Y0ZyaWRheXMsXG4gIHV0Y1NhdHVyZGF5IGFzIHV0Y1NhdHVyZGF5LFxuICB1dGNTYXR1cmRheXMgYXMgdXRjU2F0dXJkYXlzXG59IGZyb20gXCIuL3V0Y1dlZWsuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB1dGNNb250aCxcbiAgdXRjTW9udGhzIGFzIHV0Y01vbnRoc1xufSBmcm9tIFwiLi91dGNNb250aC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHV0Y1llYXIsXG4gIHV0Y1llYXJzIGFzIHV0Y1llYXJzXG59IGZyb20gXCIuL3V0Y1llYXIuanNcIjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFNQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBa0JBO0FBQ0E7QUFJQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBSUE7QUFDQTtBQWtCQTtBQUNBO0FBSUE7QUFDQTtBQUlBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/index.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/interval.js":
/*!**********************************************!*\
  !*** ./node_modules/d3-time/src/interval.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 newInterval; });\nvar t0 = new Date,\n    t1 = new Date;\n\nfunction newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = function(date) {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanM/MThlMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdDAgPSBuZXcgRGF0ZSxcbiAgICB0MSA9IG5ldyBEYXRlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9IGZ1bmN0aW9uKHRlc3QpIHtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xuICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsIC0xKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/interval.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/millisecond.js":
/*!*************************************************!*\
  !*** ./node_modules/d3-time/src/millisecond.js ***!
  \*************************************************/
/*! exports provided: default, milliseconds */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"milliseconds\", function() { return milliseconds; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n\n\nvar millisecond = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (millisecond);\nvar milliseconds = millisecond.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanM/MTgwOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIG1pbGxpc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gIC8vIG5vb3Bcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQgLSBzdGFydDtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG5taWxsaXNlY29uZC5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gaykgKiBrKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gaztcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtaWxsaXNlY29uZDtcbmV4cG9ydCB2YXIgbWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmQucmFuZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/millisecond.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/minute.js":
/*!********************************************!*\
  !*** ./node_modules/d3-time/src/minute.js ***!
  \********************************************/
/*! exports provided: default, minutes */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minutes\", function() { return minutes; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nvar minute = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationSecond\"]);\n}, function(date, step) {\n  date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationMinute\"]);\n}, function(start, end) {\n  return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationMinute\"];\n}, function(date) {\n  return date.getMinutes();\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (minute);\nvar minutes = minute.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbnV0ZS5qcz8yYzM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBtaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWludXRlO1xuZXhwb3J0IHZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/minute.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/month.js":
/*!*******************************************!*\
  !*** ./node_modules/d3-time/src/month.js ***!
  \*******************************************/
/*! exports provided: default, months */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"months\", function() { return months; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n\n\nvar month = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (month);\nvar months = month.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbW9udGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbW9udGguanM/OTYwMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIG1vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldERhdGUoMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0LmdldE1vbnRoKCkgKyAoZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbnRoO1xuZXhwb3J0IHZhciBtb250aHMgPSBtb250aC5yYW5nZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/month.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/second.js":
/*!********************************************!*\
  !*** ./node_modules/d3-time/src/second.js ***!
  \********************************************/
/*! exports provided: default, seconds */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"seconds\", function() { return seconds; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nvar second = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationSecond\"]);\n}, function(start, end) {\n  return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationSecond\"];\n}, function(date) {\n  return date.getUTCSeconds();\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (second);\nvar seconds = second.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvc2Vjb25kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcz81ZWRmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHNlY29uZCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvblNlY29uZDtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHNlY29uZDtcbmV4cG9ydCB2YXIgc2Vjb25kcyA9IHNlY29uZC5yYW5nZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/second.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/utcDay.js":
/*!********************************************!*\
  !*** ./node_modules/d3-time/src/utcDay.js ***!
  \********************************************/
/*! exports provided: default, utcDays */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcDays\", function() { return utcDays; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nvar utcDay = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationDay\"];\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (utcDay);\nvar utcDays = utcDay.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjRGF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcz82ZWIyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkRheX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHV0Y0RheSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjRGF5O1xuZXhwb3J0IHZhciB1dGNEYXlzID0gdXRjRGF5LnJhbmdlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/utcDay.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/utcHour.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-time/src/utcHour.js ***!
  \*********************************************/
/*! exports provided: default, utcHours */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcHours\", function() { return utcHours; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nvar utcHour = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationHour\"]);\n}, function(start, end) {\n  return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationHour\"];\n}, function(date) {\n  return date.getUTCHours();\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (utcHour);\nvar utcHours = utcHour.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjSG91ci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzP2Y2MjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91cn0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHV0Y0hvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y0hvdXI7XG5leHBvcnQgdmFyIHV0Y0hvdXJzID0gdXRjSG91ci5yYW5nZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/utcHour.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/utcMinute.js":
/*!***********************************************!*\
  !*** ./node_modules/d3-time/src/utcMinute.js ***!
  \***********************************************/
/*! exports provided: default, utcMinutes */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcMinutes\", function() { return utcMinutes; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nvar utcMinute = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationMinute\"]);\n}, function(start, end) {\n  return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationMinute\"];\n}, function(date) {\n  return date.getUTCMinutes();\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (utcMinute);\nvar utcMinutes = utcMinute.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTWludXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcz9mOGVlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHV0Y01pbnV0ZSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjTWludXRlO1xuZXhwb3J0IHZhciB1dGNNaW51dGVzID0gdXRjTWludXRlLnJhbmdlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/utcMinute.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/utcMonth.js":
/*!**********************************************!*\
  !*** ./node_modules/d3-time/src/utcMonth.js ***!
  \**********************************************/
/*! exports provided: default, utcMonths */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcMonths\", function() { return utcMonths; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n\n\nvar utcMonth = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (utcMonth);\nvar utcMonths = utcMonth.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTW9udGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTW9udGguanM/NTVmOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/utcMonth.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/utcWeek.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-time/src/utcWeek.js ***!
  \*********************************************/
/*! exports provided: utcSunday, utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSundays, utcMondays, utcTuesdays, utcWednesdays, utcThursdays, utcFridays, utcSaturdays */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcSunday\", function() { return utcSunday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcMonday\", function() { return utcMonday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcTuesday\", function() { return utcTuesday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcWednesday\", function() { return utcWednesday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcThursday\", function() { return utcThursday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcFriday\", function() { return utcFriday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcSaturday\", function() { return utcSaturday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcSundays\", function() { return utcSundays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcMondays\", function() { return utcMondays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcTuesdays\", function() { return utcTuesdays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcWednesdays\", function() { return utcWednesdays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcThursdays\", function() { return utcThursdays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcFridays\", function() { return utcFridays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcSaturdays\", function() { return utcSaturdays; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nfunction utcWeekday(i) {\n  return Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationWeek\"];\n  });\n}\n\nvar utcSunday = utcWeekday(0);\nvar utcMonday = utcWeekday(1);\nvar utcTuesday = utcWeekday(2);\nvar utcWednesday = utcWeekday(3);\nvar utcThursday = utcWeekday(4);\nvar utcFriday = utcWeekday(5);\nvar utcSaturday = utcWeekday(6);\n\nvar utcSundays = utcSunday.range;\nvar utcMondays = utcMonday.range;\nvar utcTuesdays = utcTuesday.range;\nvar utcWednesdays = utcWednesday.range;\nvar utcThursdays = utcThursday.range;\nvar utcFridays = utcFriday.range;\nvar utcSaturdays = utcSaturday.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjV2Vlay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzPzI3MzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gdXRjV2Vla2RheShpKSB7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHV0Y1N1bmRheSA9IHV0Y1dlZWtkYXkoMCk7XG5leHBvcnQgdmFyIHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHV0Y1R1ZXNkYXkgPSB1dGNXZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXkgPSB1dGNXZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgdmFyIHV0Y0ZyaWRheSA9IHV0Y1dlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHV0Y1NhdHVyZGF5ID0gdXRjV2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNNb25kYXlzID0gdXRjTW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5cyA9IHV0Y1R1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1RodXJzZGF5cyA9IHV0Y1RodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNGcmlkYXlzID0gdXRjRnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/utcWeek.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/utcYear.js":
/*!*********************************************!*\
  !*** ./node_modules/d3-time/src/utcYear.js ***!
  \*********************************************/
/*! exports provided: default, utcYears */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"utcYears\", function() { return utcYears; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n\n\nvar utcYear = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (utcYear);\nvar utcYears = utcYear.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjWWVhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNZZWFyLmpzPzc3YWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciB1dGNZZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGNZZWFyO1xuZXhwb3J0IHZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/utcYear.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/week.js":
/*!******************************************!*\
  !*** ./node_modules/d3-time/src/week.js ***!
  \******************************************/
/*! exports provided: sunday, monday, tuesday, wednesday, thursday, friday, saturday, sundays, mondays, tuesdays, wednesdays, thursdays, fridays, saturdays */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sunday\", function() { return sunday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"monday\", function() { return monday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"tuesday\", function() { return tuesday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wednesday\", function() { return wednesday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"thursday\", function() { return thursday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"friday\", function() { return friday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"saturday\", function() { return saturday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sundays\", function() { return sundays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mondays\", function() { return mondays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"tuesdays\", function() { return tuesdays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wednesdays\", function() { return wednesdays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"thursdays\", function() { return thursdays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fridays\", function() { return fridays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"saturdays\", function() { return saturdays; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-time/src/duration.js\");\n\n\n\nfunction weekday(i) {\n  return Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationMinute\"]) / _duration_js__WEBPACK_IMPORTED_MODULE_1__[\"durationWeek\"];\n  });\n}\n\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\n\nvar sundays = sunday.range;\nvar mondays = monday.range;\nvar tuesdays = tuesday.range;\nvar wednesdays = wednesday.range;\nvar thursdays = thursday.range;\nvar fridays = friday.range;\nvar saturdays = saturday.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzP2IxNGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlLCBkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIHdlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIChkYXRlLmdldERheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgc3VuZGF5ID0gd2Vla2RheSgwKTtcbmV4cG9ydCB2YXIgbW9uZGF5ID0gd2Vla2RheSgxKTtcbmV4cG9ydCB2YXIgdHVlc2RheSA9IHdlZWtkYXkoMik7XG5leHBvcnQgdmFyIHdlZG5lc2RheSA9IHdlZWtkYXkoMyk7XG5leHBvcnQgdmFyIHRodXJzZGF5ID0gd2Vla2RheSg0KTtcbmV4cG9ydCB2YXIgZnJpZGF5ID0gd2Vla2RheSg1KTtcbmV4cG9ydCB2YXIgc2F0dXJkYXkgPSB3ZWVrZGF5KDYpO1xuXG5leHBvcnQgdmFyIHN1bmRheXMgPSBzdW5kYXkucmFuZ2U7XG5leHBvcnQgdmFyIG1vbmRheXMgPSBtb25kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHR1ZXNkYXlzID0gdHVlc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgd2VkbmVzZGF5cyA9IHdlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdGh1cnNkYXlzID0gdGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIGZyaWRheXMgPSBmcmlkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHNhdHVyZGF5cyA9IHNhdHVyZGF5LnJhbmdlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/week.js\n");

/***/ }),

/***/ "./node_modules/d3-time/src/year.js":
/*!******************************************!*\
  !*** ./node_modules/d3-time/src/year.js ***!
  \******************************************/
/*! exports provided: default, years */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"years\", function() { return years; });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"./node_modules/d3-time/src/interval.js\");\n\n\nvar year = Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : Object(_interval_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (year);\nvar years = year.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMveWVhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzP2ExNWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciB5ZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnllYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB5ZWFyO1xuZXhwb3J0IHZhciB5ZWFycyA9IHllYXIucmFuZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/d3-time/src/year.js\n");

/***/ }),

/***/ "./src/build/export.graph.ts":
/*!***********************************!*\
  !*** ./src/build/export.graph.ts ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(/*! ../interface/graph */ \"./src/interface/graph.ts\"));\n__export(__webpack_require__(/*! ../interface/ui-base */ \"./src/interface/ui-base.ts\"));\n__export(__webpack_require__(/*! ../core/element-manager */ \"./src/core/element-manager.ts\"));\n__export(__webpack_require__(/*! ../core/color-manager */ \"./src/core/color-manager.ts\"));\n__export(__webpack_require__(/*! ../core/utilities */ \"./src/core/utilities.ts\"));\n__export(__webpack_require__(/*! ../core/web-utilities */ \"./src/core/web-utilities.ts\"));\n__export(__webpack_require__(/*! ../core/renderer */ \"./src/core/renderer.ts\"));\n__export(__webpack_require__(/*! ../core/svg-helper */ \"./src/core/svg-helper.ts\"));\n__export(__webpack_require__(/*! ../core/connected-graph/force */ \"./src/core/connected-graph/force.ts\"));\n__export(__webpack_require__(/*! ../core/connected-graph/sankey */ \"./src/core/connected-graph/sankey.ts\"));\n__export(__webpack_require__(/*! ../core/connected-graph/hierarchy */ \"./src/core/connected-graph/hierarchy.ts\"));\n__export(__webpack_require__(/*! ../core/connected-graph/port */ \"./src/core/connected-graph/port.ts\"));\n__export(__webpack_require__(/*! ../core/connected-graph/simple */ \"./src/core/connected-graph/simple.ts\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYnVpbGQvZXhwb3J0LmdyYXBoLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2J1aWxkL2V4cG9ydC5ncmFwaC50cz8zMjFiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4uL2ludGVyZmFjZS9ncmFwaCc7XG5leHBvcnQgKiBmcm9tICcuLi9pbnRlcmZhY2UvdWktYmFzZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4uL2NvcmUvZWxlbWVudC1tYW5hZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4uL2NvcmUvY29sb3ItbWFuYWdlcic7XG5leHBvcnQgKiBmcm9tICcuLi9jb3JlL3V0aWxpdGllcyc7XG5leHBvcnQgKiBmcm9tICcuLi9jb3JlL3dlYi11dGlsaXRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi4vY29yZS9yZW5kZXJlcic7XG5leHBvcnQgKiBmcm9tICcuLi9jb3JlL3N2Zy1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi4vY29yZS9jb25uZWN0ZWQtZ3JhcGgvZm9yY2UnO1xuZXhwb3J0ICogZnJvbSAnLi4vY29yZS9jb25uZWN0ZWQtZ3JhcGgvc2Fua2V5JztcbmV4cG9ydCAqIGZyb20gJy4uL2NvcmUvY29ubmVjdGVkLWdyYXBoL2hpZXJhcmNoeSc7XG5leHBvcnQgKiBmcm9tICcuLi9jb3JlL2Nvbm5lY3RlZC1ncmFwaC9wb3J0JztcbmV4cG9ydCAqIGZyb20gJy4uL2NvcmUvY29ubmVjdGVkLWdyYXBoL3NpbXBsZSc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/build/export.graph.ts\n");

/***/ }),

/***/ "./src/core/color-manager.ts":
/*!***********************************!*\
  !*** ./src/core/color-manager.ts ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction numberToHex(number) {\n    var hex = Number(number).toString(16);\n    return hex.length == 1 ? '0' + hex : hex;\n}\nfunction rgbToHex(color) {\n    let rgb = color.substring(color.indexOf('(') + 1, color.indexOf(')')).split(',');\n    return numberToHex(rgb[0]) + numberToHex(rgb[1]) + numberToHex(rgb[2]);\n}\n/** used to organize and create colors for the UI */\nclass ColorManager {\n    constructor(randomColorFunc) {\n        this._colorMap = {};\n        if (randomColorFunc) {\n            this.getRandomColor = randomColorFunc;\n        }\n        else {\n            this.getRandomColor = function () {\n                var letters = '0123456789ABCDEF';\n                var color = '#';\n                for (var i = 0; i < 6; i++) {\n                    color += letters[Math.floor(Math.random() * 16)];\n                }\n                return color;\n            };\n        }\n    }\n    /**\n     * check if an existing color exists for a given key\n     *\n     * @param the key associated with your data\n     */\n    hasColor(key) {\n        return this._colorMap.hasOwnProperty(key);\n    }\n    /**\n     * set the color associated with a given key\n     *\n     * @param key associated with your data\n     * @param color to associate with the key\n     */\n    setColor(key, color) {\n        if (color.indexOf('rgb') === 0) {\n            color = ColorManager.RgbToHex(color);\n        }\n        this._colorMap[key] = color;\n    }\n    /**\n     * get the color associated with a given key\n     *\n     * @param key associated with your data\n     */\n    getColor(key) {\n        if (!this.hasColor(key)) {\n            this._colorMap[key] = this.getRandomColor();\n        }\n        return this._colorMap[key];\n    }\n    static IntToHex(value) {\n        return '#' + value.toString(16).padStart(6, '0');\n    }\n    static RgbToHex(color) {\n        return '#' + rgbToHex(color);\n    }\n    static RgbToInt(color) {\n        return parseInt(rgbToHex(color), 16);\n    }\n}\nexports.ColorManager = ColorManager;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9jb2xvci1tYW5hZ2VyLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2NvcmUvY29sb3ItbWFuYWdlci50cz9mYWIzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIG51bWJlclRvSGV4KG51bWJlcjogc3RyaW5nKSB7XG4gICAgdmFyIGhleCA9IE51bWJlcihudW1iZXIpLnRvU3RyaW5nKDE2KTtcbiAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PSAxID8gJzAnICsgaGV4IDogaGV4O1xufVxuZnVuY3Rpb24gcmdiVG9IZXgoY29sb3I6IHN0cmluZykge1xuICAgIGxldCByZ2IgPSBjb2xvci5zdWJzdHJpbmcoY29sb3IuaW5kZXhPZignKCcpICsgMSwgY29sb3IuaW5kZXhPZignKScpKS5zcGxpdCgnLCcpO1xuICAgIHJldHVybiBudW1iZXJUb0hleChyZ2JbMF0pICsgbnVtYmVyVG9IZXgocmdiWzFdKSArIG51bWJlclRvSGV4KHJnYlsyXSk7XG59XG5cbi8qKiB1c2VkIHRvIG9yZ2FuaXplIGFuZCBjcmVhdGUgY29sb3JzIGZvciB0aGUgVUkgKi9cbmV4cG9ydCBjbGFzcyBDb2xvck1hbmFnZXIge1xuICAgIHByaXZhdGUgX2NvbG9yTWFwOiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcHJpdmF0ZSBnZXRSYW5kb21Db2xvcjogKCkgPT4gc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocmFuZG9tQ29sb3JGdW5jPzogKCkgPT4gc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NvbG9yTWFwID0ge31cbiAgICAgICAgaWYgKHJhbmRvbUNvbG9yRnVuYykge1xuICAgICAgICAgICAgdGhpcy5nZXRSYW5kb21Db2xvciA9IHJhbmRvbUNvbG9yRnVuYztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0UmFuZG9tQ29sb3IgPSBmdW5jdGlvbiAoKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICB2YXIgbGV0dGVycyA9ICcwMTIzNDU2Nzg5QUJDREVGJztcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSAnIyc7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3IgKz0gbGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNildO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVjayBpZiBhbiBleGlzdGluZyBjb2xvciBleGlzdHMgZm9yIGEgZ2l2ZW4ga2V5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggeW91ciBkYXRhXG4gICAgICovXG4gICAgcHVibGljIGhhc0NvbG9yKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xvck1hcC5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldCB0aGUgY29sb3IgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4ga2V5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IGFzc29jaWF0ZWQgd2l0aCB5b3VyIGRhdGFcbiAgICAgKiBAcGFyYW0gY29sb3IgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGtleVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDb2xvcihrZXk6IHN0cmluZywgY29sb3I6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgICAgIGlmIChjb2xvci5pbmRleE9mKCdyZ2InKSA9PT0gMCkge1xuICAgICAgICAgICAgY29sb3IgPSBDb2xvck1hbmFnZXIuUmdiVG9IZXgoY29sb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbG9yTWFwW2tleV0gPSBjb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIGNvbG9yIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleVxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBhc3NvY2lhdGVkIHdpdGggeW91ciBkYXRhXG4gICAgICovXG4gICAgcHVibGljIGdldENvbG9yKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0NvbG9yKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbG9yTWFwW2tleV0gPSB0aGlzLmdldFJhbmRvbUNvbG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yTWFwW2tleV07XG4gICAgfVxuXG4gICAgc3RhdGljIEludFRvSGV4KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJyMnICsgdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDYsICcwJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIFJnYlRvSGV4KGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJyMnICsgcmdiVG9IZXgoY29sb3IpO1xuICAgIH1cblxuICAgIHN0YXRpYyBSZ2JUb0ludChjb2xvcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJnYlRvSGV4KGNvbG9yKSwgMTYpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBbEVBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/core/color-manager.ts\n");

/***/ }),

/***/ "./src/core/connected-graph/base.ts":
/*!******************************************!*\
  !*** ./src/core/connected-graph/base.ts ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ui_base_1 = __webpack_require__(/*! ../../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst graph_1 = __webpack_require__(/*! ../../interface/graph */ \"./src/interface/graph.ts\");\nconst context_menu_1 = __webpack_require__(/*! ../context-menu */ \"./src/core/context-menu.ts\");\nconst interaction_state_1 = __webpack_require__(/*! ../interaction-state */ \"./src/core/interaction-state.ts\");\nconst utilities_1 = __webpack_require__(/*! ../utilities */ \"./src/core/utilities.ts\");\nconst tooltip_1 = __webpack_require__(/*! ../tooltip */ \"./src/core/tooltip.ts\");\nconst renderer_1 = __webpack_require__(/*! ../renderer */ \"./src/core/renderer.ts\");\nconst svg_helper_1 = __webpack_require__(/*! ../svg-helper */ \"./src/core/svg-helper.ts\");\nconst pixi_helper_1 = __webpack_require__(/*! ../pixi-helper */ \"./src/core/pixi-helper.ts\");\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\nconst PIXI = __webpack_require__(/*! pixi.js */ \"pixi.js\");\n/**\n * If you want to extend this class and its helpers then before rendering the links\n * you have to add source and target properties to the original links which are\n * the associated link from/to objects.\n */\nclass ConnectedGraphBase {\n    static addNode(node, nodeList, nodeMap) {\n        if (nodeMap.hasOwnProperty(node.key)) {\n            return nodeMap[node.key];\n        }\n        node.node = nodeList.length;\n        nodeMap[node.key] = node.node;\n        nodeList.push(node);\n        return node.node;\n    }\n    initializeGraph(def) {\n        // get the indicies for each key in the node list\n        if (!def.nodes) {\n            def.nodes = [];\n        }\n        let nodeMap = {};\n        for (let i = 0; i < def.nodes.length; ++i) {\n            let node = def.nodes[i];\n            node.node = i;\n            nodeMap[node.key] = i;\n        }\n        for (let i = 0; i < def.links.length; ++i) {\n            let link = def.links[i];\n            link.source = this.getLinkNode(link.from, def.nodes, nodeMap);\n            link.target = this.getLinkNode(link.to, def.nodes, nodeMap);\n        }\n    }\n    bind(renderer, graph, getSelectionString, getTooltipString) {\n        let self = this;\n        this.getSelectionString = getSelectionString ? getSelectionString :\n            (data) => {\n                return data.source.key + '-' + data.target.key;\n            };\n        this.getTooltipString = getTooltipString ? getTooltipString :\n            (data) => {\n                let ret;\n                if (data.source) {\n                    ret = data.source.key + ' → ' + data.target.key + '\\n' + data.value;\n                }\n                else {\n                    ret = data.key + '\\n';\n                    if (data.value !== undefined) {\n                        ret += data.value;\n                    }\n                }\n                return ret;\n            };\n        this.onHoverChanged = function (event) {\n            if (svg_helper_1.SVGRenderer.IS_RESIZING) {\n                return;\n            }\n            renderer.focus(graph, event);\n            if (graph.onHover) {\n                graph.onHover(event);\n            }\n            return true;\n        };\n        let myPrevHover; // used in callbacks\n        this.nodeHoverStart = function () {\n            let selection = this.__data__.key;\n            myPrevHover = selection;\n            return self.onHoverChanged({\n                caller: graph,\n                event: ui_base_1.EventType.HoverStart,\n                data: this.__data__,\n                selection: selection\n            });\n        }; // onHoverEnter\n        this.linkHoverStart = function () {\n            let selection = self.getSelectionString(this.__data__);\n            myPrevHover = selection;\n            return self.onHoverChanged({\n                caller: graph,\n                event: ui_base_1.EventType.HoverStart,\n                data: this.__data__,\n                selection: selection\n            });\n        }; // onHoverEnter\n        this.hoverEnd = function () {\n            let ret = self.onHoverChanged({\n                caller: graph,\n                event: ui_base_1.EventType.HoverEnd,\n                data: this.__data__,\n                selection: myPrevHover\n            });\n            myPrevHover = undefined;\n            return ret;\n        }; // onHoverLeave\n        this.getTooltipData = function (event) {\n            let data = event.data.data;\n            if (data) {\n                this._dataTooltip.setData(self.getTooltipString(data), []);\n            }\n            return [];\n        };\n        // Create the tooltip\n        // delay is 0 because the tooltip crosses divs and with a delay it causes\n        // flashing\n        let showTooltip = (d) => {\n            if (d.def) {\n                d = d.def;\n            }\n            let data = {\n                tooltip: self._dataTooltip,\n                data: d\n            };\n            let output;\n            if (graph.onTooltip) {\n                graph.onTooltip({ caller: graph, data: data });\n            }\n            else {\n                this.getTooltipData({ caller: graph, data: data });\n            }\n            return true;\n        };\n        this._dataTooltip = new tooltip_1.CustomDivTooltip(this._tooltipId, 'tooltip-t');\n        this._dataTooltip\n            .setAnalyticsName(this._tooltipAnalyticsName)\n            .setEnterCallback(showTooltip)\n            .setMoveCallback(showTooltip)\n            .setPlaceTooltipLeftRight()\n            .alwaysRecalcWidth(true)\n            .setDelay(0);\n        this.getLinkNode = (linkNode, nodes, nodeMap) => {\n            if (typeof linkNode === 'string' || linkNode instanceof String) {\n                return ConnectedGraphBase.addNode({ key: linkNode }, nodes, nodeMap);\n            }\n            return ConnectedGraphBase.addNode(linkNode, nodes, nodeMap);\n        };\n        // link helper stuff\n        this.getNextXY = (rect, portAlignment, fromXY, toXY) => {\n            switch (portAlignment) {\n                case ui_base_1.Alignment.Bottom:\n                case ui_base_1.Alignment.Top:\n                    if (fromXY.x < toXY.x) {\n                        return { x: rect.x + rect.width + 10, y: fromXY.y };\n                    }\n                    else {\n                        return { x: rect.x - 10, y: fromXY.y };\n                    }\n                case ui_base_1.Alignment.Left:\n                case ui_base_1.Alignment.Right:\n                    if (fromXY.y < toXY.y) {\n                        return { x: fromXY.x, y: rect.y + rect.height + 10 };\n                    }\n                    else {\n                        return { x: fromXY.x, y: rect.y - 10 };\n                    }\n            }\n        };\n        this.addElbow = (path, link, fromXY, toXY) => {\n            // have to be a little careful here, some diagrams have ports that stick out and\n            // some don't, the reason right now at least this does it based on alignment\n            // is so those without ports that stick out look ok.\n            // if we are going outside of our parent (in graphs with parents ) then it is very possible\n            // we may have a collision so throw in some randomness in the elbow offset\n            let isSameParent = link.source.node.from === link.source.node.to;\n            let elbowOffset = 0;\n            // get the entry point of the to node and draw the elbow line\n            switch (link.target.alignment) {\n                case ui_base_1.Alignment.Bottom:\n                    elbowOffset = isSameParent ? (fromXY.y + toXY.y) / 2 :\n                        (fromXY.y - toXY.y) * Math.random() + toXY.y;\n                    path.push({ x: fromXY.x, y: elbowOffset });\n                    path.push({ x: toXY.x, y: elbowOffset });\n                    break;\n                case ui_base_1.Alignment.Top:\n                    elbowOffset = isSameParent ? (fromXY.y + toXY.y) / 2 :\n                        (toXY.y - fromXY.y) * Math.random() + fromXY.y;\n                    path.push({ x: fromXY.x, y: elbowOffset });\n                    path.push({ x: toXY.x, y: elbowOffset });\n                    break;\n                case ui_base_1.Alignment.Left:\n                    elbowOffset = isSameParent ? (fromXY.x + toXY.x) / 2 :\n                        (toXY.x - fromXY.x) * Math.random() + fromXY.x;\n                    path.push({ x: elbowOffset, y: fromXY.y });\n                    path.push({ x: elbowOffset, y: toXY.y });\n                    break;\n                case ui_base_1.Alignment.Right:\n                    elbowOffset = isSameParent ? (fromXY.x + toXY.x) / 2 :\n                        (fromXY.x - toXY.x) * Math.random() + fromXY.x;\n                    path.push({ x: elbowOffset, y: fromXY.y });\n                    path.push({ x: elbowOffset, y: toXY.y });\n                    break;\n            }\n        };\n        /**\n         * create the paths to render simple elbow links using the link information provided\n         */\n        this.getElbowLinkPath = (link, fromXY, toXY) => {\n            let self = this;\n            let path = [];\n            // if we have ports that aren't opposite (like top/bottom or right/left) we need to\n            // adjust the input and output ports a bit\n            let portsAligned = (link.source.alignment === ui_base_1.Alignment.Left && link.target.alignment === ui_base_1.Alignment.Right) ||\n                (link.source.alignment === ui_base_1.Alignment.Right && link.target.alignment === ui_base_1.Alignment.Left) ||\n                (link.source.alignment === ui_base_1.Alignment.Top && link.target.alignment === ui_base_1.Alignment.Bottom) ||\n                (link.source.alignment === ui_base_1.Alignment.Bottom && link.target.alignment === ui_base_1.Alignment.Top);\n            // even if they are aligned if the nodes are positioned where the links will go through\n            // the ports then we adjust the ports\n            if (portsAligned) {\n                switch (link.source.alignment) {\n                    case ui_base_1.Alignment.Left:\n                        if (toXY.x > fromXY.x) {\n                            portsAligned = false;\n                        }\n                        break;\n                    case ui_base_1.Alignment.Right:\n                        if (toXY.x < fromXY.x) {\n                            portsAligned = false;\n                        }\n                        break;\n                    case ui_base_1.Alignment.Top:\n                        if (toXY.y > fromXY.y) {\n                            portsAligned = false;\n                        }\n                        break;\n                    case ui_base_1.Alignment.Bottom:\n                        if (toXY.y < fromXY.y) {\n                            portsAligned = false;\n                        }\n                        break;\n                }\n            }\n            if (portsAligned) {\n                switch (link.target.alignment) {\n                    case ui_base_1.Alignment.Left:\n                        if (toXY.x < fromXY.x) {\n                            portsAligned = false;\n                        }\n                        break;\n                    case ui_base_1.Alignment.Right:\n                        if (toXY.x > fromXY.x) {\n                            portsAligned = false;\n                        }\n                        break;\n                    case ui_base_1.Alignment.Top:\n                        if (toXY.y < fromXY.y) {\n                            portsAligned = false;\n                        }\n                        break;\n                    case ui_base_1.Alignment.Bottom:\n                        if (toXY.y > fromXY.y) {\n                            portsAligned = false;\n                        }\n                        break;\n                }\n            }\n            // if ports aren't aligned we need to add in a joint so it the link clears the node\n            // need the currentXY as we draw our path to make the joints look nice and even\n            if (portsAligned) {\n                // simple case where everything is in a nice place just add in the link\n                path.push(fromXY);\n                this.addElbow(path, link, fromXY, toXY);\n                path.push(toXY);\n            }\n            else {\n                let currentXY;\n                let nextXY;\n                // if the links need some additional lines to make the links not run through the nodes\n                // then do this...\n                path.push(fromXY);\n                // add additional link elbow due to help with alignment issues\n                let sourceXY = link.source.node;\n                currentXY = self.getNextXY(getCoordsAndCache(self._graphContainer, link.source.node), link.source.alignment, fromXY, toXY);\n                path.push(currentXY);\n                nextXY = self.getNextXY(getCoordsAndCache(self._graphContainer, link.target.node), link.target.alignment, toXY, fromXY);\n                this.addElbow(path, link, currentXY, nextXY);\n                path.push(nextXY);\n                path.push(toXY);\n            }\n            return path;\n        };\n        this.configureZoom = (xExtent, yExtent, height, width) => {\n            if (this._options.disableZoomViewUpdate) {\n                return;\n            }\n            let self = this;\n            let nodeWidth = (xExtent[1] - xExtent[0]);\n            let nodeHeight = (yExtent[1] - yExtent[0]);\n            let centerX = nodeWidth / 2 + xExtent[0];\n            let centerY = nodeHeight / 2 + yExtent[0];\n            let yScale = height / nodeHeight;\n            let xScale = width / nodeWidth;\n            let zoomedOutScale = Math.min(1, yScale, xScale);\n            self._zoom.scaleExtent([zoomedOutScale / 3, 1.5]);\n            if (self._options.fitToWindow) {\n                let zoomLevel = d3.zoomIdentity\n                    .translate((width / 2) - (centerX * zoomedOutScale), (height / 2) - (centerY * zoomedOutScale))\n                    .scale(zoomedOutScale);\n                self._graphContainer\n                    .call(self._zoom.transform, zoomLevel);\n            }\n            self._contextMenuItems.push({\n                title: 'Reset Graph',\n                action(elem, data, index) {\n                    if (self._options.fitToWindow) {\n                        let zoomLevel = d3.zoomIdentity\n                            .translate((width / 2) - (centerX * zoomedOutScale), (height / 2) - (centerY * zoomedOutScale))\n                            .scale(zoomedOutScale);\n                        self._graphContainer\n                            .transition()\n                            .duration(self.getAnimateDuration())\n                            .call(self._zoom.transform, zoomLevel);\n                    }\n                    else {\n                        self._graphContainer\n                            .transition()\n                            .duration(self.getAnimateDuration())\n                            .call(self._zoom.transform, d3.zoomIdentity);\n                    }\n                }\n            });\n        };\n        this.configureBrush = () => {\n            let self = this;\n            // a generic callback to handle brush selection events\n            function onBrushCallback(coords, eventType) {\n                if (!coords) {\n                    return false;\n                }\n                let chart = self._element;\n                let options = {\n                    event: eventType,\n                    xStart: coords[0][0],\n                    xEnd: coords[1][0],\n                    yStart: coords[0][1],\n                    yEnd: coords[1][1],\n                    caller: chart\n                };\n                if (chart.onBrush) {\n                    chart.onBrush(options);\n                }\n                return true;\n            }\n            let updateBrushTooltip = function (coords) {\n                if (coords === null) {\n                    return;\n                }\n                self._brushTooltip.setData('Selection', '(' + coords[0][0].toFixed(2) + ', ' + coords[0][1].toFixed(2) + ') - ' +\n                    '(' + coords[1][0].toFixed(2) + ', ' + coords[1][1].toFixed(2) + ')');\n            };\n            let brushStart = function (coords) {\n                self._brush.moveToFront();\n                updateBrushTooltip(coords);\n                self._dataTooltip.onMouseLeave(d3.event);\n                self._brushTooltip.onMouseEnter(d3.event);\n                self._brushTooltip.onMouseMove(d3.event);\n                return onBrushCallback(coords, ui_base_1.EventType.BrushStart);\n            };\n            let brushMove = function (coords) {\n                updateBrushTooltip(coords);\n                self._dataTooltip.onMouseLeave(d3.event);\n                self._brushTooltip.onMouseMove(d3.event);\n                return onBrushCallback(coords, ui_base_1.EventType.BrushMove);\n            };\n            let brushEnd = function (coords) {\n                self._brushTooltip.onMouseLeave(d3.event);\n                let brushContextMenuItems = self._element.brushContextMenuItems;\n                if (coords && brushContextMenuItems) {\n                    let contextMenuItems = [];\n                    for (let i = 0; i < brushContextMenuItems.length; ++i) {\n                        let bcmi = brushContextMenuItems[i];\n                        contextMenuItems.push({\n                            title: bcmi.title,\n                            action(elem, data, index) {\n                                data.xStart = coords[0][0];\n                                data.xEnd = coords[1][0];\n                                data.yStart = coords[0][1];\n                                data.yEnd = coords[1][1];\n                                bcmi.action(elem, data, index);\n                                onBrushCallback(coords, ui_base_1.EventType.BrushEnd);\n                            }\n                        });\n                    }\n                    context_menu_1.showContextMenu(d3.event.sourceEvent, {\n                        event: ui_base_1.EventType.BrushEnd,\n                        caller: self._element\n                    }, contextMenuItems);\n                }\n                else {\n                    let menus = document.getElementsByClassName('context-menu');\n                    if (menus.length > 0) {\n                        menus[0].style.display = 'none';\n                    }\n                }\n                // when moving with overlay for zoomed region leave the brush on top\n                if (!self._options.forceBrushToFront) {\n                    self._brush.moveToBack();\n                }\n                return true;\n            };\n            // the selection brush\n            self._svg.select('.brush').remove();\n            self._brushTooltip = new tooltip_1.OneLineTooltip('brush', 'tooltip-t');\n            self._brushTooltip\n                .setPlaceTooltipLeftRight()\n                .alwaysRecalcWidth(true)\n                .setDelay(0);\n            self._brush = new svg_helper_1.Brush()\n                .setXY(true)\n                .setTarget(self._svg.append('g').attr('class', 'brush'))\n                .setStartCallback(brushStart)\n                .setMoveCallback(brushMove)\n                .setEndCallback(brushEnd)\n                .setRect(self._svgRect)\n                .ready();\n            self._brush.moveToBack();\n        };\n    }\n    configureView(height, width) {\n        let xExtent = [Number.MAX_VALUE, -Number.MAX_VALUE];\n        let yExtent = [Number.MAX_VALUE, -Number.MAX_VALUE];\n        let graph = this._element;\n        graph.nodes.forEach(function (nodeDef) {\n            xExtent[0] = Math.min(xExtent[0], nodeDef.x);\n            xExtent[1] = Math.max(xExtent[1], nodeDef.x);\n            yExtent[0] = Math.min(yExtent[0], nodeDef.y);\n            yExtent[1] = Math.max(yExtent[1], nodeDef.y);\n        });\n        height = this.renderLegend(height);\n        this.bindZoom();\n        this.configureZoom(xExtent, yExtent, height, width);\n        this.configureContextMenu();\n        if (this._svg && !this._options.disableBrush) {\n            // set timeout to let svg size change\n            let self = this;\n            setTimeout(function () {\n                self.configureBrush();\n            }, 0);\n        }\n    }\n}\nexports.ConnectedGraphBase = ConnectedGraphBase;\nclass DiagramBase extends ConnectedGraphBase {\n    bind(renderer, graph) {\n        ConnectedGraphBase.prototype.bind.call(this, renderer, graph, (data) => {\n            return data.source.key + '-' + data.target.key;\n        }, (data) => {\n            let ret;\n            if (data.from) {\n                if (data.linkType &&\n                    (data.linkType & graph_1.LinkType.Directional) === graph_1.LinkType.Directional) {\n                    ret = data.from + ' \\u2192 ' + data.to + '\\n';\n                }\n                else {\n                    ret = data.from + ' \\u2194 ' + data.to + '\\n';\n                }\n            }\n            else if (data.port) {\n                ret = data.node.key + ':' + data.port.key;\n            }\n            else {\n                ret = data.label ? data.label : data.key;\n            }\n            return ret;\n        });\n    }\n}\nexports.DiagramBase = DiagramBase;\nclass D3ConnectedGraphSVG extends svg_helper_1.SVGRenderer {\n    constructor(element, renderer, parent) {\n        super();\n        this.initialize(element, renderer, parent);\n        this._graphContainer = this._svg;\n        ConnectedGraphBase.prototype.bind.call(this, renderer, element);\n    }\n    renderLegend(graphHeight) {\n        let self = this;\n        let graph = self._element;\n        if (graph.legend) {\n            let legendItems = [];\n            for (let i = 0; i < graph.nodes.length; ++i) {\n                let node = graph.nodes[i];\n                let key = node.type && node.type.length > 0 ? node.type[0] : node.key;\n                let elem = self._svg.select('.node.' + key);\n                legendItems.push({\n                    key: key,\n                    color: elem.style('fill'),\n                    opacity: elem.style('opacity')\n                });\n            }\n            // group colors mess up unless we remove duplicates here\n            let itemNames = {};\n            let legendMaxChars = 0;\n            for (let i = 0; i < legendItems.length; ++i) {\n                let item = legendItems[i];\n                if (!itemNames.hasOwnProperty(item.key)) {\n                    itemNames[item.key] = true;\n                    legendMaxChars = Math.max(item.key.length, legendMaxChars);\n                }\n            }\n            // render the legend\n            let marginTop = 10;\n            let d3Legend;\n            switch (graph.legend.alignment) {\n                case ui_base_1.Alignment.Top:\n                    d3Legend = new svg_helper_1.D3Legend(this._svg, graph.legend, graph.title, new ui_base_1.Rect(0, marginTop, this._svgRect.width, this._svgRect.height));\n                    break;\n                case ui_base_1.Alignment.Bottom:\n                    d3Legend = new svg_helper_1.D3Legend(this._svg, graph.legend, graph.title, new ui_base_1.Rect(0, this._svgRect.height - this.LEGEND_PADDING.Y.BOTTOM, this._svgRect.width, this._svgRect.height));\n                    break;\n                case ui_base_1.Alignment.Left:\n                    d3Legend = new svg_helper_1.D3Legend(this._svg, graph.legend, graph.title, new ui_base_1.Rect(0, marginTop, this._svgRect.width, this._svgRect.height));\n                    break;\n                case ui_base_1.Alignment.Right:\n                    d3Legend = new svg_helper_1.D3Legend(this._svg, graph.legend, graph.title, new ui_base_1.Rect(this._svgRect.width - (legendMaxChars * 10), marginTop, this._svgRect.width, this._svgRect.height));\n                    break;\n            }\n            d3Legend.addItems(legendItems);\n            d3Legend.render();\n            if (!graphHeight) {\n                graphHeight = this._options.height;\n            }\n            if (graph.legend.alignment === ui_base_1.Alignment.Top ||\n                graph.legend.alignment === ui_base_1.Alignment.Bottom) {\n                graphHeight += d3Legend.getRenderedRect().height;\n            }\n        }\n        return graphHeight;\n    }\n    bindZoom() {\n        if (this._options.disableZoomViewUpdate) {\n            return;\n        }\n        let self = this;\n        let graphArea = self._svg.select('.graphArea');\n        // add graph view area to allow us to pan/zoom it\n        function performZoom() {\n            graphArea.attr('transform', d3.event.transform);\n        }\n        self._zoom = d3.zoom().on('zoom', performZoom);\n        self._svg.call(self._zoom);\n        if (!self._element.api) {\n            self._element.api = {};\n        }\n        self._element.api.zoom = function (event) {\n            if (event.data) {\n                self._zoom.scaleTo(self._parent, event.data);\n            }\n        };\n        self._element.api.pan = function (event) {\n            self._zoom.translateTo(self._parent, event.xStart, event.yStart);\n        };\n    }\n    configureContextMenu() {\n        let self = this;\n        let graph = self._element;\n        if (graph.contextMenuItems) {\n            for (let i = 0; i < graph.contextMenuItems.length; ++i) {\n                self._contextMenuItems.push(graph.contextMenuItems[i]);\n            }\n        }\n        if (self.saveImage && self._options.enableSaveAsImage) {\n            let saveImageItem = {\n                title: 'Save As Image',\n                action: function (elem, data, index) {\n                    self.saveImage();\n                },\n                disabled: false // optional, defaults to false\n            };\n            self._contextMenuItems.push(saveImageItem);\n        }\n        // create anyc context menu\n        if (self._contextMenuItems.length > 0) {\n            self._parent.on('contextmenu', function (event) {\n                context_menu_1.showContextMenu(d3.event, undefined, self._contextMenuItems);\n            });\n        }\n    }\n    initializeGraphArea(options) {\n        this.loadOptions(options);\n        this._svg.selectAll('*').remove();\n        let graphArea = this._svg.append('g').classed('graphArea', true);\n        this._contextMenuItems = [];\n        return graphArea;\n    }\n    /**\n     * configure the hover requirements for a node\n     */\n    configureLinkHover(elem, link) {\n        let self = this;\n        elem.on('mouseenter', self.linkHoverStart)\n            .on('mouseleave', self.hoverEnd);\n        let graph = this._element;\n        svg_helper_1.addClickHelper(elem, self.getOptions(), graph.onClick, graph.onDoubleClick, graph.contextMenuItems, self._dataTooltip, graph, link.def);\n        let htmlNode = elem.node();\n        htmlNode['__data__'] = link;\n    }\n    initializeLinkLayer(graphArea) {\n        // go through and compute the link paths\n        graphArea.append('g')\n            .classed('links', true);\n    }\n    // TODO? Move this to D3ConnectedGraph so the simple graph can use this too?\n    renderLinkHelper(graphArea, renderedLinks, isUpdate) {\n        let self = this;\n        // render the links\n        let line = d3.line()\n            .x(function (d) { return d.x; })\n            .y(function (d) { return d.y; });\n        let curve = d3.line()\n            .x(function (d) { return d.x; })\n            .y(function (d) { return d.y; })\n            .curve(d3.curveBasis);\n        let linkGroup = graphArea.select('.links');\n        let getClasses = function (link) {\n            let classes = link.def.from + '-' + link.def.to +\n                ' ' + link.def.from + ' ' + link.def.to;\n            if (link.def.type && link.def.type.length > 0) {\n                for (let idx = 0; idx < link.def.type.length; ++idx) {\n                    classes += ' ' + utilities_1.getSelectionName(link.def.type[idx]);\n                }\n            }\n            return classes;\n        };\n        let getColor = function (link) {\n            if (link.def.color) {\n                return link.def.color;\n            }\n            if (link.def.type && link.def.type.length > 0) {\n                for (let idx = 0; idx < link.def.type.length; ++idx) {\n                    if (self._colorMgr.hasColor(link.def.type[idx])) {\n                        return self._colorMgr.getColor(link.def.type[idx]);\n                    }\n                }\n            }\n            return 'black';\n        };\n        // remove this existing link if it exists as this is render update\n        if (isUpdate) {\n            renderedLinks.forEach(function (link) {\n                let d3Link = graphArea.selectAll('.' + link.def.from + '-' + link.def.to +\n                    '.' + link.def.from + '.' + link.def.to);\n                d3Link.remove();\n            });\n        }\n        renderedLinks.forEach(function (renderedLink) {\n            let renderedLinkDef = renderedLink.def;\n            // could cache some of this stuff for performance reasons\n            let fromXY = self.getLinkStartXY(renderedLink);\n            let toXY = self.getLinkEndXY(renderedLink);\n            if ((renderedLinkDef.linkType & graph_1.LinkType.Linear) === graph_1.LinkType.Linear) {\n                renderedLink.path = [fromXY, toXY];\n            }\n            else {\n                renderedLink.path = self.getElbowLinkPath(renderedLink, fromXY, toXY);\n            }\n            let linkRenderer;\n            if (renderedLinkDef.linkType & graph_1.LinkType.Curve) {\n                linkRenderer = curve;\n            }\n            else {\n                linkRenderer = line;\n            }\n            let newLink = linkGroup\n                .append('path')\n                .attr('d', linkRenderer(renderedLink.path))\n                .classed(getClasses(renderedLink), true)\n                .classed('link', true)\n                .attr('fill', 'none')\n                .style('stroke', getColor(renderedLink))\n                .attr('stroke-width', renderedLinkDef.width ? renderedLinkDef.width : 2);\n            let arrow;\n            let endPoint;\n            if (renderedLinkDef.linkType & graph_1.LinkType.Directional ||\n                renderedLinkDef.linkType & graph_1.LinkType.Bidirectional) {\n                endPoint = renderedLink.path[renderedLink.path.length - 1];\n                arrow = svg_helper_1.Arrow.createArrow(linkGroup, 4)\n                    .classed(getClasses(renderedLink), true)\n                    .classed('arrow', true)\n                    .attr('fill', getColor(renderedLink))\n                    .attr('transform', 'translate(' + endPoint.x + ',' + endPoint.y + ') ' +\n                    'rotate( ' + svg_helper_1.Arrow.getAngle(renderedLink.path[renderedLink.path.length - 2], endPoint) + ')');\n            }\n            if (renderedLinkDef.linkType & graph_1.LinkType.Bidirectional) {\n                svg_helper_1.Arrow.createArrow(linkGroup, 4)\n                    .classed(getClasses(renderedLink), true)\n                    .classed('arrow', true)\n                    .attr('fill', getColor(renderedLink))\n                    .attr('transform', 'translate(' + renderedLink.path[0].x + ',' + renderedLink.path[0].y + ') ' +\n                    'rotate( ' + svg_helper_1.Arrow.getAngle(renderedLink.path[1], renderedLink.path[0]) + ')');\n            }\n            if (!isUpdate && self.getAnimateDuration() !== 0) {\n                svg_helper_1.animatePath(newLink, self.getAnimateDuration());\n                if (arrow) {\n                    svg_helper_1.Arrow.animateArrow(newLink, arrow, self.getAnimateDuration());\n                }\n            }\n            self.configureLinkHover(newLink, renderedLink);\n            self._dataTooltip.setTarget(newLink);\n        });\n    }\n    configureView() {\n        let height = this._options.height ? this._options.height : 400;\n        let width = this._options.width;\n        this._svg\n            .attr('width', width)\n            .attr('height', height);\n        ConnectedGraphBase.prototype.configureView.call(this, height, width);\n    }\n}\nexports.D3ConnectedGraphSVG = D3ConnectedGraphSVG;\nclass D3ConnectedGraphPixi extends renderer_1.UIElementRenderer {\n    constructor(element, renderer, parent) {\n        super();\n        this._element = element;\n        this._renderer = renderer;\n        this._options = {};\n        this._contextMenuItems = [];\n        this._tooltipId = 'd3-tooltip';\n        this._tooltipAnalyticsName = 'd3-ui-widget-toolkit';\n        this._parent = parent;\n        this._graphContainer = parent;\n        ConnectedGraphBase.prototype.bind.call(this, renderer, element);\n    }\n    /**\n     * @deprecated ('Deprecated since 1.14.0 in favor of focus.  Will be removed in 2.x')\n     * hover event\n     *\n     * @param event the event to pass to the renderer\n     */\n    hover(event) {\n        this.focus(event);\n    }\n    /**\n     * bring an item into focus\n     *\n     * @param event the event to focus on\n     */\n    focus(event) {\n        this._interactionState.focus(event);\n    }\n    /**\n     * select an item\n     *\n     * @param event the event to item on\n     */\n    select(event) {\n        this._interactionState.select(event);\n    }\n    /**\n     * brush event\n     * @param event the event to pass to the renderer\n     */\n    brush(event) {\n    }\n    changeCursor(event) {\n    }\n    getTooltipData(event) {\n        return [{ source: this._element, group: '', metrics: {} }];\n    }\n    getAnimateDuration() {\n        return this._options.animateDuration !== undefined ? this._options.animateDuration : 1000;\n    }\n    bindZoom() {\n        if (this._options.disableZoomViewUpdate) {\n            return;\n        }\n        let self = this;\n        let stage = self._stage;\n        function zoom() {\n            // itemDragging is a workaround to have d3 and pixi coexist for events\n            if (!stage.itemDragging) {\n                stage.position.set(d3.event.transform.x, d3.event.transform.y);\n                stage.scale.set(d3.event.transform.k, d3.event.transform.k);\n                self._pixiHelper.render();\n            }\n        }\n        self._zoom = d3.zoom().on('zoom', zoom);\n        self._parent.call(self._zoom);\n        // BIND ZOOM API\n        if (!self._element.api) {\n            self._element.api = {};\n        }\n        self._element.api.zoom = function (event) {\n            if (event.data) {\n                self._zoom.scaleTo(self._parent, event.data);\n            }\n        };\n        self._element.api.pan = function (event) {\n            self._zoom.translateTo(self._parent, event.xStart, event.yStart);\n        };\n    }\n    _focus(selection) {\n        if (selection) {\n            let items = this._pixiHelper.getSelection(selection);\n            if (items) {\n                items.forEach(function (elem) {\n                    elem._prevTint = elem.tint;\n                    elem.tint = 0x888888;\n                    elem.alpha = 0x88;\n                });\n            }\n            this._pixiHelper.render();\n        }\n    }\n    _unfocus(selection) {\n        let items = this._pixiHelper.getSelection(selection);\n        if (items) {\n            items.forEach(function (elem) {\n                elem.tint = elem._prevTint;\n                elem.alpha = 0xFF;\n            });\n        }\n        this._pixiHelper.render();\n    }\n    _select(selection) {\n        if (selection) {\n            let items = this._pixiHelper.getSelection(selection);\n            if (items) {\n                items.forEach(function (elem) {\n                    elem._prevTint = elem.tint;\n                    elem.tint = 0x888888;\n                    elem.alpha = 0x88;\n                });\n            }\n            this._pixiHelper.render();\n        }\n    }\n    _unselect(selection) {\n        let items = this._pixiHelper.getSelection(selection);\n        if (items) {\n            items.forEach(function (elem) {\n                elem.tint = elem._prevTint;\n                elem.alpha = 0xFF;\n            });\n        }\n        this._pixiHelper.render();\n    }\n    configureInteractionVisualization() {\n        let self = this;\n        this._interactionState = new interaction_state_1.InteractionState(function (selection) {\n            self._focus(selection);\n        }, function (selection) {\n            self._unfocus(selection);\n        }, false, function (selection) {\n            self._select(selection);\n        }, function (selection) {\n            self._unselect(selection);\n        });\n    }\n    configureContextMenu() {\n        let self = this;\n        let graph = self._element;\n        if (graph.contextMenuItems) {\n            for (let i = 0; i < graph.contextMenuItems.length; ++i) {\n                self._contextMenuItems.push(graph.contextMenuItems[i]);\n            }\n        }\n        // create anyc context menu\n        if (self._contextMenuItems.length > 0) {\n            self._parent.on('contextmenu', function (event) {\n                context_menu_1.showContextMenu(d3.event, undefined, self._contextMenuItems);\n            });\n        }\n    }\n    initializeGraphArea(options) {\n        this._contextMenuItems = [];\n        // create the graph area\n        utilities_1.merge(this._options, options);\n        let first = this._pixiHelper === undefined;\n        if (first) {\n            this._pixiHelper = new pixi_helper_1.PIXIHelper(!this.getOptions().forceCanvasRenderer);\n            this._pixi = this._pixiHelper.getRenderer();\n            this._parent.node().appendChild(this._pixi.view);\n            // Create the main stage for your display objects\n            this._stage = new PIXI.Container();\n            this._stage.interactive = true;\n            this.createArrowTexture();\n            this.configureInteractionVisualization();\n        }\n        this._stage.removeChildren();\n        return this._stage;\n    }\n    createArrowTexture() {\n        let arrow = new PIXI.Graphics();\n        arrow.beginFill(0x000000);\n        arrow.lineStyle(0, 0, 0);\n        let arrowSize = 9;\n        let rotation = 1.1;\n        arrow.moveTo(0, 0);\n        arrow.lineTo(arrowSize * Math.cos(rotation), arrowSize * Math.sin(rotation));\n        arrow.lineTo(-arrowSize * Math.cos(rotation), arrowSize * Math.sin(rotation));\n        arrow.lineTo(0, 0);\n        this._arrowTexture = this._pixi.generateTexture(arrow, PIXI.SCALE_MODES.LINEAR, 10);\n    }\n    createArrow(stage, to, from, linkType, alignment) {\n        let arrow = new PIXI.Sprite(this._arrowTexture);\n        arrow.anchor = new PIXI.ObservablePoint(undefined, undefined, .5, 0);\n        arrow.x = to.x;\n        arrow.y = to.y;\n        arrow.rotation = -Math.atan2(to.x - from.x, to.y - from.y);\n        switch (alignment) {\n            case ui_base_1.Alignment.Left:\n                arrow.rotation += Math.PI;\n                break;\n            case ui_base_1.Alignment.Right:\n                arrow.rotation += -Math.PI;\n                break;\n            case ui_base_1.Alignment.Top:\n                arrow.rotation += 3 * Math.PI / 2;\n                break;\n            case ui_base_1.Alignment.Bottom:\n                arrow.rotation += -Math.PI / 2;\n                break;\n        }\n        stage.addChild(arrow);\n    }\n    renderLinkHelper(stage, renderedLinks) {\n        let self = this;\n        if (self._pixiLinks) {\n            stage.removeChild(self._pixiLinks);\n            self._pixiLinks.destroy();\n            stage.removeChild(self._pixiArrows);\n            self._pixiArrows.destroy();\n        }\n        self._pixiLinks = new PIXI.Graphics();\n        stage.addChildAt(self._pixiLinks, 0);\n        self._pixiArrows = new PIXI.Container();\n        stage.addChildAt(self._pixiArrows, 1);\n        // remove this existing link if it exists as this is render update\n        renderedLinks.forEach(function (renderedLink) {\n            let renderedLinkDef = renderedLink.def;\n            self._pixiLinks.lineStyle(2, 0x888888, .4);\n            let fromXY = self.getLinkStartXY(renderedLink);\n            let toXY = self.getLinkEndXY(renderedLink);\n            if (renderedLinkDef.linkType & graph_1.LinkType.Linear) {\n                renderedLink.path = [fromXY, toXY];\n            }\n            else {\n                renderedLink.path = self.getElbowLinkPath(renderedLink, fromXY, toXY);\n            }\n            if (renderedLinkDef.linkType & graph_1.LinkType.Curve) {\n                self._pixiLinks.moveTo(renderedLink.path[0].x, renderedLink.path[0].y);\n                self._pixiLinks.bezierCurveTo(renderedLink.path[1].x, renderedLink.path[1].y, renderedLink.path[renderedLink.path.length - 2].x, renderedLink.path[renderedLink.path.length - 2].y, renderedLink.path[renderedLink.path.length - 1].x, renderedLink.path[renderedLink.path.length - 1].y);\n            }\n            else {\n                self._pixiLinks.moveTo(renderedLink.path[0].x, renderedLink.path[0].y);\n                for (let i = 1; i < renderedLink.path.length; ++i) {\n                    self._pixiLinks.lineTo(renderedLink.path[i].x, renderedLink.path[i].y);\n                }\n            }\n            if (renderedLinkDef.linkType & graph_1.LinkType.Bidirectional) {\n                self.createArrow(self._pixiArrows, renderedLink.path[0], renderedLink.path[1], renderedLinkDef.linkType, renderedLink.source.alignment);\n            }\n            if (renderedLinkDef.linkType & graph_1.LinkType.Directional ||\n                renderedLinkDef.linkType & graph_1.LinkType.Bidirectional) {\n                self.createArrow(self._pixiArrows, renderedLink.path[renderedLink.path.length - 1], renderedLink.path[renderedLink.path.length - 2], renderedLinkDef.linkType, renderedLink.target.alignment);\n            }\n        });\n    }\n    renderLegend(height) {\n        return height;\n    }\n    configureView() {\n        let height = this._options.height ? this._options.height : 400;\n        let width = this._options.width ? this._options.width :\n            this._parent.node().getBoundingClientRect().width;\n        this._pixi.resize(width, height);\n        ConnectedGraphBase.prototype.configureView.call(this, height, width);\n    }\n}\nexports.D3ConnectedGraphPixi = D3ConnectedGraphPixi;\nfunction getCoordsAndCache(svg, node) {\n    if (node.x === undefined) {\n        if (!node.d3selection) {\n            node.d3selection = d3.select(this);\n        }\n        utilities_1.merge(node, svg_helper_1.convertToSVGCoords(svg, node.d3selection));\n    }\n    return node;\n}\nexports.getCoordsAndCache = getCoordsAndCache;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9jb25uZWN0ZWQtZ3JhcGgvYmFzZS50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL3NyYy9jb3JlL2Nvbm5lY3RlZC1ncmFwaC9iYXNlLnRzPzAwOTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVhZVmFsdWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvY2hhcnQvc2VyaWVzLWRhdGEnO1xuaW1wb3J0IHtcbiAgICBJRXZlbnQsIElPcHRpb25zLCBJUmVjdCwgRXZlbnRUeXBlLCBBbGlnbm1lbnQsIFJlY3QsIFVJRWxlbWVudCxcbiAgICBJQ29udGV4dE1lbnVJdGVtLCBVSVJlbmRlcmVyLCBJTGVnZW5kSXRlbVxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvdWktYmFzZSc7XG5pbXBvcnQge1xuICAgIElEaWFncmFtTGluaywgSUdyYXBoTGluaywgSUdyYXBoTm9kZSwgSUNvbm5lY3RlZEdyYXBoLCBMaW5rVHlwZSxcbiAgICBJSGllcmFyY2h5R3JhcGgsIElQb3J0RGlhZ3JhbVxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvZ3JhcGgnO1xuaW1wb3J0IHsgc2hvd0NvbnRleHRNZW51IH0gZnJvbSAnLi4vY29udGV4dC1tZW51JztcbmltcG9ydCB7IEludGVyYWN0aW9uU3RhdGUgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi1zdGF0ZSc7XG5pbXBvcnQgeyBtZXJnZSwgZ2V0U2VsZWN0aW9uTmFtZSB9IGZyb20gJy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBDdXN0b21EaXZUb29sdGlwLCBPbmVMaW5lVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBVSUVsZW1lbnRSZW5kZXJlciB9IGZyb20gJy4uL3JlbmRlcmVyJztcbmltcG9ydCB7XG4gICAgYWRkQ2xpY2tIZWxwZXIsIGNvbnZlcnRUb1NWR0Nvb3JkcywgQnJ1c2gsIEQzTGVnZW5kLFxuICAgIFNWR1JlbmRlcmVyLCBBcnJvdywgYW5pbWF0ZVBhdGhcbn0gZnJvbSAnLi4vc3ZnLWhlbHBlcic7XG5cbmltcG9ydCB7XG4gICAgUElYSUhlbHBlclxufSBmcm9tICcuLi9waXhpLWhlbHBlcic7XG5cbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCAqIGFzIFBJWEkgZnJvbSAncGl4aS5qcyc7XG5cbi8qKlxuICogSWYgeW91IHdhbnQgdG8gZXh0ZW5kIHRoaXMgY2xhc3MgYW5kIGl0cyBoZWxwZXJzIHRoZW4gYmVmb3JlIHJlbmRlcmluZyB0aGUgbGlua3NcbiAqIHlvdSBoYXZlIHRvIGFkZCBzb3VyY2UgYW5kIHRhcmdldCBwcm9wZXJ0aWVzIHRvIHRoZSBvcmlnaW5hbCBsaW5rcyB3aGljaCBhcmVcbiAqIHRoZSBhc3NvY2lhdGVkIGxpbmsgZnJvbS90byBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGVkR3JhcGhCYXNlIHtcbiAgICBfcGFyZW50OiBhbnk7XG4gICAgX2dyYXBoQ29udGFpbmVyOiBhbnk7XG4gICAgX3pvb206IGQzLlpvb21CZWhhdmlvcjxFbGVtZW50LCB7fT47XG4gICAgX3N2ZzogYW55O1xuICAgIF9zdmdSZWN0OiBhbnk7XG5cbiAgICBfZWxlbWVudDogSUNvbm5lY3RlZEdyYXBoO1xuICAgIF9jb250ZXh0TWVudUl0ZW1zOiBJQ29udGV4dE1lbnVJdGVtW107XG4gICAgX2RhdGFUb29sdGlwOiBDdXN0b21EaXZUb29sdGlwO1xuICAgIF90b29sdGlwSWQ6IHN0cmluZztcbiAgICBfdG9vbHRpcEFuYWx5dGljc05hbWU6IHN0cmluZztcbiAgICBfb3B0aW9uczogSU9wdGlvbnM7XG5cbiAgICBfYnJ1c2g6IEJydXNoO1xuICAgIF9icnVzaFRvb2x0aXA6IE9uZUxpbmVUb29sdGlwO1xuXG4gICAgb25Ib3ZlckNoYW5nZWQ6IChldmVudD86IElFdmVudCkgPT4gdm9pZDtcbiAgICBub2RlSG92ZXJTdGFydDogKCkgPT4gdm9pZDtcbiAgICBsaW5rSG92ZXJTdGFydDogKCkgPT4gdm9pZFxuICAgIGhvdmVyRW5kOiAoKSA9PiB2b2lkO1xuICAgIGdldFRvb2x0aXBEYXRhOiAoZXZlbnQ6IElFdmVudCkgPT4gYW55O1xuXG4gICAgZ2V0TGlua05vZGU6IChsaW5rTm9kZTogYW55LCBub2RlczogSUdyYXBoTm9kZVtdLFxuICAgICAgICBub2RlTWFwOiB7IFtpbmRleDogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZvaWQ7XG4gICAgZ2V0TmV4dFhZOiAocmVjdDogSVJlY3QsIHBvcnRBbGlnbm1lbnQ6IEFsaWdubWVudCwgZnJvbVhZOiBJWFlWYWx1ZSxcbiAgICAgICAgdG9YWTogSVhZVmFsdWUpID0+IElYWVZhbHVlO1xuICAgIGFkZEVsYm93OiAocGF0aDogSVhZVmFsdWVbXSwgbGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmssIGZyb21YWTogSVhZVmFsdWUsXG4gICAgICAgIHRvWFk6IElYWVZhbHVlKSA9PiB2b2lkO1xuICAgIGdldEVsYm93TGlua1BhdGg6IChsaW5rOiBJUmVuZGVyZWREaWFncmFtTGluaywgZnJvbVhZOiBJWFlWYWx1ZSxcbiAgICAgICAgdG9YWTogSVhZVmFsdWUpID0+IGFueVtdO1xuXG4gICAgZ2V0U2VsZWN0aW9uU3RyaW5nOiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG4gICAgZ2V0VG9vbHRpcFN0cmluZzogKGRhdGE6IGFueSkgPT4gc3RyaW5nO1xuXG4gICAgYmluZFpvb206ICgpID0+IHZvaWQ7XG4gICAgY29uZmlndXJlWm9vbTogKHhFeHRlbnQ6IG51bWJlcltdLCB5RXh0ZW50OiBudW1iZXJbXSxcbiAgICAgICAgaGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgICByZW5kZXJMZWdlbmQ6IChoZWlnaHQ6IG51bWJlcikgPT4gbnVtYmVyO1xuXG4gICAgYnJ1c2g6IChldmVudDogSUV2ZW50KSA9PiB2b2lkO1xuICAgIGNvbmZpZ3VyZUJydXNoOiAoKSA9PiB2b2lkO1xuICAgIGNvbmZpZ3VyZUNvbnRleHRNZW51OiAoKSA9PiB2b2lkO1xuXG4gICAgZ2V0QW5pbWF0ZUR1cmF0aW9uOiAoKSA9PiBudW1iZXI7XG5cbiAgICBwcm90ZWN0ZWQgc3RhdGljIGFkZE5vZGUobm9kZTogYW55LCBub2RlTGlzdDogSUdyYXBoTm9kZVtdLFxuICAgICAgICBub2RlTWFwOiB7IFtpbmRleDogc3RyaW5nXTogbnVtYmVyIH0pOiBudW1iZXIge1xuICAgICAgICBpZiAobm9kZU1hcC5oYXNPd25Qcm9wZXJ0eShub2RlLmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlTWFwW25vZGUua2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUubm9kZSA9IG5vZGVMaXN0Lmxlbmd0aDtcbiAgICAgICAgbm9kZU1hcFtub2RlLmtleV0gPSBub2RlLm5vZGU7XG4gICAgICAgIG5vZGVMaXN0LnB1c2gobm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplR3JhcGgoZGVmOiBJQ29ubmVjdGVkR3JhcGgpOiB2b2lkIHtcbiAgICAgICAgLy8gZ2V0IHRoZSBpbmRpY2llcyBmb3IgZWFjaCBrZXkgaW4gdGhlIG5vZGUgbGlzdFxuICAgICAgICBpZiAoIWRlZi5ub2Rlcykge1xuICAgICAgICAgICAgZGVmLm5vZGVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbm9kZU1hcDogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVmLm5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgbm9kZTogYW55ID0gZGVmLm5vZGVzW2ldO1xuICAgICAgICAgICAgbm9kZS5ub2RlID0gaTtcbiAgICAgICAgICAgIG5vZGVNYXBbbm9kZS5rZXldID0gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVmLmxpbmtzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgbGluazogYW55ID0gZGVmLmxpbmtzW2ldO1xuICAgICAgICAgICAgbGluay5zb3VyY2UgPSB0aGlzLmdldExpbmtOb2RlKGxpbmsuZnJvbSwgZGVmLm5vZGVzLCBub2RlTWFwKTtcbiAgICAgICAgICAgIGxpbmsudGFyZ2V0ID0gdGhpcy5nZXRMaW5rTm9kZShsaW5rLnRvLCBkZWYubm9kZXMsIG5vZGVNYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZChyZW5kZXJlcjogVUlSZW5kZXJlciwgZ3JhcGg6IElQb3J0RGlhZ3JhbSxcbiAgICAgICAgZ2V0U2VsZWN0aW9uU3RyaW5nOiAoZGF0YTogYW55KSA9PiBzdHJpbmcsXG4gICAgICAgIGdldFRvb2x0aXBTdHJpbmc6IChkYXRhOiBhbnkpID0+IHN0cmluZykge1xuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy5nZXRTZWxlY3Rpb25TdHJpbmcgPSBnZXRTZWxlY3Rpb25TdHJpbmcgPyBnZXRTZWxlY3Rpb25TdHJpbmcgOlxuICAgICAgICAgICAgKGRhdGE6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuc291cmNlLmtleSArICctJyArIGRhdGEudGFyZ2V0LmtleTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldFRvb2x0aXBTdHJpbmcgPSBnZXRUb29sdGlwU3RyaW5nID8gZ2V0VG9vbHRpcFN0cmluZyA6XG4gICAgICAgICAgICAoZGF0YTogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmV0OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IGRhdGEuc291cmNlLmtleSArICcg4oaSICcgKyBkYXRhLnRhcmdldC5rZXkgKyAnXFxuJyArIGRhdGEudmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gZGF0YS5rZXkgKyAnXFxuJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGRhdGEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uSG92ZXJDaGFuZ2VkID0gZnVuY3Rpb24gKGV2ZW50PzogSUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoU1ZHUmVuZGVyZXIuSVNfUkVTSVpJTkcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXJlci5mb2N1cyhncmFwaCwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoZ3JhcGgub25Ib3Zlcikge1xuICAgICAgICAgICAgICAgIGdyYXBoLm9uSG92ZXIoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbXlQcmV2SG92ZXI6IGFueTsgLy8gdXNlZCBpbiBjYWxsYmFja3NcbiAgICAgICAgdGhpcy5ub2RlSG92ZXJTdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB0aGlzLl9fZGF0YV9fLmtleTtcbiAgICAgICAgICAgIG15UHJldkhvdmVyID0gc2VsZWN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYub25Ib3ZlckNoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGNhbGxlcjogZ3JhcGgsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IEV2ZW50VHlwZS5Ib3ZlclN0YXJ0LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9ICAgIC8vIG9uSG92ZXJFbnRlclxuXG4gICAgICAgIHRoaXMubGlua0hvdmVyU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uID0gc2VsZi5nZXRTZWxlY3Rpb25TdHJpbmcodGhpcy5fX2RhdGFfXyk7XG4gICAgICAgICAgICBteVByZXZIb3ZlciA9IHNlbGVjdGlvbjtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLm9uSG92ZXJDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBjYWxsZXI6IGdyYXBoLFxuICAgICAgICAgICAgICAgIGV2ZW50OiBFdmVudFR5cGUuSG92ZXJTdGFydCxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSAgICAvLyBvbkhvdmVyRW50ZXJcblxuICAgICAgICB0aGlzLmhvdmVyRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHJldCA9IHNlbGYub25Ib3ZlckNoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGNhbGxlcjogZ3JhcGgsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IEV2ZW50VHlwZS5Ib3ZlckVuZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogbXlQcmV2SG92ZXJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBteVByZXZIb3ZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0gICAvLyBvbkhvdmVyTGVhdmVcbiAgICAgICAgdGhpcy5nZXRUb29sdGlwRGF0YSA9IGZ1bmN0aW9uIChldmVudDogSUV2ZW50KTogYW55IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gZXZlbnQuZGF0YS5kYXRhO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhVG9vbHRpcC5zZXREYXRhKHNlbGYuZ2V0VG9vbHRpcFN0cmluZyhkYXRhKSwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSB0b29sdGlwXG4gICAgICAgIC8vIGRlbGF5IGlzIDAgYmVjYXVzZSB0aGUgdG9vbHRpcCBjcm9zc2VzIGRpdnMgYW5kIHdpdGggYSBkZWxheSBpdCBjYXVzZXNcbiAgICAgICAgLy8gZmxhc2hpbmdcbiAgICAgICAgbGV0IHNob3dUb29sdGlwID0gKGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGQuZGVmKSB7XG4gICAgICAgICAgICAgICAgZCA9IGQuZGVmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgICAgIHRvb2x0aXA6IHNlbGYuX2RhdGFUb29sdGlwLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBvdXRwdXQ6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChncmFwaC5vblRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICBncmFwaC5vblRvb2x0aXAoeyBjYWxsZXI6IGdyYXBoLCBkYXRhOiBkYXRhIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRvb2x0aXBEYXRhKHsgY2FsbGVyOiBncmFwaCwgZGF0YTogZGF0YSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kYXRhVG9vbHRpcCA9IG5ldyBDdXN0b21EaXZUb29sdGlwKHRoaXMuX3Rvb2x0aXBJZCwgJ3Rvb2x0aXAtdCcpO1xuICAgICAgICB0aGlzLl9kYXRhVG9vbHRpcFxuICAgICAgICAgICAgLnNldEFuYWx5dGljc05hbWUodGhpcy5fdG9vbHRpcEFuYWx5dGljc05hbWUpXG4gICAgICAgICAgICAuc2V0RW50ZXJDYWxsYmFjayhzaG93VG9vbHRpcClcbiAgICAgICAgICAgIC5zZXRNb3ZlQ2FsbGJhY2soc2hvd1Rvb2x0aXApXG4gICAgICAgICAgICAuc2V0UGxhY2VUb29sdGlwTGVmdFJpZ2h0KClcbiAgICAgICAgICAgIC5hbHdheXNSZWNhbGNXaWR0aCh0cnVlKVxuICAgICAgICAgICAgLnNldERlbGF5KDApO1xuXG4gICAgICAgIHRoaXMuZ2V0TGlua05vZGUgPSAobGlua05vZGU6IGFueSwgbm9kZXM6IElHcmFwaE5vZGVbXSwgbm9kZU1hcDogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlciB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxpbmtOb2RlID09PSAnc3RyaW5nJyB8fCBsaW5rTm9kZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBDb25uZWN0ZWRHcmFwaEJhc2UuYWRkTm9kZSh7IGtleTogbGlua05vZGUgfSwgbm9kZXMsIG5vZGVNYXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gQ29ubmVjdGVkR3JhcGhCYXNlLmFkZE5vZGUobGlua05vZGUsIG5vZGVzLCBub2RlTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxpbmsgaGVscGVyIHN0dWZmXG4gICAgICAgIHRoaXMuZ2V0TmV4dFhZID0gKHJlY3Q6IElSZWN0LCBwb3J0QWxpZ25tZW50OiBBbGlnbm1lbnQsIGZyb21YWTogSVhZVmFsdWUsIHRvWFk6IElYWVZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBvcnRBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5Cb3R0b206XG4gICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuVG9wOlxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbVhZLnggPCB0b1hZLngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHg6IHJlY3QueCArIHJlY3Qud2lkdGggKyAxMCwgeTogZnJvbVhZLnkgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHg6IHJlY3QueCAtIDEwLCB5OiBmcm9tWFkueSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuTGVmdDpcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5SaWdodDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21YWS55IDwgdG9YWS55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB4OiBmcm9tWFkueCwgeTogcmVjdC55ICsgcmVjdC5oZWlnaHQgKyAxMCB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgeDogZnJvbVhZLngsIHk6IHJlY3QueSAtIDEwIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkRWxib3cgPSAocGF0aDogSVhZVmFsdWVbXSwgbGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmssXG4gICAgICAgICAgICBmcm9tWFk6IElYWVZhbHVlLCB0b1hZOiBJWFlWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gaGF2ZSB0byBiZSBhIGxpdHRsZSBjYXJlZnVsIGhlcmUsIHNvbWUgZGlhZ3JhbXMgaGF2ZSBwb3J0cyB0aGF0IHN0aWNrIG91dCBhbmRcbiAgICAgICAgICAgIC8vIHNvbWUgZG9uJ3QsIHRoZSByZWFzb24gcmlnaHQgbm93IGF0IGxlYXN0IHRoaXMgZG9lcyBpdCBiYXNlZCBvbiBhbGlnbm1lbnRcbiAgICAgICAgICAgIC8vIGlzIHNvIHRob3NlIHdpdGhvdXQgcG9ydHMgdGhhdCBzdGljayBvdXQgbG9vayBvay5cblxuICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGdvaW5nIG91dHNpZGUgb2Ygb3VyIHBhcmVudCAoaW4gZ3JhcGhzIHdpdGggcGFyZW50cyApIHRoZW4gaXQgaXMgdmVyeSBwb3NzaWJsZVxuICAgICAgICAgICAgLy8gd2UgbWF5IGhhdmUgYSBjb2xsaXNpb24gc28gdGhyb3cgaW4gc29tZSByYW5kb21uZXNzIGluIHRoZSBlbGJvdyBvZmZzZXRcbiAgICAgICAgICAgIGxldCBpc1NhbWVQYXJlbnQgPSAobGluay5zb3VyY2Uubm9kZSBhcyBhbnkpLmZyb20gPT09IChsaW5rLnNvdXJjZS5ub2RlIGFzIGFueSkudG87XG4gICAgICAgICAgICBsZXQgZWxib3dPZmZzZXQgPSAwO1xuICAgICAgICAgICAgLy8gZ2V0IHRoZSBlbnRyeSBwb2ludCBvZiB0aGUgdG8gbm9kZSBhbmQgZHJhdyB0aGUgZWxib3cgbGluZVxuICAgICAgICAgICAgc3dpdGNoIChsaW5rLnRhcmdldC5hbGlnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5Cb3R0b206XG4gICAgICAgICAgICAgICAgICAgIGVsYm93T2Zmc2V0ID0gaXNTYW1lUGFyZW50ID8gKGZyb21YWS55ICsgdG9YWS55KSAvIDIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgKGZyb21YWS55IC0gdG9YWS55KSAqIE1hdGgucmFuZG9tKCkgKyB0b1hZLnk7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgucHVzaCh7IHg6IGZyb21YWS54LCB5OiBlbGJvd09mZnNldCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5wdXNoKHsgeDogdG9YWS54LCB5OiBlbGJvd09mZnNldCB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuVG9wOlxuICAgICAgICAgICAgICAgICAgICBlbGJvd09mZnNldCA9IGlzU2FtZVBhcmVudCA/IChmcm9tWFkueSArIHRvWFkueSkgLyAyIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICh0b1hZLnkgLSBmcm9tWFkueSkgKiBNYXRoLnJhbmRvbSgpICsgZnJvbVhZLnk7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgucHVzaCh7IHg6IGZyb21YWS54LCB5OiBlbGJvd09mZnNldCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5wdXNoKHsgeDogdG9YWS54LCB5OiBlbGJvd09mZnNldCB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuTGVmdDpcbiAgICAgICAgICAgICAgICAgICAgZWxib3dPZmZzZXQgPSBpc1NhbWVQYXJlbnQgPyAoZnJvbVhZLnggKyB0b1hZLngpIC8gMiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAodG9YWS54IC0gZnJvbVhZLngpICogTWF0aC5yYW5kb20oKSArIGZyb21YWS54O1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnB1c2goeyB4OiBlbGJvd09mZnNldCwgeTogZnJvbVhZLnkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgucHVzaCh7IHg6IGVsYm93T2Zmc2V0LCB5OiB0b1hZLnkgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICBlbGJvd09mZnNldCA9IGlzU2FtZVBhcmVudCA/IChmcm9tWFkueCArIHRvWFkueCkgLyAyIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIChmcm9tWFkueCAtIHRvWFkueCkgKiBNYXRoLnJhbmRvbSgpICsgZnJvbVhZLng7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgucHVzaCh7IHg6IGVsYm93T2Zmc2V0LCB5OiBmcm9tWFkueSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5wdXNoKHsgeDogZWxib3dPZmZzZXQsIHk6IHRvWFkueSB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNyZWF0ZSB0aGUgcGF0aHMgdG8gcmVuZGVyIHNpbXBsZSBlbGJvdyBsaW5rcyB1c2luZyB0aGUgbGluayBpbmZvcm1hdGlvbiBwcm92aWRlZFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5nZXRFbGJvd0xpbmtQYXRoID0gKGxpbms6IElSZW5kZXJlZERpYWdyYW1MaW5rLCBmcm9tWFk6IElYWVZhbHVlLCB0b1hZOiBJWFlWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgbGV0IHBhdGggPSBbXTtcblxuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBwb3J0cyB0aGF0IGFyZW4ndCBvcHBvc2l0ZSAobGlrZSB0b3AvYm90dG9tIG9yIHJpZ2h0L2xlZnQpIHdlIG5lZWQgdG9cbiAgICAgICAgICAgIC8vIGFkanVzdCB0aGUgaW5wdXQgYW5kIG91dHB1dCBwb3J0cyBhIGJpdFxuICAgICAgICAgICAgbGV0IHBvcnRzQWxpZ25lZCA9XG4gICAgICAgICAgICAgICAgKGxpbmsuc291cmNlLmFsaWdubWVudCA9PT0gQWxpZ25tZW50LkxlZnQgJiYgbGluay50YXJnZXQuYWxpZ25tZW50ID09PSBBbGlnbm1lbnQuUmlnaHQpIHx8XG4gICAgICAgICAgICAgICAgKGxpbmsuc291cmNlLmFsaWdubWVudCA9PT0gQWxpZ25tZW50LlJpZ2h0ICYmIGxpbmsudGFyZ2V0LmFsaWdubWVudCA9PT0gQWxpZ25tZW50LkxlZnQpIHx8XG4gICAgICAgICAgICAgICAgKGxpbmsuc291cmNlLmFsaWdubWVudCA9PT0gQWxpZ25tZW50LlRvcCAmJiBsaW5rLnRhcmdldC5hbGlnbm1lbnQgPT09IEFsaWdubWVudC5Cb3R0b20pIHx8XG4gICAgICAgICAgICAgICAgKGxpbmsuc291cmNlLmFsaWdubWVudCA9PT0gQWxpZ25tZW50LkJvdHRvbSAmJiBsaW5rLnRhcmdldC5hbGlnbm1lbnQgPT09IEFsaWdubWVudC5Ub3ApO1xuXG4gICAgICAgICAgICAvLyBldmVuIGlmIHRoZXkgYXJlIGFsaWduZWQgaWYgdGhlIG5vZGVzIGFyZSBwb3NpdGlvbmVkIHdoZXJlIHRoZSBsaW5rcyB3aWxsIGdvIHRocm91Z2hcbiAgICAgICAgICAgIC8vIHRoZSBwb3J0cyB0aGVuIHdlIGFkanVzdCB0aGUgcG9ydHNcbiAgICAgICAgICAgIGlmIChwb3J0c0FsaWduZWQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpbmsuc291cmNlLmFsaWdubWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5MZWZ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvWFkueCA+IGZyb21YWS54KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydHNBbGlnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuUmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9YWS54IDwgZnJvbVhZLngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c0FsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5Ub3A6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9YWS55ID4gZnJvbVhZLnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c0FsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5Cb3R0b206XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9YWS55IDwgZnJvbVhZLnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c0FsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBvcnRzQWxpZ25lZCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAobGluay50YXJnZXQuYWxpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LkxlZnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9YWS54IDwgZnJvbVhZLngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c0FsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5SaWdodDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b1hZLnggPiBmcm9tWFkueCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRzQWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlRvcDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b1hZLnkgPCBmcm9tWFkueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRzQWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LkJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b1hZLnkgPiBmcm9tWFkueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRzQWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBwb3J0cyBhcmVuJ3QgYWxpZ25lZCB3ZSBuZWVkIHRvIGFkZCBpbiBhIGpvaW50IHNvIGl0IHRoZSBsaW5rIGNsZWFycyB0aGUgbm9kZVxuICAgICAgICAgICAgLy8gbmVlZCB0aGUgY3VycmVudFhZIGFzIHdlIGRyYXcgb3VyIHBhdGggdG8gbWFrZSB0aGUgam9pbnRzIGxvb2sgbmljZSBhbmQgZXZlblxuICAgICAgICAgICAgaWYgKHBvcnRzQWxpZ25lZCkge1xuICAgICAgICAgICAgICAgIC8vIHNpbXBsZSBjYXNlIHdoZXJlIGV2ZXJ5dGhpbmcgaXMgaW4gYSBuaWNlIHBsYWNlIGp1c3QgYWRkIGluIHRoZSBsaW5rXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGZyb21YWSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbGJvdyhwYXRoLCBsaW5rLCBmcm9tWFksIHRvWFkpO1xuICAgICAgICAgICAgICAgIHBhdGgucHVzaCh0b1hZKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRYWTogSVhZVmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IG5leHRYWTogSVhZVmFsdWU7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxpbmtzIG5lZWQgc29tZSBhZGRpdGlvbmFsIGxpbmVzIHRvIG1ha2UgdGhlIGxpbmtzIG5vdCBydW4gdGhyb3VnaCB0aGUgbm9kZXNcbiAgICAgICAgICAgICAgICAvLyB0aGVuIGRvIHRoaXMuLi5cbiAgICAgICAgICAgICAgICBwYXRoLnB1c2goZnJvbVhZKTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCBhZGRpdGlvbmFsIGxpbmsgZWxib3cgZHVlIHRvIGhlbHAgd2l0aCBhbGlnbm1lbnQgaXNzdWVzXG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZVhZID0gbGluay5zb3VyY2Uubm9kZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50WFkgPSBzZWxmLmdldE5leHRYWShnZXRDb29yZHNBbmRDYWNoZShzZWxmLl9ncmFwaENvbnRhaW5lciwgbGluay5zb3VyY2Uubm9kZSksXG4gICAgICAgICAgICAgICAgICAgIGxpbmsuc291cmNlLmFsaWdubWVudCwgZnJvbVhZLCB0b1hZKTtcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2goY3VycmVudFhZKTtcblxuICAgICAgICAgICAgICAgIG5leHRYWSA9IHNlbGYuZ2V0TmV4dFhZKGdldENvb3Jkc0FuZENhY2hlKHNlbGYuX2dyYXBoQ29udGFpbmVyLCBsaW5rLnRhcmdldC5ub2RlKSxcbiAgICAgICAgICAgICAgICAgICAgbGluay50YXJnZXQuYWxpZ25tZW50LCB0b1hZLCBmcm9tWFkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbGJvdyhwYXRoLCBsaW5rLCBjdXJyZW50WFksIG5leHRYWSk7XG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKG5leHRYWSk7XG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKHRvWFkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlndXJlWm9vbSA9ICh4RXh0ZW50OiBudW1iZXJbXSwgeUV4dGVudDogbnVtYmVyW10sXG4gICAgICAgICAgICBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlcikgPT4ge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5kaXNhYmxlWm9vbVZpZXdVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgbGV0IG5vZGVXaWR0aCA9ICh4RXh0ZW50WzFdIC0geEV4dGVudFswXSk7XG4gICAgICAgICAgICBsZXQgbm9kZUhlaWdodCA9ICh5RXh0ZW50WzFdIC0geUV4dGVudFswXSk7XG5cbiAgICAgICAgICAgIGxldCBjZW50ZXJYID0gbm9kZVdpZHRoIC8gMiArIHhFeHRlbnRbMF07XG4gICAgICAgICAgICBsZXQgY2VudGVyWSA9IG5vZGVIZWlnaHQgLyAyICsgeUV4dGVudFswXTtcblxuICAgICAgICAgICAgbGV0IHlTY2FsZSA9IGhlaWdodCAvIG5vZGVIZWlnaHQ7XG4gICAgICAgICAgICBsZXQgeFNjYWxlID0gd2lkdGggLyBub2RlV2lkdGg7XG4gICAgICAgICAgICBsZXQgem9vbWVkT3V0U2NhbGUgPSBNYXRoLm1pbigxLCB5U2NhbGUsIHhTY2FsZSk7XG4gICAgICAgICAgICBzZWxmLl96b29tLnNjYWxlRXh0ZW50KFt6b29tZWRPdXRTY2FsZSAvIDMsIDEuNV0pO1xuXG4gICAgICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5maXRUb1dpbmRvdykge1xuICAgICAgICAgICAgICAgIGxldCB6b29tTGV2ZWwgPSBkMy56b29tSWRlbnRpdHlcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgod2lkdGggLyAyKSAtIChjZW50ZXJYICogem9vbWVkT3V0U2NhbGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGhlaWdodCAvIDIpIC0gKGNlbnRlclkgKiB6b29tZWRPdXRTY2FsZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zY2FsZSh6b29tZWRPdXRTY2FsZSk7XG4gICAgICAgICAgICAgICAgc2VsZi5fZ3JhcGhDb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoc2VsZi5fem9vbS50cmFuc2Zvcm0sIHpvb21MZXZlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYuX2NvbnRleHRNZW51SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdSZXNldCBHcmFwaCcsXG4gICAgICAgICAgICAgICAgYWN0aW9uKGVsZW06IGFueSwgZGF0YTogYW55LCBpbmRleDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9vcHRpb25zLmZpdFRvV2luZG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgem9vbUxldmVsID0gZDMuem9vbUlkZW50aXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgod2lkdGggLyAyKSAtIChjZW50ZXJYICogem9vbWVkT3V0U2NhbGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGVpZ2h0IC8gMikgLSAoY2VudGVyWSAqIHpvb21lZE91dFNjYWxlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2NhbGUoem9vbWVkT3V0U2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ3JhcGhDb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uKHNlbGYuZ2V0QW5pbWF0ZUR1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwoc2VsZi5fem9vbS50cmFuc2Zvcm0sIHpvb21MZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ncmFwaENvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oc2VsZi5nZXRBbmltYXRlRHVyYXRpb24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2FsbChzZWxmLl96b29tLnRyYW5zZm9ybSwgZDMuem9vbUlkZW50aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVCcnVzaCA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgLy8gYSBnZW5lcmljIGNhbGxiYWNrIHRvIGhhbmRsZSBicnVzaCBzZWxlY3Rpb24gZXZlbnRzXG4gICAgICAgICAgICBmdW5jdGlvbiBvbkJydXNoQ2FsbGJhY2soY29vcmRzOiBhbnlbXSwgZXZlbnRUeXBlOiBFdmVudFR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGNoYXJ0ID0gc2VsZi5fZWxlbWVudDtcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgeFN0YXJ0OiBjb29yZHNbMF1bMF0sXG4gICAgICAgICAgICAgICAgICAgIHhFbmQ6IGNvb3Jkc1sxXVswXSxcbiAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBjb29yZHNbMF1bMV0sXG4gICAgICAgICAgICAgICAgICAgIHlFbmQ6IGNvb3Jkc1sxXVsxXSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVyOiBjaGFydFxuICAgICAgICAgICAgICAgIH07XG5cblxuICAgICAgICAgICAgICAgIGlmIChjaGFydC5vbkJydXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0Lm9uQnJ1c2gob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdXBkYXRlQnJ1c2hUb29sdGlwID0gZnVuY3Rpb24gKGNvb3JkczogYW55W10pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29vcmRzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxmLl9icnVzaFRvb2x0aXAuc2V0RGF0YSgnU2VsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJygnICsgY29vcmRzWzBdWzBdLnRvRml4ZWQoMikgKyAnLCAnICsgY29vcmRzWzBdWzFdLnRvRml4ZWQoMikgKyAnKSAtICcgK1xuICAgICAgICAgICAgICAgICAgICAnKCcgKyBjb29yZHNbMV1bMF0udG9GaXhlZCgyKSArICcsICcgKyBjb29yZHNbMV1bMV0udG9GaXhlZCgyKSArICcpJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBicnVzaFN0YXJ0ID0gZnVuY3Rpb24gKGNvb3JkczogYW55W10pOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9icnVzaC5tb3ZlVG9Gcm9udCgpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZUJydXNoVG9vbHRpcChjb29yZHMpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2RhdGFUb29sdGlwLm9uTW91c2VMZWF2ZShkMy5ldmVudCk7XG4gICAgICAgICAgICAgICAgc2VsZi5fYnJ1c2hUb29sdGlwLm9uTW91c2VFbnRlcihkMy5ldmVudCk7XG4gICAgICAgICAgICAgICAgc2VsZi5fYnJ1c2hUb29sdGlwLm9uTW91c2VNb3ZlKGQzLmV2ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb25CcnVzaENhbGxiYWNrKGNvb3JkcywgRXZlbnRUeXBlLkJydXNoU3RhcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgYnJ1c2hNb3ZlID0gZnVuY3Rpb24gKGNvb3JkczogYW55W10pOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVCcnVzaFRvb2x0aXAoY29vcmRzKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9kYXRhVG9vbHRpcC5vbk1vdXNlTGVhdmUoZDMuZXZlbnQpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2JydXNoVG9vbHRpcC5vbk1vdXNlTW92ZShkMy5ldmVudCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb25CcnVzaENhbGxiYWNrKGNvb3JkcywgRXZlbnRUeXBlLkJydXNoTW92ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBicnVzaEVuZCA9IGZ1bmN0aW9uIChjb29yZHM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgc2VsZi5fYnJ1c2hUb29sdGlwLm9uTW91c2VMZWF2ZShkMy5ldmVudCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYnJ1c2hDb250ZXh0TWVudUl0ZW1zID0gKHNlbGYuX2VsZW1lbnQgYXMgSUNvbm5lY3RlZEdyYXBoKS5icnVzaENvbnRleHRNZW51SXRlbXM7XG4gICAgICAgICAgICAgICAgaWYgKGNvb3JkcyAmJiBicnVzaENvbnRleHRNZW51SXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRleHRNZW51SXRlbXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJydXNoQ29udGV4dE1lbnVJdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJjbWkgPSBicnVzaENvbnRleHRNZW51SXRlbXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiY21pLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbihlbGVtOiBhbnksIGRhdGE6IGFueSwgaW5kZXg6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnhTdGFydCA9IGNvb3Jkc1swXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS54RW5kID0gY29vcmRzWzFdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnlTdGFydCA9IGNvb3Jkc1swXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS55RW5kID0gY29vcmRzWzFdWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJjbWkuYWN0aW9uKGVsZW0sIGRhdGEsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25CcnVzaENhbGxiYWNrKGNvb3JkcywgRXZlbnRUeXBlLkJydXNoRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNob3dDb250ZXh0TWVudShkMy5ldmVudC5zb3VyY2VFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogRXZlbnRUeXBlLkJydXNoRW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlcjogc2VsZi5fZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbXMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZW51cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NvbnRleHQtbWVudScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVudXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKG1lbnVzWzBdIGFzIGFueSkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHdoZW4gbW92aW5nIHdpdGggb3ZlcmxheSBmb3Igem9vbWVkIHJlZ2lvbiBsZWF2ZSB0aGUgYnJ1c2ggb24gdG9wXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9vcHRpb25zLmZvcmNlQnJ1c2hUb0Zyb250KSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2JydXNoLm1vdmVUb0JhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdGhlIHNlbGVjdGlvbiBicnVzaFxuICAgICAgICAgICAgc2VsZi5fc3ZnLnNlbGVjdCgnLmJydXNoJykucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgIHNlbGYuX2JydXNoVG9vbHRpcCA9IG5ldyBPbmVMaW5lVG9vbHRpcCgnYnJ1c2gnLCAndG9vbHRpcC10Jyk7XG4gICAgICAgICAgICBzZWxmLl9icnVzaFRvb2x0aXBcbiAgICAgICAgICAgICAgICAuc2V0UGxhY2VUb29sdGlwTGVmdFJpZ2h0KClcbiAgICAgICAgICAgICAgICAuYWx3YXlzUmVjYWxjV2lkdGgodHJ1ZSlcbiAgICAgICAgICAgICAgICAuc2V0RGVsYXkoMCk7XG4gICAgICAgICAgICBzZWxmLl9icnVzaCA9IG5ldyBCcnVzaCgpXG4gICAgICAgICAgICAgICAgLnNldFhZKHRydWUpXG4gICAgICAgICAgICAgICAgLnNldFRhcmdldChzZWxmLl9zdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnYnJ1c2gnKSlcbiAgICAgICAgICAgICAgICAuc2V0U3RhcnRDYWxsYmFjayhicnVzaFN0YXJ0KVxuICAgICAgICAgICAgICAgIC5zZXRNb3ZlQ2FsbGJhY2soYnJ1c2hNb3ZlKVxuICAgICAgICAgICAgICAgIC5zZXRFbmRDYWxsYmFjayhicnVzaEVuZClcbiAgICAgICAgICAgICAgICAuc2V0UmVjdChzZWxmLl9zdmdSZWN0KVxuICAgICAgICAgICAgICAgIC5yZWFkeSgpO1xuICAgICAgICAgICAgc2VsZi5fYnJ1c2gubW92ZVRvQmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZVZpZXcoaGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHhFeHRlbnQ6IG51bWJlcltdID0gW051bWJlci5NQVhfVkFMVUUsIC1OdW1iZXIuTUFYX1ZBTFVFXTtcbiAgICAgICAgbGV0IHlFeHRlbnQ6IG51bWJlcltdID0gW051bWJlci5NQVhfVkFMVUUsIC1OdW1iZXIuTUFYX1ZBTFVFXTtcblxuICAgICAgICBsZXQgZ3JhcGggPSB0aGlzLl9lbGVtZW50IGFzIElDb25uZWN0ZWRHcmFwaDtcbiAgICAgICAgZ3JhcGgubm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZURlZjogYW55KSB7XG4gICAgICAgICAgICB4RXh0ZW50WzBdID0gTWF0aC5taW4oeEV4dGVudFswXSwgbm9kZURlZi54KTtcbiAgICAgICAgICAgIHhFeHRlbnRbMV0gPSBNYXRoLm1heCh4RXh0ZW50WzFdLCBub2RlRGVmLngpO1xuICAgICAgICAgICAgeUV4dGVudFswXSA9IE1hdGgubWluKHlFeHRlbnRbMF0sIG5vZGVEZWYueSk7XG4gICAgICAgICAgICB5RXh0ZW50WzFdID0gTWF0aC5tYXgoeUV4dGVudFsxXSwgbm9kZURlZi55KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5yZW5kZXJMZWdlbmQoaGVpZ2h0KTtcblxuICAgICAgICB0aGlzLmJpbmRab29tKCk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlWm9vbSh4RXh0ZW50LCB5RXh0ZW50LCBoZWlnaHQsIHdpZHRoKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVDb250ZXh0TWVudSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdmcgJiYgIXRoaXMuX29wdGlvbnMuZGlzYWJsZUJydXNoKSB7XG4gICAgICAgICAgICAvLyBzZXQgdGltZW91dCB0byBsZXQgc3ZnIHNpemUgY2hhbmdlXG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZUJydXNoKCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpYWdyYW1CYXNlIGV4dGVuZHMgQ29ubmVjdGVkR3JhcGhCYXNlIHtcbiAgICBiaW5kKHJlbmRlcmVyOiBVSVJlbmRlcmVyLCBncmFwaDogSVBvcnREaWFncmFtKSB7XG4gICAgICAgIENvbm5lY3RlZEdyYXBoQmFzZS5wcm90b3R5cGUuYmluZC5jYWxsKHRoaXMsIHJlbmRlcmVyLCBncmFwaCxcbiAgICAgICAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5zb3VyY2Uua2V5ICsgJy0nICsgZGF0YS50YXJnZXQua2V5O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmV0OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZnJvbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5saW5rVHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEubGlua1R5cGUgJiBMaW5rVHlwZS5EaXJlY3Rpb25hbCkgPT09IExpbmtUeXBlLkRpcmVjdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkYXRhLmZyb20gKyAnIFxcdTIxOTIgJyArIGRhdGEudG8gKyAnXFxuJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGRhdGEuZnJvbSArICcgXFx1MjE5NCAnICsgZGF0YS50byArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gZGF0YS5ub2RlLmtleSArICc6JyArIGRhdGEucG9ydC5rZXk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gZGF0YS5sYWJlbCA/IGRhdGEubGFiZWwgOiBkYXRhLmtleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEQzQ29ubmVjdGVkR3JhcGhTVkcgZXh0ZW5kcyBTVkdSZW5kZXJlciB7XG4gICAgX2dyYXBoQ29udGFpbmVyOiBhbnk7XG4gICAgX3pvb206IGQzLlpvb21CZWhhdmlvcjxFbGVtZW50LCB7fT47XG5cbiAgICBfZGF0YVRvb2x0aXA6IEN1c3RvbURpdlRvb2x0aXA7XG4gICAgX3Rvb2x0aXBJZDogc3RyaW5nO1xuICAgIF90b29sdGlwQW5hbHl0aWNzTmFtZTogc3RyaW5nO1xuXG4gICAgX2NvbnRleHRNZW51SXRlbXM6IElDb250ZXh0TWVudUl0ZW1bXTtcbiAgICBfYnJ1c2g6IEJydXNoO1xuICAgIF9icnVzaFRvb2x0aXA6IE9uZUxpbmVUb29sdGlwO1xuXG4gICAgb25Ib3ZlckNoYW5nZWQ6IChldmVudD86IElFdmVudCkgPT4gdm9pZDtcbiAgICBub2RlSG92ZXJTdGFydDogKCkgPT4gdm9pZDtcbiAgICBsaW5rSG92ZXJTdGFydDogKCkgPT4gdm9pZDtcbiAgICBob3ZlckVuZDogKCkgPT4gdm9pZDtcblxuICAgIC8qKiBnZXQgdGhlIHh5IHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluayAqL1xuICAgIGdldExpbmtTdGFydFhZOiAobGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmspID0+IElYWVZhbHVlO1xuICAgIC8qKiBnZXQgdGhlIHh5IHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmsgKi9cbiAgICBnZXRMaW5rRW5kWFk6IChsaW5rOiBJUmVuZGVyZWREaWFncmFtTGluaykgPT4gSVhZVmFsdWU7XG4gICAgZ2V0RWxib3dMaW5rUGF0aDogKGxpbms6IElSZW5kZXJlZERpYWdyYW1MaW5rLCBmcm9tWFk6IElYWVZhbHVlLFxuICAgICAgICB0b1hZOiBJWFlWYWx1ZSkgPT4gYW55W107XG5cbiAgICBjb25maWd1cmVab29tOiAoeEV4dGVudDogbnVtYmVyW10sIHlFeHRlbnQ6IG51bWJlcltdLFxuICAgICAgICBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlcikgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFVJRWxlbWVudCwgcmVuZGVyZXI6IFVJUmVuZGVyZXIsXG4gICAgICAgIHBhcmVudDogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55Pikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZShlbGVtZW50LCByZW5kZXJlciwgcGFyZW50KTtcbiAgICAgICAgdGhpcy5fZ3JhcGhDb250YWluZXIgPSB0aGlzLl9zdmc7XG5cbiAgICAgICAgQ29ubmVjdGVkR3JhcGhCYXNlLnByb3RvdHlwZS5iaW5kLmNhbGwodGhpcywgcmVuZGVyZXIsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW5kZXJMZWdlbmQoZ3JhcGhIZWlnaHQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgbGV0IGdyYXBoID0gc2VsZi5fZWxlbWVudCBhcyBJQ29ubmVjdGVkR3JhcGg7XG4gICAgICAgIGlmIChncmFwaC5sZWdlbmQpIHtcbiAgICAgICAgICAgIGxldCBsZWdlbmRJdGVtczogSUxlZ2VuZEl0ZW1bXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncmFwaC5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGxldCBub2RlID0gZ3JhcGgubm9kZXNbaV07XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG5vZGUudHlwZSAmJiBub2RlLnR5cGUubGVuZ3RoID4gMCA/IG5vZGUudHlwZVswXSA6IG5vZGUua2V5O1xuICAgICAgICAgICAgICAgIGxldCBlbGVtID0gc2VsZi5fc3ZnLnNlbGVjdCgnLm5vZGUuJyArIGtleSk7XG4gICAgICAgICAgICAgICAgbGVnZW5kSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogZWxlbS5zdHlsZSgnZmlsbCcpLFxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiBlbGVtLnN0eWxlKCdvcGFjaXR5JylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZ3JvdXAgY29sb3JzIG1lc3MgdXAgdW5sZXNzIHdlIHJlbW92ZSBkdXBsaWNhdGVzIGhlcmVcbiAgICAgICAgICAgIGxldCBpdGVtTmFtZXM6IHsgW2luZGV4OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgICAgICAgICAgIGxldCBsZWdlbmRNYXhDaGFycyA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlZ2VuZEl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBsZWdlbmRJdGVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1OYW1lcy5oYXNPd25Qcm9wZXJ0eShpdGVtLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWVzW2l0ZW0ua2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZE1heENoYXJzID0gTWF0aC5tYXgoaXRlbS5rZXkubGVuZ3RoLCBsZWdlbmRNYXhDaGFycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW5kZXIgdGhlIGxlZ2VuZFxuICAgICAgICAgICAgbGV0IG1hcmdpblRvcCA9IDEwO1xuICAgICAgICAgICAgbGV0IGQzTGVnZW5kOiBEM0xlZ2VuZDtcbiAgICAgICAgICAgIHN3aXRjaCAoZ3JhcGgubGVnZW5kLmFsaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlRvcDpcbiAgICAgICAgICAgICAgICAgICAgZDNMZWdlbmQgPSBuZXcgRDNMZWdlbmQodGhpcy5fc3ZnLCBncmFwaC5sZWdlbmQsIGdyYXBoLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlY3QoMCwgbWFyZ2luVG9wLCB0aGlzLl9zdmdSZWN0LndpZHRoLCB0aGlzLl9zdmdSZWN0LmhlaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5Cb3R0b206XG4gICAgICAgICAgICAgICAgICAgIGQzTGVnZW5kID0gbmV3IEQzTGVnZW5kKHRoaXMuX3N2ZywgZ3JhcGgubGVnZW5kLCBncmFwaC50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZWN0KDAsIHRoaXMuX3N2Z1JlY3QuaGVpZ2h0IC0gdGhpcy5MRUdFTkRfUEFERElORy5ZLkJPVFRPTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdmdSZWN0LndpZHRoLCB0aGlzLl9zdmdSZWN0LmhlaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5MZWZ0OlxuICAgICAgICAgICAgICAgICAgICBkM0xlZ2VuZCA9IG5ldyBEM0xlZ2VuZCh0aGlzLl9zdmcsIGdyYXBoLmxlZ2VuZCwgZ3JhcGgudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVjdCgwLCBtYXJnaW5Ub3AsIHRoaXMuX3N2Z1JlY3Qud2lkdGgsIHRoaXMuX3N2Z1JlY3QuaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICBkM0xlZ2VuZCA9IG5ldyBEM0xlZ2VuZCh0aGlzLl9zdmcsIGdyYXBoLmxlZ2VuZCwgZ3JhcGgudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVjdCh0aGlzLl9zdmdSZWN0LndpZHRoIC0gKGxlZ2VuZE1heENoYXJzICogMTApLCBtYXJnaW5Ub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3ZnUmVjdC53aWR0aCwgdGhpcy5fc3ZnUmVjdC5oZWlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGQzTGVnZW5kLmFkZEl0ZW1zKGxlZ2VuZEl0ZW1zKTtcbiAgICAgICAgICAgIGQzTGVnZW5kLnJlbmRlcigpO1xuXG4gICAgICAgICAgICBpZiAoIWdyYXBoSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhIZWlnaHQgPSB0aGlzLl9vcHRpb25zLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChncmFwaC5sZWdlbmQuYWxpZ25tZW50ID09PSBBbGlnbm1lbnQuVG9wIHx8XG4gICAgICAgICAgICAgICAgZ3JhcGgubGVnZW5kLmFsaWdubWVudCA9PT0gQWxpZ25tZW50LkJvdHRvbSkge1xuICAgICAgICAgICAgICAgIGdyYXBoSGVpZ2h0ICs9IGQzTGVnZW5kLmdldFJlbmRlcmVkUmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JhcGhIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGJpbmRab29tKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5kaXNhYmxlWm9vbVZpZXdVcGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGdyYXBoQXJlYSA9IHNlbGYuX3N2Zy5zZWxlY3QoJy5ncmFwaEFyZWEnKTtcblxuICAgICAgICAvLyBhZGQgZ3JhcGggdmlldyBhcmVhIHRvIGFsbG93IHVzIHRvIHBhbi96b29tIGl0XG4gICAgICAgIGZ1bmN0aW9uIHBlcmZvcm1ab29tKCkge1xuICAgICAgICAgICAgZ3JhcGhBcmVhLmF0dHIoJ3RyYW5zZm9ybScsIGQzLmV2ZW50LnRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLl96b29tID0gZDMuem9vbSgpLm9uKCd6b29tJywgcGVyZm9ybVpvb20pO1xuICAgICAgICBzZWxmLl9zdmcuY2FsbChzZWxmLl96b29tKTtcblxuICAgICAgICBpZiAoIXNlbGYuX2VsZW1lbnQuYXBpKSB7XG4gICAgICAgICAgICBzZWxmLl9lbGVtZW50LmFwaSA9IHt9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fZWxlbWVudC5hcGkuem9vbSA9IGZ1bmN0aW9uIChldmVudDogSUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YSkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3pvb20uc2NhbGVUbyhzZWxmLl9wYXJlbnQsIGV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5fZWxlbWVudC5hcGkucGFuID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpIHtcbiAgICAgICAgICAgIHNlbGYuX3pvb20udHJhbnNsYXRlVG8oc2VsZi5fcGFyZW50LCBldmVudC54U3RhcnQsIGV2ZW50LnlTdGFydCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBjb25maWd1cmVDb250ZXh0TWVudSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGxldCBncmFwaCA9IHNlbGYuX2VsZW1lbnQgYXMgSUNvbm5lY3RlZEdyYXBoO1xuICAgICAgICBpZiAoZ3JhcGguY29udGV4dE1lbnVJdGVtcykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncmFwaC5jb250ZXh0TWVudUl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dE1lbnVJdGVtcy5wdXNoKGdyYXBoLmNvbnRleHRNZW51SXRlbXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGYuc2F2ZUltYWdlICYmIHNlbGYuX29wdGlvbnMuZW5hYmxlU2F2ZUFzSW1hZ2UpIHtcbiAgICAgICAgICAgIGxldCBzYXZlSW1hZ2VJdGVtID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnU2F2ZSBBcyBJbWFnZScsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoZWxlbTogYW55LCBkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zYXZlSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSAvLyBvcHRpb25hbCwgZGVmYXVsdHMgdG8gZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHNlbGYuX2NvbnRleHRNZW51SXRlbXMucHVzaChzYXZlSW1hZ2VJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZSBhbnljIGNvbnRleHQgbWVudVxuICAgICAgICBpZiAoc2VsZi5fY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZWxmLl9wYXJlbnQub24oJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgICAgICBzaG93Q29udGV4dE1lbnUoZDMuZXZlbnQsIHVuZGVmaW5lZCwgc2VsZi5fY29udGV4dE1lbnVJdGVtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplR3JhcGhBcmVhKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIHRoaXMubG9hZE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fc3ZnLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO1xuICAgICAgICBsZXQgZ3JhcGhBcmVhID0gdGhpcy5fc3ZnLmFwcGVuZCgnZycpLmNsYXNzZWQoJ2dyYXBoQXJlYScsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHRNZW51SXRlbXMgPSBbXTtcblxuICAgICAgICByZXR1cm4gZ3JhcGhBcmVhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbmZpZ3VyZSB0aGUgaG92ZXIgcmVxdWlyZW1lbnRzIGZvciBhIG5vZGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29uZmlndXJlTGlua0hvdmVyKGVsZW06IGFueSwgbGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmspIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBlbGVtLm9uKCdtb3VzZWVudGVyJywgc2VsZi5saW5rSG92ZXJTdGFydClcbiAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsIHNlbGYuaG92ZXJFbmQpO1xuXG4gICAgICAgIGxldCBncmFwaCA9ICh0aGlzLl9lbGVtZW50IGFzIElIaWVyYXJjaHlHcmFwaCk7XG4gICAgICAgIGFkZENsaWNrSGVscGVyKGVsZW0sIHNlbGYuZ2V0T3B0aW9ucygpLCBncmFwaC5vbkNsaWNrLCBncmFwaC5vbkRvdWJsZUNsaWNrLFxuICAgICAgICAgICAgZ3JhcGguY29udGV4dE1lbnVJdGVtcywgc2VsZi5fZGF0YVRvb2x0aXAsIGdyYXBoLCBsaW5rLmRlZik7XG5cbiAgICAgICAgbGV0IGh0bWxOb2RlID0gZWxlbS5ub2RlKCk7XG4gICAgICAgIGh0bWxOb2RlWydfX2RhdGFfXyddID0gbGluaztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZUxpbmtMYXllcihncmFwaEFyZWE6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4pIHtcbiAgICAgICAgLy8gZ28gdGhyb3VnaCBhbmQgY29tcHV0ZSB0aGUgbGluayBwYXRoc1xuICAgICAgICBncmFwaEFyZWEuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5jbGFzc2VkKCdsaW5rcycsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIFRPRE8/IE1vdmUgdGhpcyB0byBEM0Nvbm5lY3RlZEdyYXBoIHNvIHRoZSBzaW1wbGUgZ3JhcGggY2FuIHVzZSB0aGlzIHRvbz9cbiAgICBwcm90ZWN0ZWQgcmVuZGVyTGlua0hlbHBlcihncmFwaEFyZWE6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4sXG4gICAgICAgIHJlbmRlcmVkTGlua3M6IElSZW5kZXJlZERpYWdyYW1MaW5rW10sIGlzVXBkYXRlPzogYm9vbGVhbikge1xuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICAvLyByZW5kZXIgdGhlIGxpbmtzXG4gICAgICAgIGxldCBsaW5lID0gZDMubGluZTxhbnk+KClcbiAgICAgICAgICAgIC54KGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIGQueCB9KVxuICAgICAgICAgICAgLnkoZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC55IH0pO1xuXG4gICAgICAgIGxldCBjdXJ2ZSA9IGQzLmxpbmU8YW55PigpXG4gICAgICAgICAgICAueChmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLnggfSlcbiAgICAgICAgICAgIC55KGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIGQueSB9KVxuICAgICAgICAgICAgLmN1cnZlKGQzLmN1cnZlQmFzaXMpO1xuXG5cbiAgICAgICAgbGV0IGxpbmtHcm91cCA9IGdyYXBoQXJlYS5zZWxlY3QoJy5saW5rcycpO1xuXG4gICAgICAgIGxldCBnZXRDbGFzc2VzID0gZnVuY3Rpb24gKGxpbms6IGFueSkge1xuICAgICAgICAgICAgbGV0IGNsYXNzZXMgPSBsaW5rLmRlZi5mcm9tICsgJy0nICsgbGluay5kZWYudG8gK1xuICAgICAgICAgICAgICAgICcgJyArIGxpbmsuZGVmLmZyb20gKyAnICcgKyBsaW5rLmRlZi50bztcbiAgICAgICAgICAgIGlmIChsaW5rLmRlZi50eXBlICYmIGxpbmsuZGVmLnR5cGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxpbmsuZGVmLnR5cGUubGVuZ3RoOyArK2lkeCkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzICs9ICcgJyArIGdldFNlbGVjdGlvbk5hbWUobGluay5kZWYudHlwZVtpZHhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdldENvbG9yID0gZnVuY3Rpb24gKGxpbms6IGFueSkge1xuICAgICAgICAgICAgaWYgKGxpbmsuZGVmLmNvbG9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmsuZGVmLmNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbmsuZGVmLnR5cGUgJiYgbGluay5kZWYudHlwZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbGluay5kZWYudHlwZS5sZW5ndGg7ICsraWR4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9jb2xvck1nci5oYXNDb2xvcihsaW5rLmRlZi50eXBlW2lkeF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29sb3JNZ3IuZ2V0Q29sb3IobGluay5kZWYudHlwZVtpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnYmxhY2snO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGlzIGV4aXN0aW5nIGxpbmsgaWYgaXQgZXhpc3RzIGFzIHRoaXMgaXMgcmVuZGVyIHVwZGF0ZVxuICAgICAgICBpZiAoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgIHJlbmRlcmVkTGlua3MuZm9yRWFjaChmdW5jdGlvbiAobGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmspIHtcbiAgICAgICAgICAgICAgICBsZXQgZDNMaW5rID0gZ3JhcGhBcmVhLnNlbGVjdEFsbCgnLicgKyBsaW5rLmRlZi5mcm9tICsgJy0nICsgbGluay5kZWYudG8gK1xuICAgICAgICAgICAgICAgICAgICAnLicgKyBsaW5rLmRlZi5mcm9tICsgJy4nICsgbGluay5kZWYudG8pO1xuICAgICAgICAgICAgICAgIGQzTGluay5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZWRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChyZW5kZXJlZExpbms6IElSZW5kZXJlZERpYWdyYW1MaW5rKSB7XG4gICAgICAgICAgICBsZXQgcmVuZGVyZWRMaW5rRGVmID0gcmVuZGVyZWRMaW5rLmRlZiBhcyBJRGlhZ3JhbUxpbms7XG5cbiAgICAgICAgICAgIC8vIGNvdWxkIGNhY2hlIHNvbWUgb2YgdGhpcyBzdHVmZiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuXG4gICAgICAgICAgICBsZXQgZnJvbVhZID0gc2VsZi5nZXRMaW5rU3RhcnRYWShyZW5kZXJlZExpbmspO1xuICAgICAgICAgICAgbGV0IHRvWFkgPSBzZWxmLmdldExpbmtFbmRYWShyZW5kZXJlZExpbmspO1xuXG4gICAgICAgICAgICBpZiAoKHJlbmRlcmVkTGlua0RlZi5saW5rVHlwZSAmIExpbmtUeXBlLkxpbmVhcikgPT09IExpbmtUeXBlLkxpbmVhcikge1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5wYXRoID0gW2Zyb21YWSwgdG9YWV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5wYXRoID0gc2VsZi5nZXRFbGJvd0xpbmtQYXRoKHJlbmRlcmVkTGluaywgZnJvbVhZLCB0b1hZKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGxpbmtSZW5kZXJlcjogZDMuTGluZTxhbnk+O1xuICAgICAgICAgICAgaWYgKHJlbmRlcmVkTGlua0RlZi5saW5rVHlwZSAmIExpbmtUeXBlLkN1cnZlKSB7XG4gICAgICAgICAgICAgICAgbGlua1JlbmRlcmVyID0gY3VydmU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmtSZW5kZXJlciA9IGxpbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBuZXdMaW5rID0gbGlua0dyb3VwXG4gICAgICAgICAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2QnLCBsaW5rUmVuZGVyZXIocmVuZGVyZWRMaW5rLnBhdGgpKVxuICAgICAgICAgICAgICAgIC5jbGFzc2VkKGdldENsYXNzZXMocmVuZGVyZWRMaW5rKSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAuY2xhc3NlZCgnbGluaycsIHRydWUpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXG4gICAgICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCBnZXRDb2xvcihyZW5kZXJlZExpbmspKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCByZW5kZXJlZExpbmtEZWYud2lkdGggPyByZW5kZXJlZExpbmtEZWYud2lkdGggOiAyKVxuXG4gICAgICAgICAgICBsZXQgYXJyb3c6IGFueTtcbiAgICAgICAgICAgIGxldCBlbmRQb2ludDogYW55O1xuICAgICAgICAgICAgaWYgKHJlbmRlcmVkTGlua0RlZi5saW5rVHlwZSAmIExpbmtUeXBlLkRpcmVjdGlvbmFsIHx8XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRMaW5rRGVmLmxpbmtUeXBlICYgTGlua1R5cGUuQmlkaXJlY3Rpb25hbCkge1xuICAgICAgICAgICAgICAgIGVuZFBvaW50ID0gcmVuZGVyZWRMaW5rLnBhdGhbcmVuZGVyZWRMaW5rLnBhdGgubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgYXJyb3cgPSBBcnJvdy5jcmVhdGVBcnJvdyhsaW5rR3JvdXAsIDQpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKGdldENsYXNzZXMocmVuZGVyZWRMaW5rKSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmNsYXNzZWQoJ2Fycm93JywgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBnZXRDb2xvcihyZW5kZXJlZExpbmspKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIGVuZFBvaW50LnggKyAnLCcgKyBlbmRQb2ludC55ICsgJykgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAncm90YXRlKCAnICsgQXJyb3cuZ2V0QW5nbGUocmVuZGVyZWRMaW5rLnBhdGhbcmVuZGVyZWRMaW5rLnBhdGgubGVuZ3RoIC0gMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9pbnQpICsgJyknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZW5kZXJlZExpbmtEZWYubGlua1R5cGUgJiBMaW5rVHlwZS5CaWRpcmVjdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgQXJyb3cuY3JlYXRlQXJyb3cobGlua0dyb3VwLCA0KVxuICAgICAgICAgICAgICAgICAgICAuY2xhc3NlZChnZXRDbGFzc2VzKHJlbmRlcmVkTGluayksIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdhcnJvdycsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgZ2V0Q29sb3IocmVuZGVyZWRMaW5rKSlcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgKyByZW5kZXJlZExpbmsucGF0aFswXS54ICsgJywnICsgcmVuZGVyZWRMaW5rLnBhdGhbMF0ueSArICcpICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3JvdGF0ZSggJyArIEFycm93LmdldEFuZ2xlKHJlbmRlcmVkTGluay5wYXRoWzFdLCByZW5kZXJlZExpbmsucGF0aFswXSkgKyAnKScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzVXBkYXRlICYmIHNlbGYuZ2V0QW5pbWF0ZUR1cmF0aW9uKCkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBhbmltYXRlUGF0aChuZXdMaW5rLCBzZWxmLmdldEFuaW1hdGVEdXJhdGlvbigpKTtcblxuICAgICAgICAgICAgICAgIGlmIChhcnJvdykge1xuICAgICAgICAgICAgICAgICAgICBBcnJvdy5hbmltYXRlQXJyb3cobmV3TGluaywgYXJyb3csIHNlbGYuZ2V0QW5pbWF0ZUR1cmF0aW9uKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZi5jb25maWd1cmVMaW5rSG92ZXIobmV3TGluaywgcmVuZGVyZWRMaW5rKTtcbiAgICAgICAgICAgIHNlbGYuX2RhdGFUb29sdGlwLnNldFRhcmdldChuZXdMaW5rKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbmZpZ3VyZVZpZXcoKSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLl9vcHRpb25zLmhlaWdodCA/IHRoaXMuX29wdGlvbnMuaGVpZ2h0IDogNDAwO1xuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLl9vcHRpb25zLndpZHRoO1xuXG4gICAgICAgIHRoaXMuX3N2Z1xuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXG4gICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0KTtcbiAgICAgICAgQ29ubmVjdGVkR3JhcGhCYXNlLnByb3RvdHlwZS5jb25maWd1cmVWaWV3LmNhbGwodGhpcywgaGVpZ2h0LCB3aWR0aCk7XG4gICAgfVxuICAgIC8vIEVORCBTVkcgU1RVRkZcbn1cblxuZXhwb3J0IGNsYXNzIEQzQ29ubmVjdGVkR3JhcGhQaXhpIGV4dGVuZHMgVUlFbGVtZW50UmVuZGVyZXIge1xuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqIENvbm5lY3RlZEdyYXBoSGVscGVyIGNvZGVcbiAgICAgKi9cbiAgICBfZ3JhcGhDb250YWluZXI6IGFueTtcbiAgICBfem9vbTogZDMuWm9vbUJlaGF2aW9yPEVsZW1lbnQsIHt9PjtcblxuICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFVJUmVuZGVyZXI7XG4gICAgcHJvdGVjdGVkIF9wYXJlbnQ6IGFueTtcblxuICAgIF9kYXRhVG9vbHRpcDogQ3VzdG9tRGl2VG9vbHRpcDtcbiAgICBfdG9vbHRpcElkOiBzdHJpbmc7XG4gICAgX3Rvb2x0aXBBbmFseXRpY3NOYW1lOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2NvbnRleHRNZW51SXRlbXM6IElDb250ZXh0TWVudUl0ZW1bXTtcblxuICAgIG9uSG92ZXJDaGFuZ2VkOiAoZXZlbnQ/OiBJRXZlbnQpID0+IHZvaWQ7XG4gICAgbm9kZUhvdmVyU3RhcnQ6ICgpID0+IHZvaWQ7XG4gICAgbGlua0hvdmVyU3RhcnQ6ICgpID0+IHZvaWQ7XG4gICAgaG92ZXJFbmQ6ICgpID0+IHZvaWQ7XG5cbiAgICAvKiogZ2V0IHRoZSB4eSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIGxpbmsgKi9cbiAgICBnZXRMaW5rU3RhcnRYWTogKGxpbms6IElSZW5kZXJlZERpYWdyYW1MaW5rKSA9PiBJWFlWYWx1ZTtcbiAgICAvKiogZ2V0IHRoZSB4eSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBsaW5rICovXG4gICAgZ2V0TGlua0VuZFhZOiAobGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmspID0+IElYWVZhbHVlO1xuICAgIGdldEVsYm93TGlua1BhdGg6IChsaW5rOiBJUmVuZGVyZWREaWFncmFtTGluaywgZnJvbVhZOiBJWFlWYWx1ZSxcbiAgICAgICAgdG9YWTogSVhZVmFsdWUpID0+IGFueVtdO1xuXG4gICAgY29uZmlndXJlWm9vbTogKHhFeHRlbnQ6IG51bWJlcltdLCB5RXh0ZW50OiBudW1iZXJbXSxcbiAgICAgICAgaGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICogUmVuZGVyZXIgc3BlY2lmaWMgY29kZVxuICAgICAqL1xuXG4gICAgcHJvdGVjdGVkIF9pbnRlcmFjdGlvblN0YXRlOiBJbnRlcmFjdGlvblN0YXRlO1xuXG4gICAgcHJvdGVjdGVkIF9waXhpOiBQSVhJLlJlbmRlcmVyO1xuICAgIHByb3RlY3RlZCBfcGl4aUhlbHBlcjogUElYSUhlbHBlcjtcbiAgICBwcm90ZWN0ZWQgX3N0YWdlOiBQSVhJLkNvbnRhaW5lcjtcblxuICAgIHByb3RlY3RlZCBfcGl4aUxpbmtzOiBQSVhJLkdyYXBoaWNzO1xuICAgIHByb3RlY3RlZCBfYXJyb3dUZXh0dXJlOiBQSVhJLlRleHR1cmU7XG4gICAgcHJvdGVjdGVkIF9waXhpQXJyb3dzOiBQSVhJLkNvbnRhaW5lcjtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFVJRWxlbWVudCwgcmVuZGVyZXI6IFVJUmVuZGVyZXIsXG4gICAgICAgIHBhcmVudDogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55Pikge1xuXG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQgYXMgSVBvcnREaWFncmFtO1xuICAgICAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29udGV4dE1lbnVJdGVtcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuX3Rvb2x0aXBJZCA9ICdkMy10b29sdGlwJztcbiAgICAgICAgdGhpcy5fdG9vbHRpcEFuYWx5dGljc05hbWUgPSAnZDMtdWktd2lkZ2V0LXRvb2xraXQnO1xuXG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5fZ3JhcGhDb250YWluZXIgPSBwYXJlbnQ7XG5cbiAgICAgICAgQ29ubmVjdGVkR3JhcGhCYXNlLnByb3RvdHlwZS5iaW5kLmNhbGwodGhpcywgcmVuZGVyZXIsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkICgnRGVwcmVjYXRlZCBzaW5jZSAxLjE0LjAgaW4gZmF2b3Igb2YgZm9jdXMuICBXaWxsIGJlIHJlbW92ZWQgaW4gMi54JylcbiAgICAgKiBob3ZlciBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHB1YmxpYyBob3ZlcihldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9jdXMoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGJyaW5nIGFuIGl0ZW0gaW50byBmb2N1c1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBmb2N1cyBvblxuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1cyhldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ludGVyYWN0aW9uU3RhdGUuZm9jdXMoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNlbGVjdCBhbiBpdGVtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIGl0ZW0gb25cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25TdGF0ZS5zZWxlY3QoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGJydXNoIGV2ZW50XG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHB1YmxpYyBicnVzaChldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZUN1cnNvcihldmVudDogSUV2ZW50KTogdm9pZCB7XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG9vbHRpcERhdGEoZXZlbnQ6IElFdmVudCk6IGFueSB7XG4gICAgICAgIHJldHVybiBbeyBzb3VyY2U6IHRoaXMuX2VsZW1lbnQsIGdyb3VwOiAnJywgbWV0cmljczoge30gfV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFuaW1hdGVEdXJhdGlvbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5hbmltYXRlRHVyYXRpb24gIT09IHVuZGVmaW5lZCA/IHRoaXMuX29wdGlvbnMuYW5pbWF0ZUR1cmF0aW9uIDogMTAwMDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYmluZFpvb20oKSB7XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRpc2FibGVab29tVmlld1VwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgc3RhZ2UgPSBzZWxmLl9zdGFnZSBhcyBhbnk7XG4gICAgICAgIGZ1bmN0aW9uIHpvb20oKSB7XG4gICAgICAgICAgICAvLyBpdGVtRHJhZ2dpbmcgaXMgYSB3b3JrYXJvdW5kIHRvIGhhdmUgZDMgYW5kIHBpeGkgY29leGlzdCBmb3IgZXZlbnRzXG4gICAgICAgICAgICBpZiAoIXN0YWdlLml0ZW1EcmFnZ2luZykge1xuICAgICAgICAgICAgICAgIHN0YWdlLnBvc2l0aW9uLnNldChkMy5ldmVudC50cmFuc2Zvcm0ueCwgZDMuZXZlbnQudHJhbnNmb3JtLnkpO1xuICAgICAgICAgICAgICAgIHN0YWdlLnNjYWxlLnNldChkMy5ldmVudC50cmFuc2Zvcm0uaywgZDMuZXZlbnQudHJhbnNmb3JtLmspO1xuICAgICAgICAgICAgICAgIHNlbGYuX3BpeGlIZWxwZXIucmVuZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fem9vbSA9IGQzLnpvb20oKS5vbignem9vbScsIHpvb20pO1xuICAgICAgICBzZWxmLl9wYXJlbnQuY2FsbChzZWxmLl96b29tKTtcblxuICAgICAgICAvLyBCSU5EIFpPT00gQVBJXG4gICAgICAgIGlmICghc2VsZi5fZWxlbWVudC5hcGkpIHtcbiAgICAgICAgICAgIHNlbGYuX2VsZW1lbnQuYXBpID0ge31cbiAgICAgICAgfVxuICAgICAgICBzZWxmLl9lbGVtZW50LmFwaS56b29tID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fem9vbS5zY2FsZVRvKHNlbGYuX3BhcmVudCwgZXZlbnQuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLl9lbGVtZW50LmFwaS5wYW4gPSBmdW5jdGlvbiAoZXZlbnQ6IElFdmVudCkge1xuICAgICAgICAgICAgc2VsZi5fem9vbS50cmFuc2xhdGVUbyhzZWxmLl9wYXJlbnQsIGV2ZW50LnhTdGFydCwgZXZlbnQueVN0YXJ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBfZm9jdXMoc2VsZWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5fcGl4aUhlbHBlci5nZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChpdGVtcykge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGVsZW06IGFueSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLl9wcmV2VGludCA9IGVsZW0udGludDtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS50aW50ID0gMHg4ODg4ODg7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uYWxwaGEgPSAweDg4O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcGl4aUhlbHBlci5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBfdW5mb2N1cyhzZWxlY3Rpb246IHN0cmluZykge1xuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLl9waXhpSGVscGVyLmdldFNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgICBpZiAoaXRlbXMpIHtcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGVsZW06IGFueSkge1xuICAgICAgICAgICAgICAgIGVsZW0udGludCA9IGVsZW0uX3ByZXZUaW50O1xuICAgICAgICAgICAgICAgIGVsZW0uYWxwaGEgPSAweEZGO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGl4aUhlbHBlci5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3NlbGVjdChzZWxlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLl9waXhpSGVscGVyLmdldFNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uX3ByZXZUaW50ID0gZWxlbS50aW50O1xuICAgICAgICAgICAgICAgICAgICBlbGVtLnRpbnQgPSAweDg4ODg4ODtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5hbHBoYSA9IDB4ODg7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9waXhpSGVscGVyLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIF91bnNlbGVjdChzZWxlY3Rpb246IHN0cmluZykge1xuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLl9waXhpSGVscGVyLmdldFNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgICBpZiAoaXRlbXMpIHtcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGVsZW06IGFueSkge1xuICAgICAgICAgICAgICAgIGVsZW0udGludCA9IGVsZW0uX3ByZXZUaW50O1xuICAgICAgICAgICAgICAgIGVsZW0uYWxwaGEgPSAweEZGO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGl4aUhlbHBlci5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBjb25maWd1cmVJbnRlcmFjdGlvblZpc3VhbGl6YXRpb24oKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICB0aGlzLl9pbnRlcmFjdGlvblN0YXRlID0gbmV3IEludGVyYWN0aW9uU3RhdGUoXG4gICAgICAgICAgICBmdW5jdGlvbiAoc2VsZWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9mb2N1cyhzZWxlY3Rpb24pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChzZWxlY3Rpb246IHN0cmluZykge1xuICAgICAgICAgICAgICAgIHNlbGYuX3VuZm9jdXMoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICwgZmFsc2UsXG4gICAgICAgICAgICBmdW5jdGlvbiAoc2VsZWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoc2VsZWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl91bnNlbGVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbmZpZ3VyZUNvbnRleHRNZW51KCk6IHZvaWQge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgbGV0IGdyYXBoID0gc2VsZi5fZWxlbWVudCBhcyBJQ29ubmVjdGVkR3JhcGg7XG4gICAgICAgIGlmIChncmFwaC5jb250ZXh0TWVudUl0ZW1zKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyYXBoLmNvbnRleHRNZW51SXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0TWVudUl0ZW1zLnB1c2goZ3JhcGguY29udGV4dE1lbnVJdGVtc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGFueWMgY29udGV4dCBtZW51XG4gICAgICAgIGlmIChzZWxmLl9jb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNlbGYuX3BhcmVudC5vbignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHNob3dDb250ZXh0TWVudShkMy5ldmVudCwgdW5kZWZpbmVkLCBzZWxmLl9jb250ZXh0TWVudUl0ZW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemVHcmFwaEFyZWEob3B0aW9uczogSU9wdGlvbnMpOiBhbnkge1xuICAgICAgICB0aGlzLl9jb250ZXh0TWVudUl0ZW1zID0gW107XG5cbiAgICAgICAgLy8gY3JlYXRlIHRoZSBncmFwaCBhcmVhXG4gICAgICAgIG1lcmdlKHRoaXMuX29wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGxldCBmaXJzdCA9IHRoaXMuX3BpeGlIZWxwZXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLl9waXhpSGVscGVyID0gbmV3IFBJWElIZWxwZXIoIXRoaXMuZ2V0T3B0aW9ucygpLmZvcmNlQ2FudmFzUmVuZGVyZXIpO1xuICAgICAgICAgICAgdGhpcy5fcGl4aSA9IHRoaXMuX3BpeGlIZWxwZXIuZ2V0UmVuZGVyZXIoKTtcbiAgICAgICAgICAgICh0aGlzLl9wYXJlbnQubm9kZSgpIGFzIGFueSkuYXBwZW5kQ2hpbGQodGhpcy5fcGl4aS52aWV3KTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBtYWluIHN0YWdlIGZvciB5b3VyIGRpc3BsYXkgb2JqZWN0c1xuICAgICAgICAgICAgdGhpcy5fc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAgICAgICAgICAgIHRoaXMuX3N0YWdlLmludGVyYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVBcnJvd1RleHR1cmUoKTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJlSW50ZXJhY3Rpb25WaXN1YWxpemF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3RhZ2UucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhZ2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVBcnJvd1RleHR1cmUoKSB7XG4gICAgICAgIGxldCBhcnJvdyA9IG5ldyBQSVhJLkdyYXBoaWNzKCk7XG4gICAgICAgIGFycm93LmJlZ2luRmlsbCgweDAwMDAwMCk7XG4gICAgICAgIGFycm93LmxpbmVTdHlsZSgwLCAwLCAwKTtcblxuICAgICAgICBsZXQgYXJyb3dTaXplID0gOTtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gMS4xO1xuXG4gICAgICAgIGFycm93Lm1vdmVUbygwLCAwKTtcbiAgICAgICAgYXJyb3cubGluZVRvKFxuICAgICAgICAgICAgYXJyb3dTaXplICogTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICAgICAgYXJyb3dTaXplICogTWF0aC5zaW4ocm90YXRpb24pXG4gICAgICAgICk7XG4gICAgICAgIGFycm93LmxpbmVUbyhcbiAgICAgICAgICAgIC1hcnJvd1NpemUgKiBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgICAgICBhcnJvd1NpemUgKiBNYXRoLnNpbihyb3RhdGlvbilcbiAgICAgICAgKTtcbiAgICAgICAgYXJyb3cubGluZVRvKDAsIDApO1xuXG4gICAgICAgIHRoaXMuX2Fycm93VGV4dHVyZSA9IHRoaXMuX3BpeGkuZ2VuZXJhdGVUZXh0dXJlKGFycm93LCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUiwgMTApO1xuXG4gICAgfVxuICAgIHByaXZhdGUgY3JlYXRlQXJyb3coc3RhZ2U6IFBJWEkuQ29udGFpbmVyLCB0bzogSVhZVmFsdWUsIGZyb206IElYWVZhbHVlLFxuICAgICAgICBsaW5rVHlwZTogTGlua1R5cGUsIGFsaWdubWVudDogQWxpZ25tZW50KSB7XG4gICAgICAgIGxldCBhcnJvdyA9IG5ldyBQSVhJLlNwcml0ZSh0aGlzLl9hcnJvd1RleHR1cmUpO1xuICAgICAgICBhcnJvdy5hbmNob3IgPSBuZXcgUElYSS5PYnNlcnZhYmxlUG9pbnQodW5kZWZpbmVkLCB1bmRlZmluZWQsIC41LCAwKTtcbiAgICAgICAgYXJyb3cueCA9IHRvLng7XG4gICAgICAgIGFycm93LnkgPSB0by55O1xuXG5cbiAgICAgICAgYXJyb3cucm90YXRpb24gPSAtTWF0aC5hdGFuMih0by54IC0gZnJvbS54LCB0by55IC0gZnJvbS55KTtcbiAgICAgICAgc3dpdGNoIChhbGlnbm1lbnQpIHtcbiAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LkxlZnQ6XG4gICAgICAgICAgICAgICAgYXJyb3cucm90YXRpb24gKz0gTWF0aC5QSTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlJpZ2h0OlxuICAgICAgICAgICAgICAgIGFycm93LnJvdGF0aW9uICs9IC1NYXRoLlBJO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuVG9wOlxuICAgICAgICAgICAgICAgIGFycm93LnJvdGF0aW9uICs9IDMgKiBNYXRoLlBJIC8gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LkJvdHRvbTpcbiAgICAgICAgICAgICAgICBhcnJvdy5yb3RhdGlvbiArPSAtTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFnZS5hZGRDaGlsZChhcnJvdyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlckxpbmtIZWxwZXIoc3RhZ2U6IGFueSxcbiAgICAgICAgcmVuZGVyZWRMaW5rczogSVJlbmRlcmVkRGlhZ3JhbUxpbmtbXSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHNlbGYuX3BpeGlMaW5rcykge1xuICAgICAgICAgICAgc3RhZ2UucmVtb3ZlQ2hpbGQoc2VsZi5fcGl4aUxpbmtzKTtcbiAgICAgICAgICAgIHNlbGYuX3BpeGlMaW5rcy5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgIHN0YWdlLnJlbW92ZUNoaWxkKHNlbGYuX3BpeGlBcnJvd3MpO1xuICAgICAgICAgICAgc2VsZi5fcGl4aUFycm93cy5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLl9waXhpTGlua3MgPSBuZXcgUElYSS5HcmFwaGljcygpO1xuICAgICAgICBzdGFnZS5hZGRDaGlsZEF0KHNlbGYuX3BpeGlMaW5rcywgMCk7XG5cbiAgICAgICAgc2VsZi5fcGl4aUFycm93cyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICAgICAgICBzdGFnZS5hZGRDaGlsZEF0KHNlbGYuX3BpeGlBcnJvd3MsIDEpO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGlzIGV4aXN0aW5nIGxpbmsgaWYgaXQgZXhpc3RzIGFzIHRoaXMgaXMgcmVuZGVyIHVwZGF0ZVxuICAgICAgICByZW5kZXJlZExpbmtzLmZvckVhY2goZnVuY3Rpb24gKHJlbmRlcmVkTGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmspIHtcbiAgICAgICAgICAgIGxldCByZW5kZXJlZExpbmtEZWYgPSByZW5kZXJlZExpbmsuZGVmIGFzIElEaWFncmFtTGluaztcblxuICAgICAgICAgICAgc2VsZi5fcGl4aUxpbmtzLmxpbmVTdHlsZSgyLCAweDg4ODg4OCwgLjQpO1xuICAgICAgICAgICAgbGV0IGZyb21YWSA9IHNlbGYuZ2V0TGlua1N0YXJ0WFkocmVuZGVyZWRMaW5rKTtcbiAgICAgICAgICAgIGxldCB0b1hZID0gc2VsZi5nZXRMaW5rRW5kWFkocmVuZGVyZWRMaW5rKTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVkTGlua0RlZi5saW5rVHlwZSAmIExpbmtUeXBlLkxpbmVhcikge1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5wYXRoID0gW2Zyb21YWSwgdG9YWV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5wYXRoID0gc2VsZi5nZXRFbGJvd0xpbmtQYXRoKHJlbmRlcmVkTGluaywgZnJvbVhZLCB0b1hZKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVkTGlua0RlZi5saW5rVHlwZSAmIExpbmtUeXBlLkN1cnZlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcGl4aUxpbmtzLm1vdmVUbyhyZW5kZXJlZExpbmsucGF0aFswXS54LCByZW5kZXJlZExpbmsucGF0aFswXS55KTtcbiAgICAgICAgICAgICAgICBzZWxmLl9waXhpTGlua3MuYmV6aWVyQ3VydmVUbyhyZW5kZXJlZExpbmsucGF0aFsxXS54LCByZW5kZXJlZExpbmsucGF0aFsxXS55LFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlZExpbmsucGF0aFtyZW5kZXJlZExpbmsucGF0aC5sZW5ndGggLSAyXS54LCByZW5kZXJlZExpbmsucGF0aFtyZW5kZXJlZExpbmsucGF0aC5sZW5ndGggLSAyXS55LFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlZExpbmsucGF0aFtyZW5kZXJlZExpbmsucGF0aC5sZW5ndGggLSAxXS54LCByZW5kZXJlZExpbmsucGF0aFtyZW5kZXJlZExpbmsucGF0aC5sZW5ndGggLSAxXS55KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcGl4aUxpbmtzLm1vdmVUbyhyZW5kZXJlZExpbmsucGF0aFswXS54LCByZW5kZXJlZExpbmsucGF0aFswXS55KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJlbmRlcmVkTGluay5wYXRoLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BpeGlMaW5rcy5saW5lVG8ocmVuZGVyZWRMaW5rLnBhdGhbaV0ueCwgcmVuZGVyZWRMaW5rLnBhdGhbaV0ueSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyZWRMaW5rRGVmLmxpbmtUeXBlICYgTGlua1R5cGUuQmlkaXJlY3Rpb25hbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlQXJyb3coc2VsZi5fcGl4aUFycm93cywgcmVuZGVyZWRMaW5rLnBhdGhbMF0sXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5wYXRoWzFdLCByZW5kZXJlZExpbmtEZWYubGlua1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5zb3VyY2UuYWxpZ25tZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVkTGlua0RlZi5saW5rVHlwZSAmIExpbmtUeXBlLkRpcmVjdGlvbmFsIHx8XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRMaW5rRGVmLmxpbmtUeXBlICYgTGlua1R5cGUuQmlkaXJlY3Rpb25hbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlQXJyb3coc2VsZi5fcGl4aUFycm93cyxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRMaW5rLnBhdGhbcmVuZGVyZWRMaW5rLnBhdGgubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5wYXRoW3JlbmRlcmVkTGluay5wYXRoLmxlbmd0aCAtIDJdLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlZExpbmtEZWYubGlua1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay50YXJnZXQuYWxpZ25tZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlckxlZ2VuZChoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gaGVpZ2h0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25maWd1cmVWaWV3KCkge1xuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5fb3B0aW9ucy5oZWlnaHQgPyB0aGlzLl9vcHRpb25zLmhlaWdodCA6IDQwMDtcbiAgICAgICAgbGV0IHdpZHRoID0gdGhpcy5fb3B0aW9ucy53aWR0aCA/IHRoaXMuX29wdGlvbnMud2lkdGggOlxuICAgICAgICAgICAgdGhpcy5fcGFyZW50Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgICB0aGlzLl9waXhpLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgQ29ubmVjdGVkR3JhcGhCYXNlLnByb3RvdHlwZS5jb25maWd1cmVWaWV3LmNhbGwodGhpcywgaGVpZ2h0LCB3aWR0aCk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZW5kZXJlZERpYWdyYW1MaW5rIHtcbiAgICAvKiogdXNlciBkZWZpbml0aW9uIG9mIHRoZSBsaW5rICovXG4gICAgZGVmOiBJR3JhcGhMaW5rO1xuICAgIC8qKiBzb3VyY2Ugb2YgdGhlIGxpbmsgKi9cbiAgICBzb3VyY2U6IHtcbiAgICAgICAgbm9kZTogSVJlbmRlcmVkRGlhZ3JhbU5vZGU7XG4gICAgICAgIGFsaWdubWVudDogQWxpZ25tZW50O1xuICAgICAgICBlbmRQb2ludD86IG51bWJlcjsgLy8gb25seSB1c2VkIGZvciBoaWVyYXJjaHkgZ3JhcGhcbiAgICB9XG4gICAgdGFyZ2V0OiB7XG4gICAgICAgIG5vZGU6IElSZW5kZXJlZERpYWdyYW1Ob2RlO1xuICAgICAgICBhbGlnbm1lbnQ6IEFsaWdubWVudDtcbiAgICAgICAgZW5kUG9pbnQ/OiBudW1iZXI7IC8vIG9ubHkgdXNlZCBmb3IgaGllcmFyY2h5IGdyYXBoXG4gICAgfVxuICAgIC8qKiBwYXRoIGZvciB0aGlzIGxpbmsgKi9cbiAgICBwYXRoPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlbmRlcmVkRGlhZ3JhbU5vZGUge1xuICAgIC8qKiBub2RlIGRlZmluaXRpb24gZnJtbyB0aGUgdXNlciAqL1xuICAgIGRlZjogSUdyYXBoTm9kZTtcbiAgICAvKiogdGhlIGQzIHNlbGVjdGlvbiBvZiB0aGlzIG5vZGUgKi9cbiAgICBkM3NlbGVjdGlvbj86IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT47XG4gICAgLyoqIHJlY3Qgb2YgdGhpcyBub2RlICovXG4gICAgcmVjdD86IFJlY3Q7XG5cbiAgICAvKiogY2FjaGVkIGNsYXNzZXMgb2YgdGhpcyBub2RlICovXG4gICAgY2xhc3Nlcz86IHN0cmluZztcbiAgICAvKiogY2FjaGVkIGNvbG9yIG9mIHRoaXMgbm9kZSAqL1xuICAgIGNvbG9yPzogc3RyaW5nO1xuICAgIC8qKiBjYWNoZWQgc3ZnIGNvb3JkcyBvZiB0aGlzIG5vZGUgKi9cbiAgICBzdmdDb29yZHM/OiB7XG4gICAgICAgIHg6IG51bWJlcjtcbiAgICAgICAgeTogbnVtYmVyLFxuICAgICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcmlnaHQ/OiBudW1iZXIsXG4gICAgICAgIGJvdHRvbT86IG51bWJlclxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvb3Jkc0FuZENhY2hlKHN2ZzogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PixcbiAgICBub2RlOiBhbnkpIHtcbiAgICBpZiAobm9kZS54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFub2RlLmQzc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBub2RlLmQzc2VsZWN0aW9uID0gZDMuc2VsZWN0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIG1lcmdlKG5vZGUsIGNvbnZlcnRUb1NWR0Nvb3JkcyhzdmcsIG5vZGUuZDNzZWxlY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59Il0sIm1hcHBpbmdzIjoiOztBQUNBO0FBSUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFLQTtBQUlBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUErQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuaUJBO0FBcWlCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXZCQTtBQXlCQTtBQTJCQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBeFVBO0FBMFVBO0FBNkNBO0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUlBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBMVhBO0FBcWFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/core/connected-graph/base.ts\n");

/***/ }),

/***/ "./src/core/connected-graph/force.ts":
/*!*******************************************!*\
  !*** ./src/core/connected-graph/force.ts ***!
  \*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ui_base_1 = __webpack_require__(/*! ../../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst simple_1 = __webpack_require__(/*! ./simple */ \"./src/core/connected-graph/simple.ts\");\nconst renderer_1 = __webpack_require__(/*! ../renderer */ \"./src/core/renderer.ts\");\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\nconst base_1 = __webpack_require__(/*! ./base */ \"./src/core/connected-graph/base.ts\");\nclass D3ForceGraph extends simple_1.D3SimpleGraph {\n    constructor(element, renderer, parent) {\n        super(element, renderer, parent);\n        base_1.ConnectedGraphBase.prototype.initializeGraph.call(this, element);\n    }\n    render(options) {\n        let self = this;\n        let graph = self._element;\n        if (!this._options.height) {\n            this._options.height = 400;\n        }\n        let width = this._options.width;\n        let height = this._options.height;\n        var simulation = d3.forceSimulation()\n            .force('link', d3.forceLink().id(function (d) { return d.node; }))\n            .force('charge', d3.forceManyBody())\n            .force('center', d3.forceCenter(width / 2, height / 2));\n        simulation\n            .nodes(graph.nodes)\n            .on('tick', ticked);\n        let force = simulation.force('link');\n        force.links(graph.links);\n        function ticked() {\n            links\n                .attr('x1', function (d) { return d.source.x; })\n                .attr('y1', function (d) { return d.source.y; })\n                .attr('x2', function (d) { return d.target.x; })\n                .attr('y2', function (d) { return d.target.y; });\n            nodes\n                .attr('cx', function (d) { return d.x; })\n                .attr('cy', function (d) { return d.y; });\n        }\n        function dragstarted(d) {\n            if (!d3.event.active)\n                simulation.alphaTarget(0.3).restart();\n            d.fx = d.x;\n            d.fy = d.y;\n        }\n        function dragged(d) {\n            d.fx = d3.event.x;\n            d.fy = d3.event.y;\n        }\n        function dragended(d) {\n            if (!d3.event.active)\n                simulation.alphaTarget(0);\n            d.fx = null;\n            d.fy = null;\n        }\n        let graphArea = self.initializeGraphArea(options);\n        let links = this.renderLinks(graphArea);\n        let nodes = this.renderNodes(graphArea, dragstarted, dragged, dragended);\n        self.configureView();\n    }\n}\nexports.D3ForceGraph = D3ForceGraph;\nrenderer_1.D3Renderer.register(ui_base_1.UIType.ForceDirectedGraph, D3ForceGraph);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9jb25uZWN0ZWQtZ3JhcGgvZm9yY2UudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9zcmMvY29yZS9jb25uZWN0ZWQtZ3JhcGgvZm9yY2UudHM/MDA5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIElPcHRpb25zLCBVSVR5cGUsIFVJRWxlbWVudFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvdWktYmFzZSc7XG5pbXBvcnQge1xuICAgIElDb25uZWN0ZWRHcmFwaFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvZ3JhcGgnO1xuaW1wb3J0IHtcbiAgICBEM1NpbXBsZUdyYXBoXG59IGZyb20gJy4vc2ltcGxlJztcbmltcG9ydCB7IEQzUmVuZGVyZXIgfSBmcm9tICcuLi9yZW5kZXJlcic7XG5cbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCB7IENvbm5lY3RlZEdyYXBoQmFzZSB9IGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBEM0ZvcmNlR3JhcGggZXh0ZW5kcyBEM1NpbXBsZUdyYXBoIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBVSUVsZW1lbnQsIHJlbmRlcmVyOiBEM1JlbmRlcmVyLFxuICAgICAgICBwYXJlbnQ6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4pIHtcblxuICAgICAgICBzdXBlcihlbGVtZW50LCByZW5kZXJlciwgcGFyZW50KTtcblxuICAgICAgICBDb25uZWN0ZWRHcmFwaEJhc2UucHJvdG90eXBlLmluaXRpYWxpemVHcmFwaC5jYWxsKHRoaXMsIGVsZW1lbnQgYXMgSUNvbm5lY3RlZEdyYXBoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGdyYXBoID0gc2VsZi5fZWxlbWVudCBhcyBJQ29ubmVjdGVkR3JhcGg7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5oZWlnaHQgPSA0MDA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLl9vcHRpb25zLndpZHRoO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5fb3B0aW9ucy5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHNpbXVsYXRpb24gPSBkMy5mb3JjZVNpbXVsYXRpb24oKVxuICAgICAgICAgICAgLmZvcmNlKCdsaW5rJywgZDMuZm9yY2VMaW5rKCkuaWQoZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC5ub2RlOyB9KSlcbiAgICAgICAgICAgIC5mb3JjZSgnY2hhcmdlJywgZDMuZm9yY2VNYW55Qm9keSgpKVxuICAgICAgICAgICAgLmZvcmNlKCdjZW50ZXInLCBkMy5mb3JjZUNlbnRlcih3aWR0aCAvIDIsIGhlaWdodCAvIDIpKTtcblxuICAgICAgICBzaW11bGF0aW9uXG4gICAgICAgICAgICAubm9kZXMoZ3JhcGgubm9kZXMgYXMgYW55KVxuICAgICAgICAgICAgLm9uKCd0aWNrJywgdGlja2VkKTtcblxuICAgICAgICBsZXQgZm9yY2UgPSBzaW11bGF0aW9uLmZvcmNlKCdsaW5rJyk7XG4gICAgICAgICg8YW55PmZvcmNlKS5saW5rcyhncmFwaC5saW5rcyk7XG5cbiAgICAgICAgZnVuY3Rpb24gdGlja2VkKCkge1xuICAgICAgICAgICAgbGlua3NcbiAgICAgICAgICAgICAgICAuYXR0cigneDEnLCBmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLnNvdXJjZS54OyB9KVxuICAgICAgICAgICAgICAgIC5hdHRyKCd5MScsIGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIGQuc291cmNlLnk7IH0pXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3gyJywgZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC50YXJnZXQueDsgfSlcbiAgICAgICAgICAgICAgICAuYXR0cigneTInLCBmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLnRhcmdldC55OyB9KTtcblxuICAgICAgICAgICAgbm9kZXNcbiAgICAgICAgICAgICAgICAuYXR0cignY3gnLCBmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLng7IH0pXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2N5JywgZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC55OyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRyYWdzdGFydGVkKGQ6IGFueSkge1xuICAgICAgICAgICAgaWYgKCFkMy5ldmVudC5hY3RpdmUpIHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG4gICAgICAgICAgICBkLmZ4ID0gZC54O1xuICAgICAgICAgICAgZC5meSA9IGQueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRyYWdnZWQoZDogYW55KSB7XG4gICAgICAgICAgICBkLmZ4ID0gZDMuZXZlbnQueDtcbiAgICAgICAgICAgIGQuZnkgPSBkMy5ldmVudC55O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZHJhZ2VuZGVkKGQ6IGFueSkge1xuICAgICAgICAgICAgaWYgKCFkMy5ldmVudC5hY3RpdmUpIHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMCk7XG4gICAgICAgICAgICBkLmZ4ID0gbnVsbDtcbiAgICAgICAgICAgIGQuZnkgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdyYXBoQXJlYSA9IHNlbGYuaW5pdGlhbGl6ZUdyYXBoQXJlYShvcHRpb25zKTtcbiAgICAgICAgbGV0IGxpbmtzID0gdGhpcy5yZW5kZXJMaW5rcyhncmFwaEFyZWEpO1xuICAgICAgICBsZXQgbm9kZXMgPSB0aGlzLnJlbmRlck5vZGVzKGdyYXBoQXJlYSwgZHJhZ3N0YXJ0ZWQsIGRyYWdnZWQsIGRyYWdlbmRlZCk7XG5cbiAgICAgICAgc2VsZi5jb25maWd1cmVWaWV3KCk7XG4gICAgfVxufVxuRDNSZW5kZXJlci5yZWdpc3RlcihVSVR5cGUuRm9yY2VEaXJlY3RlZEdyYXBoLCBEM0ZvcmNlR3JhcGgpOyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQU1BO0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBbkVBO0FBb0VBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/core/connected-graph/force.ts\n");

/***/ }),

/***/ "./src/core/connected-graph/hierarchy.ts":
/*!***********************************************!*\
  !*** ./src/core/connected-graph/hierarchy.ts ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ui_base_1 = __webpack_require__(/*! ../../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst utilities_1 = __webpack_require__(/*! ../utilities */ \"./src/core/utilities.ts\");\nconst svg_helper_1 = __webpack_require__(/*! ../svg-helper */ \"./src/core/svg-helper.ts\");\nconst base_1 = __webpack_require__(/*! ./base */ \"./src/core/connected-graph/base.ts\");\nconst renderer_1 = __webpack_require__(/*! ../renderer */ \"./src/core/renderer.ts\");\nclass D3HierarchyGraph extends base_1.D3ConnectedGraphSVG {\n    constructor(element, renderer, parent) {\n        super(element, renderer, parent);\n        // undo auto width from initialize call\n        this._options.width = undefined;\n        this._nodes = {};\n        this._graphRect = this._svgRect;\n        let self = this;\n        this.getLinkStartXY = function (link) {\n            let from = this._nodes[link.source.node.def.key];\n            let fromRect = base_1.getCoordsAndCache(self._svg, from);\n            let fromXY = { x: undefined, y: undefined };\n            let linkOffset = 0;\n            // get the exit point of the from node\n            switch (link.source.alignment) {\n                case ui_base_1.Alignment.Bottom:\n                    linkOffset = link.source.endPoint *\n                        ((fromRect.right - fromRect.x) / (from.ports.bottom.length + 1));\n                    fromXY.x = fromRect.x + linkOffset;\n                    fromXY.y = fromRect.bottom;\n                    break;\n                case ui_base_1.Alignment.Top:\n                    linkOffset = link.source.endPoint *\n                        ((fromRect.right - fromRect.x) / (from.ports.top.length + 1));\n                    fromXY.x = fromRect.x + linkOffset;\n                    fromXY.y = fromRect.y;\n                    break;\n                case ui_base_1.Alignment.Left:\n                    linkOffset = link.source.endPoint *\n                        ((fromRect.bottom - fromRect.y) / (from.ports.left.length + 1));\n                    fromXY.x = fromRect.x;\n                    fromXY.y = fromRect.y + linkOffset;\n                    break;\n                case ui_base_1.Alignment.Right:\n                    linkOffset = link.source.endPoint *\n                        ((fromRect.bottom - fromRect.y) / (from.ports.right.length + 1));\n                    fromXY.x = fromRect.right;\n                    fromXY.y = fromRect.y + linkOffset;\n                    break;\n            }\n            return fromXY;\n        };\n        this.getLinkEndXY = function (link) {\n            let to = this._nodes[link.target.node.def.key];\n            let toRect = base_1.getCoordsAndCache(self._svg, to);\n            let toXY = { x: undefined, y: undefined };\n            let linkOffset = 0;\n            // get the entry point of the to node and draw the elbow line\n            switch (link.target.alignment) {\n                case ui_base_1.Alignment.Bottom:\n                    linkOffset = link.target.endPoint *\n                        ((toRect.right - toRect.x) / (to.ports.bottom.length + 1));\n                    toXY.x = toRect.x + linkOffset;\n                    toXY.y = toRect.bottom;\n                    break;\n                case ui_base_1.Alignment.Top:\n                    linkOffset = link.target.endPoint *\n                        ((toRect.right - toRect.x) / (to.ports.top.length + 1));\n                    toXY.x = toRect.x + linkOffset;\n                    toXY.y = toRect.y;\n                    break;\n                case ui_base_1.Alignment.Left:\n                    linkOffset = link.target.endPoint *\n                        ((toRect.bottom - toRect.y) / (to.ports.left.length + 1));\n                    toXY.x = toRect.x;\n                    toXY.y = toRect.y + linkOffset;\n                    break;\n                case ui_base_1.Alignment.Right:\n                    linkOffset = link.target.endPoint *\n                        ((toRect.bottom - toRect.y) / (to.ports.right.length + 1));\n                    toXY.x = toRect.right;\n                    toXY.y = toRect.y + linkOffset;\n                    break;\n            }\n            return toXY;\n        };\n    }\n    static isNodeRendered(renderedNode) {\n        return renderedNode.d3selection;\n    }\n    /**\n     * get width or height not including any padding, but including internal margins\n     * get a property of the rect associated with a node.  Used to get dimensions\n     * for sizing purposes.\n     *\n     */\n    getRectPropertyMax(children, prop) {\n        let ret = 0;\n        if (children) {\n            for (let i = 0; i < children.length; ++i) {\n                let child = this._nodes[children[i].key];\n                if (D3HierarchyGraph.isNodeRendered(child)) {\n                    ret = Math.max(child.rect[prop], ret);\n                }\n            }\n        }\n        return ret;\n    }\n    /**\n     * get width or height not including any padding, but including internal margins\n     * get a property of the rect associated with a node.  Used to get dimensions\n     * for sizing purposes.\n     *\n     */\n    getStylePropertyMax(children, prop) {\n        let ret = 0;\n        if (children) {\n            for (let i = 0; i < children.length; ++i) {\n                let child = this._nodes[children[i].key];\n                if (D3HierarchyGraph.isNodeRendered(child)) {\n                    let propValue = parseInt(svg_helper_1.getStyle(child.d3selection)[prop]);\n                    ret = Math.max(propValue, ret);\n                }\n            }\n        }\n        return ret;\n    }\n    /**\n     * get height not including any padding, but including internal margins\n     * sum a property of the rect associated with a node.  Used to get dimensions\n     * for sizing purposes\n     */\n    sumVertical(children, defaultMargin) {\n        let ret = 0;\n        if (children) {\n            let marginTop = 0;\n            let marginBottom = 0;\n            let cssMargin;\n            let hasChildren = false;\n            for (let i = 0; i < children.length; ++i) {\n                let child = this._nodes[children[i].key];\n                if (D3HierarchyGraph.isNodeRendered(child)) {\n                    if (hasChildren) {\n                        // handle top margin\n                        cssMargin = parseInt(svg_helper_1.getStyle(child.d3selection)['margin-top']);\n                        marginTop = cssMargin ? cssMargin : defaultMargin;\n                        if (marginTop > marginBottom) {\n                            ret += marginTop - marginBottom;\n                        }\n                    }\n                    let rect = svg_helper_1.convertToSVGCoords(this._svg, child.d3selection);\n                    ret += Math.max(rect.height, child.rect.height);\n                    // handle bottom margin\n                    cssMargin = parseInt(svg_helper_1.getStyle(child.d3selection)['margin-bottom']);\n                    marginBottom = cssMargin ? cssMargin : defaultMargin;\n                    ret += marginBottom;\n                    hasChildren = true;\n                }\n            }\n            if (hasChildren) {\n                ret -= marginBottom;\n            }\n        }\n        return ret;\n    }\n    /**\n     * move nodes that use a vertical alignment into the right position\n     */\n    transformVerticalNodes(xMid, y, children, defaultMargin) {\n        let ret = false;\n        if (children) {\n            let marginTop = 0;\n            let marginBottom = 0;\n            let cssMargin;\n            let hasChildren = false;\n            for (let i = 0; i < children.length; ++i) {\n                let child = this._nodes[children[i].key];\n                if (D3HierarchyGraph.isNodeRendered(child)) {\n                    ret = true;\n                    let rect = svg_helper_1.convertToSVGCoords(this._svg, child.d3selection);\n                    let x = xMid - Math.max(rect.width, child.rect.width) / 2;\n                    if (hasChildren) {\n                        // handle top margin\n                        let cssMargin = parseInt(svg_helper_1.getStyle(child.d3selection)['margin-top']);\n                        marginTop = cssMargin ? cssMargin : defaultMargin;\n                        if (marginTop > marginBottom) {\n                            y += marginTop - marginBottom;\n                        }\n                    }\n                    child.d3selection\n                        .transition()\n                        .duration(this.getAnimateDuration())\n                        .attr('transform', 'translate(' + x + ', ' + y + ')');\n                    child.rect.x = x;\n                    child.rect.y = y;\n                    y += child.rect['height'];\n                    cssMargin = parseInt(svg_helper_1.getStyle(child.d3selection)['margin-bottom']);\n                    marginBottom = cssMargin ? cssMargin : defaultMargin;\n                    y += marginBottom;\n                    hasChildren = true;\n                }\n            }\n        }\n        return ret;\n    }\n    /**\n     * get width not including any padding, but including internal margins\n     * sum a property of the rect associated with a node.  Used to get dimensions\n     * for sizing purposes\n     */\n    sumHorizontal(children, defaultMargin) {\n        let ret = 0;\n        if (children) {\n            let marginLeft = 0;\n            let marginRight = 0;\n            let cssMargin;\n            let hasChildren = false;\n            for (let i = 0; i < children.length; ++i) {\n                let child = this._nodes[children[i].key];\n                if (D3HierarchyGraph.isNodeRendered(child)) {\n                    if (hasChildren) {\n                        // handle left margin\n                        cssMargin = parseInt(svg_helper_1.getStyle(child.d3selection)['margin-left']);\n                        marginLeft = cssMargin ? cssMargin : defaultMargin;\n                        if (marginLeft > marginRight) {\n                            ret += marginLeft - marginRight;\n                        }\n                    }\n                    let rect = svg_helper_1.convertToSVGCoords(this._svg, child.d3selection);\n                    ret += Math.max(rect.width, child.rect.width);\n                    // handle right margin\n                    cssMargin = parseInt(svg_helper_1.getStyle(child.d3selection)['margin-right']);\n                    marginRight = cssMargin ? cssMargin : defaultMargin;\n                    ret += marginRight;\n                    hasChildren = true;\n                }\n            }\n            if (hasChildren) {\n                ret -= marginRight;\n            }\n        }\n        return ret;\n    }\n    /**\n     * move nodes that use a horizontal alignment into the right position\n     */\n    transformHorizontalNodes(x, yMid, children, defaultMargin) {\n        let ret = false;\n        if (children) {\n            let marginLeft = 0;\n            let marginRight = 0;\n            let cssMargin;\n            let hasChildren = false;\n            for (let i = 0; i < children.length; ++i) {\n                let child = this._nodes[children[i].key];\n                if (D3HierarchyGraph.isNodeRendered(child)) {\n                    ret = true;\n                    let rect = svg_helper_1.convertToSVGCoords(this._svg, child.d3selection);\n                    let y = yMid - Math.max(rect.height, child.rect.height) / 2;\n                    if (hasChildren) {\n                        // handle top margin\n                        let cssMargin = parseInt(svg_helper_1.getStyle(child.d3selection)['margin-left']);\n                        marginLeft = cssMargin ? cssMargin : defaultMargin;\n                        if (marginLeft > marginRight) {\n                            x += marginLeft - marginRight;\n                        }\n                    }\n                    child.d3selection\n                        .transition()\n                        .duration(this.getAnimateDuration())\n                        .attr('transform', 'translate(' + x + ', ' + y + ')');\n                    child.rect.x = x;\n                    child.rect.y = y;\n                    x += child.rect['width'];\n                    // handle bottom margin\n                    cssMargin = parseInt(svg_helper_1.getStyle(child.d3selection)['margin-right']);\n                    marginRight = cssMargin ? cssMargin : defaultMargin;\n                    x += marginRight;\n                    hasChildren = true;\n                }\n            }\n        }\n        return ret;\n    }\n    calculateNodeWidth(node, topRect, bottomRect, centerRect, leftRect, rightRect, nodeContentRect, defaultMargin, defaultPadding) {\n        let ret = 0;\n        ret = Math.max(ret, topRect.width);\n        ret = Math.max(ret, centerRect.width);\n        ret = Math.max(ret, bottomRect.width);\n        ret = Math.max(ret, nodeContentRect.width);\n        let middleWidth = 0;\n        // for each possible horizontal grouping calculate what the maximum width could be\n        if (leftRect.width !== 0) {\n            // start with the left side and compute the width from left to right\n            middleWidth = leftRect.width;\n            if (centerRect.width !== 0) {\n                // add left to center margin\n                middleWidth += Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.left, 'margin-right'), parseInt(svg_helper_1.getStyle(this._nodes[node.center[0].key].d3selection)['margin-left'])));\n                middleWidth += centerRect.width;\n                if (rightRect.width !== 0) {\n                    // add center to right margin\n                    middleWidth += Math.max(defaultMargin, Math.max(parseInt(svg_helper_1.getStyle(this._nodes[node.center[node.center.length - 1].key].d3selection)['margin-right'], this.getStylePropertyMax(node.right, 'margin-left'))));\n                    middleWidth += rightRect.width;\n                }\n            }\n            else if (rightRect.width !== 0) {\n                // no center so just add left to right margin\n                middleWidth += Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.left, 'margin-right'), this.getStylePropertyMax(node.right, 'margin-left')));\n                middleWidth += rightRect.width;\n            }\n        }\n        else if (centerRect.width !== 0) {\n            // no left nodes\n            if (rightRect.width !== 0) {\n                // add center to right margin\n                middleWidth += Math.max(defaultMargin, Math.max(parseInt(svg_helper_1.getStyle(this._nodes[node.center[node.center.length - 1].key].d3selection)['margin-right'], this.getStylePropertyMax(node.right, 'margin-left'))));\n                middleWidth += rightRect.width;\n            }\n            middleWidth += centerRect.width;\n        }\n        else {\n            middleWidth = rightRect.width;\n        }\n        ret = Math.max(middleWidth, ret);\n        ret += Math.max(defaultPadding, parseInt(svg_helper_1.getStyle(this._nodes[node.key].d3selection).paddingLeft));\n        ret += Math.max(defaultPadding, parseInt(svg_helper_1.getStyle(this._nodes[node.key].d3selection).paddingRight));\n        return ret;\n    }\n    calculateNodeHeight(node, topRect, bottomRect, centerRect, leftRect, rightRect, nodeContentRect, defaultMargin, defaultPadding) {\n        let leftHeight = 0;\n        let centerHeight = 0;\n        let rightHeight = 0;\n        let topBottomHeight = 0;\n        // for each possible vertical grouping add up what the maximum height could be\n        if (leftRect.height !== 0) {\n            // calc the total height of the left nodes + top + bottom with margins\n            leftHeight = leftRect.height;\n            if (topRect.height !== 0) {\n                // add top node bottom margin or left nodes top margin\n                leftHeight += Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.top, 'margin-bottom'), parseInt(svg_helper_1.getStyle(this._nodes[node.left[0].key].d3selection)['margin-top'])));\n                leftHeight += topRect.height;\n            }\n            if (bottomRect.height !== 0) {\n                // add left nodes bottom margin or bottom nodes top margin\n                leftHeight += Math.max(defaultMargin, Math.max(parseInt(svg_helper_1.getStyle(this._nodes[node.left[node.left.length - 1].key].d3selection)['margin-bottom'], this.getStylePropertyMax(node.bottom, 'margin-top'))));\n                leftHeight += bottomRect.height;\n            }\n        }\n        if (centerRect.height !== 0) {\n            // calc the total height of the center nodes + top + bottom with margins\n            centerHeight = centerRect.height;\n            if (topRect.height !== 0) {\n                // add top node bottom margin or center nodes top margin\n                centerHeight += Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.top, 'margin-bottom'), this.getStylePropertyMax(node.center, 'margin-top')));\n                centerHeight += topRect.height;\n            }\n            if (bottomRect.height !== 0) {\n                // add center nodes bottom margin or bottom nodes top margin\n                centerHeight += bottomRect.height;\n                centerHeight += Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.center, 'margin-bottom'), this.getStylePropertyMax(node.bottom, 'margin-top')));\n            }\n        }\n        if (rightRect.height !== 0) {\n            // add top node bottom margin or right nodes top margin\n            rightHeight = rightRect.height;\n            if (topRect.height !== 0) {\n                rightHeight += topRect.height;\n                rightHeight += Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.top, 'margin-bottom'), parseInt(svg_helper_1.getStyle(this._nodes[node.right[0].key].d3selection)['margin-top'])));\n            }\n            if (bottomRect.height !== 0) {\n                // add right nodes bottom margin or bottom nodes top margin\n                rightHeight += bottomRect.height;\n                rightHeight += Math.max(defaultMargin, Math.max(parseInt(svg_helper_1.getStyle(this._nodes[node.right[node.right.length - 1].key].d3selection)['margin-bottom'], this.getStylePropertyMax(node.bottom, 'margin-top'))));\n            }\n        }\n        if (topRect.height && bottomRect.height) {\n            topBottomHeight = topRect.height + bottomRect.height;\n            topBottomHeight += Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.top, 'margin-bottom'), this.getStylePropertyMax(node.bottom, 'margin-top')));\n        }\n        let ret = 0;\n        ret = Math.max(ret, topRect.height);\n        ret = Math.max(ret, bottomRect.height);\n        ret = Math.max(ret, topBottomHeight);\n        ret = Math.max(ret, leftHeight);\n        ret = Math.max(ret, centerHeight);\n        ret = Math.max(ret, rightHeight);\n        if (nodeContentRect.height) {\n            ret += nodeContentRect.height;\n        }\n        ret += Math.max(defaultPadding, parseInt(svg_helper_1.getStyle(this._nodes[node.key].d3selection).paddingTop));\n        ret += Math.max(defaultPadding, parseInt(svg_helper_1.getStyle(this._nodes[node.key].d3selection).paddingBottom));\n        return ret;\n    }\n    /**\n    * move this node and its decendants into place\n    */\n    transformNode(node, border, nodeContents, defaultMargin, defaultPadding) {\n        let self = this;\n        let renderedNode = self._nodes[node.key];\n        let rect = new ui_base_1.Rect(0, 0, 0, 0);\n        // get the width of the whole window\n        let widthProp = 'width';\n        let heightProp = 'height';\n        let cssMargin = parseInt(svg_helper_1.getStyle(renderedNode.d3selection)['margin-top']);\n        defaultMargin = cssMargin ? cssMargin : defaultMargin;\n        let cssPadding = parseInt(svg_helper_1.getStyle(renderedNode.d3selection)['padding-top']);\n        defaultPadding = cssPadding ? cssPadding : defaultPadding;\n        let topRect = new ui_base_1.Rect(0, 0, self.sumHorizontal(node.top, defaultMargin), self.getRectPropertyMax(node.top, heightProp));\n        let bottomRect = new ui_base_1.Rect(0, 0, self.sumHorizontal(node.bottom, defaultMargin), self.getRectPropertyMax(node.bottom, heightProp));\n        let leftRect = new ui_base_1.Rect(0, 0, self.getRectPropertyMax(node.left, widthProp), self.sumVertical(node.left, defaultMargin));\n        let rightRect = new ui_base_1.Rect(0, 0, self.getRectPropertyMax(node.right, widthProp), self.sumVertical(node.right, defaultMargin));\n        let centerRect = new ui_base_1.Rect(0, 0, self.sumHorizontal(node.center, defaultMargin), self.getRectPropertyMax(node.center, heightProp));\n        let nodeContentRect = new ui_base_1.Rect(0, 0, renderedNode.rect[widthProp], renderedNode.rect[heightProp]);\n        // compute the rectangle with with padding/margins\n        rect.width = self.calculateNodeWidth(node, topRect, bottomRect, centerRect, leftRect, rightRect, nodeContentRect, defaultMargin, defaultPadding);\n        rect.height = self.calculateNodeHeight(node, topRect, bottomRect, centerRect, leftRect, rightRect, nodeContentRect, defaultMargin, defaultPadding);\n        // draw the border now that we know the dimensions\n        if (border) {\n            // render full size so we can see what the CSS looks like\n            border\n                .attr('height', rect.height)\n                .attr('width', rect.width);\n            let renderedRect = svg_helper_1.convertToSVGCoords(self._svg, border);\n            rect.height = renderedRect.height;\n            rect.width = renderedRect.width;\n            // now show it as a transition\n            border\n                .attr('height', 0)\n                .attr('width', 0)\n                .transition()\n                .duration(self.getAnimateDuration())\n                .attr('x', 0)\n                .attr('y', 0)\n                .attr('height', rect.height)\n                .attr('width', rect.width);\n        }\n        renderedNode.rect = rect;\n        if (nodeContents) {\n            let contentStyle = svg_helper_1.getStyle(nodeContents);\n            let xOffset = (rect.width - nodeContentRect.width) / 2;\n            let yPadding = defaultPadding;\n            let yOffset = yPadding;\n            nodeContents\n                .transition()\n                .duration(self.getAnimateDuration())\n                .attr('transform', 'translate(' + xOffset + ',' + yOffset + ')');\n        }\n        let parentMidX = rect.width / 2;\n        let elemMidX = parentMidX - topRect.width / 2;\n        let elemMidY = self._padding + nodeContentRect.height + topRect.height / 2;\n        self.transformHorizontalNodes(elemMidX, elemMidY, node.top, defaultMargin);\n        // find the center of the center square (parent rect is a 3x3 tic-tac-toe)\n        let centerMidX = leftRect.width +\n            ((rect.width - rightRect.width - leftRect.width) / 2);\n        let centerMidY = topRect.height + nodeContentRect.height +\n            ((rect.height - bottomRect.height - topRect.height - nodeContentRect.height) / 2);\n        elemMidX = self._padding + leftRect.width / 2;\n        self.transformVerticalNodes(elemMidX, centerMidY - leftRect.height / 2, node.left, defaultMargin);\n        elemMidX = rect.width - (rightRect.width + self._padding) / 2;\n        self.transformVerticalNodes(elemMidX, centerMidY - rightRect.height / 2, node.right, defaultMargin);\n        elemMidX = parentMidX - bottomRect.width / 2;\n        elemMidY = rect.height - bottomRect.height / 2 - self._padding;\n        self.transformHorizontalNodes(elemMidX, elemMidY, node.bottom, defaultMargin);\n        if (node.center && node.center.length > 0) {\n            // centerX is the x pos where the node center starts.  This is different than Y\n            let centerX = centerMidX - centerRect.width / 2;\n            if (leftRect.width) {\n                centerX = Math.max(centerX, self._padding + leftRect.width +\n                    Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.left, 'margin-right'), parseInt(svg_helper_1.getStyle(self._nodes[node.center[0].key].d3selection)['margin-left']))));\n            }\n            if (rightRect.width) {\n                centerX = Math.min(centerX, rect.width - self._padding - rightRect.width -\n                    centerRect.width -\n                    Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.right, 'margin-left'), parseInt(svg_helper_1.getStyle(self._nodes[node.center[node.center.length - 1].key].d3selection)['margin-left']))));\n            }\n            // centerY is the y pos of the middle the center nodes.  This is different than X.\n            let centerY = centerMidY;\n            if (topRect.height) {\n                centerY = Math.max(centerY, self._padding + topRect.height +\n                    Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.top, 'margin-bottom'), this.getStylePropertyMax(node.center, 'margin-top'))) +\n                    centerRect.height / 2);\n            }\n            if (bottomRect.height) {\n                centerY = Math.min(centerY, rect.height - self._padding - bottomRect.height -\n                    centerRect.height / 2 -\n                    Math.max(defaultMargin, Math.max(this.getStylePropertyMax(node.center, 'margin-bottom'), this.getStylePropertyMax(node.bottom, 'margin-top'))));\n            }\n            self.transformHorizontalNodes(centerX, centerY, node.center, defaultMargin);\n        }\n    }\n    /**\n     * configure the hover requirements for a node\n     */\n    configureItemHover(elem, node) {\n        let self = this;\n        if (!node.def.disableHover) {\n            elem.on('mouseenter', self.nodeHoverStart)\n                .on('mouseleave', self.hoverEnd);\n        }\n        else {\n            elem.on('mouseenter', function () { elem.classed('hover', true); })\n                .on('mouseleave', function () { elem.classed('hover', false); });\n        }\n        if (!node.def.hideTooltip) {\n            self._dataTooltip.setTarget(elem);\n        }\n        let graph = this._element;\n        svg_helper_1.addClickHelper(elem, self.getOptions(), graph.onClick, graph.onDoubleClick, graph.contextMenuItems, self._dataTooltip, graph, node.def, node.def.key);\n        let htmlNode = elem.node();\n        htmlNode['__data__'] = node.def;\n    }\n    renderNodes(parent, node, group, depth) {\n        let self = this;\n        node.depth = depth;\n        let renderedNode = {\n            def: node,\n            ports: {}\n        };\n        self._nodes[node.key] = renderedNode;\n        node.parent = parent;\n        if (self._decimator && !self._decimator.isVisible(node)) {\n            delete renderedNode.d3selection;\n            return;\n        }\n        let getColor = function () {\n            if (node.type && node.type.length > 0) {\n                for (let i = 0; i < node.type.length; ++i) {\n                    if (self._colorMgr.hasColor(node.type[i])) {\n                        return self._colorMgr.getColor(node.type[i]);\n                    }\n                }\n            }\n            if (node.key && self._colorMgr.hasColor(node.key)) {\n                return self._colorMgr.getColor(node.key);\n            }\n            return 'white';\n        };\n        let classes = utilities_1.getSelectionName(node.key) + ' node ';\n        if (node.type && node.type.length > 0) {\n            for (let i = 0; i < node.type.length; ++i) {\n                classes += ' ' + utilities_1.getSelectionName(node.type[i]);\n            }\n        }\n        let childGroup = group.append('g')\n            .classed(classes, true);\n        renderedNode.d3selection = childGroup;\n        let border;\n        if (!node.hideBorder) {\n            border = childGroup.append('rect')\n                .classed(classes, true)\n                .classed('border', true)\n                .attr('fill', getColor)\n                .attr('stroke', 'black')\n                .attr('stroke-opacity', .2)\n                .attr('rx', 6)\n                .attr('ry', 6);\n            self.configureItemHover(border, renderedNode);\n        }\n        for (let childIdx = 0; childIdx < D3HierarchyGraph.CHILDREN.length; ++childIdx) {\n            let children = D3HierarchyGraph.CHILDREN[childIdx];\n            if (node.hasOwnProperty(children)) {\n                for (let i = 0; i < node[children].length; ++i) {\n                    self.renderNodes(node, node[children][i], childGroup, depth + 1);\n                }\n            }\n        }\n        let nodeContents;\n        let rect = new ui_base_1.Rect(0, 0, 0, 0);\n        let image;\n        let imageRect;\n        let textLabel;\n        let textRect;\n        if (!node.hideImageLabel && (node.label || node.image)) {\n            nodeContents = childGroup.append('g')\n                .classed(classes, true);\n            if (node.image) {\n                // X/Y have to be set or else the convertToSVGCoords call gives back a bad rect\n                image = nodeContents.append('image')\n                    .attr('xlink:href', node.image)\n                    .classed(classes, true)\n                    .attr('x', self._renderOrigin.x)\n                    .attr('y', self._renderOrigin.y);\n                let cssHeight = parseInt(svg_helper_1.getStyle(image).height);\n                let cssWidth = parseInt(svg_helper_1.getStyle(image).width);\n                image.attr('height', cssHeight ? cssHeight : node.imageHeight ? node.imageHeight : 40);\n                image.attr('width', cssWidth ? cssWidth : node.imageWidth ? node.imageWidth : 40);\n                self.configureItemHover(image, renderedNode);\n                imageRect = svg_helper_1.convertToSVGCoords(self._svg, image);\n                rect.width = Math.max(rect.width, imageRect.width);\n                rect.height += imageRect.height;\n            }\n            if (node.label) {\n                // X/Y have to be set or else the convertToSVGCoords call gives back a bad rect\n                textLabel = nodeContents.append('text')\n                    .classed(classes, true)\n                    .attr('x', self._renderOrigin.x)\n                    .attr('y', self._renderOrigin.y)\n                    .attr('text-anchor', 'middle')\n                    .attr('alignment-baseline', 'middle')\n                    .text(node.label);\n                self.configureItemHover(textLabel, renderedNode);\n                textRect = svg_helper_1.convertToSVGCoords(self._svg, textLabel);\n                rect.width = Math.max(rect.width, textRect.width);\n                rect.height += textRect.height;\n            }\n        }\n        if (self._renderOrigin.x !== 0 ||\n            self._renderOrigin.y !== 0) {\n            if (border) {\n                // the transition is done in transform nodes since there is other\n                // parts of the transition that have to happen\n                border\n                    .attr('x', self._renderOrigin.x)\n                    .attr('y', self._renderOrigin.y);\n            }\n            if (imageRect) {\n                image\n                    .transition()\n                    .duration(self.getAnimateDuration())\n                    .attr('x', rect.width / 2 - imageRect.width / 2)\n                    .attr('y', 0);\n            }\n            if (textRect) {\n                textLabel\n                    .transition()\n                    .duration(self.getAnimateDuration())\n                    .attr('x', rect.width / 2)\n                    .attr('y', rect.height - textRect.height / 2);\n            }\n        }\n        else {\n            if (imageRect) {\n                image.attr('x', rect.width / 2 - imageRect.width / 2)\n                    .attr('y', 0);\n            }\n            if (textRect) {\n                textLabel.attr('x', rect.width / 2)\n                    .attr('y', rect.height - textRect.height / 2);\n            }\n        }\n        renderedNode.rect = rect;\n        self.transformNode(node, border, nodeContents, self._margin, self._padding);\n    }\n    /** create the ports on the nodes that the links will attach due based on the order of\n     * the links in the list.  The first link on a given side of a node takes the first port etc...\n     */\n    createLinks(links) {\n        let ret = [];\n        let self = this;\n        for (let i = 0; i < links.length; ++i) {\n            let from = self._nodes[links[i].from];\n            let to = self._nodes[links[i].to];\n            if (self._decimator) {\n                while (from && !self._decimator.isVisible(from.def)) {\n                    from = self._nodes[from.def.parent.key];\n                }\n                while (to && !self._decimator.isVisible(to.def)) {\n                    to = self._nodes[to.def.parent.key];\n                }\n            }\n            // links internal to a node should be ignored\n            if (from === undefined || to === undefined) {\n                continue;\n            }\n            // Handle case where one is an ancestor of another\n            let descendant = from.def.depth > to.def.depth ? from : to;\n            let ancestor = from.def.depth > to.def.depth ? to : from;\n            while (ancestor.def.depth != descendant.def.depth) {\n                descendant = self._nodes[descendant.def.parent.key];\n            }\n            if (ancestor === descendant) {\n                continue;\n            }\n            let renderedLink = {\n                def: links[i],\n                source: { node: from, endPoint: undefined, alignment: undefined },\n                target: { node: to, endPoint: undefined, alignment: undefined },\n            };\n            ret.push(renderedLink);\n            let fromRect = svg_helper_1.convertToSVGCoords(self._svg, from.d3selection);\n            let toRect = svg_helper_1.convertToSVGCoords(self._svg, to.d3selection);\n            if (fromRect.bottom < toRect.y) {\n                // from is above to\n                if (!from.ports.bottom) {\n                    from.ports.bottom = [];\n                }\n                if (!to.ports.top) {\n                    to.ports.top = [];\n                }\n                from.ports.bottom.push(renderedLink);\n                to.ports.top.push(renderedLink);\n                renderedLink.source.alignment = ui_base_1.Alignment.Bottom;\n                renderedLink.target.alignment = ui_base_1.Alignment.Top;\n            }\n            else if (fromRect.y > toRect.bottom) {\n                // from is below to\n                if (!from.ports.top) {\n                    from.ports.top = [];\n                }\n                if (!to.ports.bottom) {\n                    to.ports.bottom = [];\n                }\n                from.ports.top.push(renderedLink);\n                to.ports.bottom.push(renderedLink);\n                renderedLink.source.alignment = ui_base_1.Alignment.Top;\n                renderedLink.target.alignment = ui_base_1.Alignment.Bottom;\n            }\n            else if (fromRect.right < toRect.x) {\n                // from is left of to\n                if (!from.ports.right) {\n                    from.ports.right = [];\n                }\n                if (!to.ports.left) {\n                    to.ports.left = [];\n                }\n                from.ports.right.push(renderedLink);\n                to.ports.left.push(renderedLink);\n                renderedLink.source.alignment = ui_base_1.Alignment.Right;\n                renderedLink.target.alignment = ui_base_1.Alignment.Left;\n            }\n            else {\n                // from is to the right of to\n                if (!from.ports.left) {\n                    from.ports.left = [];\n                }\n                if (!to.ports.right) {\n                    to.ports.right = [];\n                }\n                from.ports.left.push(renderedLink);\n                to.ports.right.push(renderedLink);\n                renderedLink.source.alignment = ui_base_1.Alignment.Left;\n                renderedLink.target.alignment = ui_base_1.Alignment.Right;\n            }\n        }\n        return ret;\n    }\n    /** does an in place merge of input and output links for a node since a node may have\n     * input and output ports on the same side of the node\n     */\n    mergeNodePorts(links, node) {\n        let nodeEndPoints = {}; // maps node endpoints to index values\n        let usedIdx = 0;\n        for (let i = 0; i < links.length; ++i) {\n            let link = links[i];\n            let linkDef = link.def;\n            if (link.source.node === node) {\n                if (linkDef.fromConnectionPoint) {\n                    if (nodeEndPoints[linkDef.fromConnectionPoint] === undefined) {\n                        nodeEndPoints[linkDef.fromConnectionPoint] = ++usedIdx;\n                    }\n                    link.source.endPoint = nodeEndPoints[linkDef.fromConnectionPoint];\n                }\n                else {\n                    link.source.endPoint = ++usedIdx;\n                }\n            }\n            else {\n                if (linkDef.toConnectionPoint) {\n                    if (nodeEndPoints[linkDef.toConnectionPoint] === undefined) {\n                        nodeEndPoints[linkDef.toConnectionPoint] = ++usedIdx;\n                    }\n                    link.target.endPoint = nodeEndPoints[linkDef.toConnectionPoint];\n                }\n                else {\n                    link.target.endPoint = ++usedIdx;\n                }\n            }\n        }\n        links.length = usedIdx;\n    }\n    /** walk over nodes and sort the link endpoints based on the node positions\n    * to minimize crossing so ports are assigned based on the location of the nodes\n    * they are connecting to.  Example if the target node is above the source node it will\n    * take a higher port position than a link where the target node is below the source node */\n    orderNodePorts() {\n        for (let key in this._nodes) {\n            let node = this._nodes[key];\n            let sortVertical = function (a, b) {\n                let aComparator = a.source.node === node ? a.target.node : a.source.node;\n                let bComparator = b.source.node === node ? b.target.node : b.source.node;\n                return aComparator.d3selection.node().getBoundingClientRect().top -\n                    bComparator.d3selection.node().getBoundingClientRect().top;\n            };\n            let sortHorizontal = function (a, b) {\n                let aComparator = a.source.node === node ? a.target.node : a.source.node;\n                let bComparator = b.source.node === node ? b.target.node : b.source.node;\n                return aComparator.d3selection.node().getBoundingClientRect().left -\n                    bComparator.d3selection.node().getBoundingClientRect().left;\n            };\n            if (node.ports.top) {\n                node.ports.top.sort(sortHorizontal);\n                this.mergeNodePorts(node.ports.top, node);\n            }\n            if (node.ports.bottom) {\n                node.ports.bottom.sort(sortHorizontal);\n                this.mergeNodePorts(node.ports.bottom, node);\n            }\n            if (node.ports.left) {\n                node.ports.left.sort(sortVertical);\n                this.mergeNodePorts(node.ports.left, node);\n            }\n            if (node.ports.right) {\n                node.ports.right.sort(sortVertical);\n                node.ports.right.sort(sortVertical);\n                this.mergeNodePorts(node.ports.right, node);\n            }\n        }\n    }\n    /**\n     * actually render the links using the path information provided\n     * by the link functions\n     */\n    renderLinks(links, graphArea) {\n        // create the end points for each link\n        let renderedLinks = this.createLinks(links);\n        // sort links to minimize crossing (see function header for more detail)\n        this.orderNodePorts();\n        this.renderLinkHelper(graphArea, renderedLinks);\n    }\n    sizeViewToFit(root) {\n        let resizeView;\n        let rect = this._nodes[root.key].rect;\n        if (this._options.fitToWindow) {\n            resizeView = this._svg\n                .transition('resizeView')\n                .duration(this.getAnimateDuration())\n                .attr('viewBox', '0 0 ' + rect.width + ' ' + rect.height)\n                .attr('preserveAspectRatio', 'xMidYMid meet');\n            if (this._options.width) {\n                resizeView\n                    .attr('width', this._options.width)\n                    .attr('height', undefined);\n            }\n            else if (this._options.height) {\n                resizeView\n                    .attr('width', undefined)\n                    .attr('height', this._options.height);\n            }\n            else {\n                resizeView\n                    .attr('width', '100%')\n                    .attr('height', undefined);\n            }\n        }\n        else {\n            resizeView = this._svg\n                .transition('resizeView')\n                .duration(this.getAnimateDuration())\n                .attr('width', rect.width)\n                .attr('height', rect.height);\n        }\n        return resizeView;\n    }\n    renderHelper(root, isBackgroundRender = false) {\n        let self = this;\n        self._nodes = {};\n        let graphArea = self._svg.insert('g', 'g')\n            .classed('graph', true);\n        let oldAnimateDuration = self.getAnimateDuration();\n        if (isBackgroundRender) {\n            self._options.animateDuration = 0;\n            graphArea.attr('opacity', 0);\n        }\n        self._decimator = self._element.decimator;\n        self.renderNodes(undefined, root, graphArea, 0);\n        // render links after nodes are done rendering\n        self.initializeLinkLayer(graphArea);\n        let links = self._element.links;\n        graphArea\n            .transition('nodeWait')\n            .duration(self.getAnimateDuration())\n            .on('end', function () { self.renderLinks(links, graphArea); });\n        if (isBackgroundRender) {\n            self._options.animateDuration = oldAnimateDuration;\n        }\n        else {\n            // resize window if this isn't a background render\n            self.sizeViewToFit(root);\n        }\n        return graphArea;\n    }\n    /**\n     * render the hierarchical graph\n     */\n    render(options) {\n        let self = this;\n        let graph = self._element;\n        // TODO pass these in as options\n        self._margin = 30;\n        self._padding = 10;\n        self.loadOptions(options);\n        let newRoot = self._element.nodes;\n        let oldGraph = self._svg.select('.graph');\n        let animateDuration = self.getAnimateDuration();\n        if (animateDuration !== 0) {\n            // make the graph transition in a pretty way\n            // this would be where the new root was in the old tree\n            let newRootInOldTree = self._nodes[newRoot.key];\n            // render the new tree hidden first so we can make transitions\n            self._renderOrigin = { x: 0, y: 0 };\n            let newGraph = self.renderHelper(newRoot, true);\n            // this would be where the old root is in the new\n            let oldRootInNewTree;\n            let oldGraphNode = oldGraph.select('rect').node();\n            if (oldGraphNode) {\n                oldRootInNewTree = self._nodes[oldGraphNode['__data__'].key];\n            }\n            if (newRootInOldTree) {\n                // new root was in old tree so this is zooming into a node\n                let newRootNode = self._nodes[newRoot.key];\n                let oldRect = svg_helper_1.convertToSVGCoords(self._svg, newRootInOldTree.d3selection);\n                let translateOldNode = oldGraph\n                    .transition('translateOldNode')\n                    .duration(animateDuration)\n                    .attr('transform', 'translate(-' + oldRect.x + ',-' + oldRect.y + ')');\n                let resizeView = self.sizeViewToFit(newRoot);\n                let nodeChanged = newRootInOldTree.d3selection.selectAll('*').size() !==\n                    newRootNode.d3selection.selectAll('*').size();\n                if (nodeChanged) {\n                    // root has added/removed nodes so wait for the size\n                    // transition and then redraw the root\n                    newGraph.remove();\n                    resizeView\n                        .transition()\n                        .duration(animateDuration / 2)\n                        .attr('width', 0)\n                        .attr('height', 0)\n                        .on('end', function () {\n                        oldGraph.remove();\n                        self.renderHelper(newRoot);\n                    });\n                }\n                else {\n                    translateOldNode\n                        .on('end', function () {\n                        oldGraph.remove();\n                        newGraph.attr('opacity', 1);\n                    });\n                }\n            }\n            else if (oldRootInNewTree && oldRootInNewTree.d3selection) {\n                // set timeout so new tree is rendered first so we can adjust our animation\n                setTimeout(function () {\n                    // if this is in the old tree and rendered\n                    let newRect = svg_helper_1.convertToSVGCoords(self._svg, oldRootInNewTree.d3selection);\n                    let topLeft = {\n                        x: newRect.x,\n                        y: newRect.y\n                    };\n                    self._renderOrigin = {\n                        x: (newRect.x + newRect.right) / 2,\n                        y: (newRect.y + newRect.bottom) / 2,\n                    };\n                    // old root is in new tree so zooming out\n                    let newElemCount = oldRootInNewTree.d3selection.selectAll('*').size();\n                    let oldElemCount = oldGraph.select('.node').selectAll('*').size();\n                    let nodeChanged = newElemCount !== oldElemCount;\n                    newGraph.remove();\n                    let translateOldNode = oldGraph\n                        .transition('translateOldNode')\n                        .duration(animateDuration)\n                        .attr('width', 0)\n                        .attr('height', 0)\n                        .attr('transform', 'translate(' + topLeft.x + ',' + topLeft.y + ')')\n                        .on('end', function () {\n                        if (nodeChanged) {\n                            oldGraph.remove();\n                        }\n                        self.renderHelper(newRoot)\n                            .transition()\n                            .duration(self.getAnimateDuration())\n                            .on('end', function () {\n                            if (!nodeChanged) {\n                                oldGraph.remove();\n                            }\n                        });\n                    });\n                    self.sizeViewToFit(newRoot);\n                }, 0);\n            }\n            else {\n                // totally orthogonal tree so just render it\n                newGraph.remove();\n                self._renderOrigin = { x: 0, y: 0 };\n                self._svg\n                    .transition('hideView')\n                    .duration(animateDuration)\n                    .attr('width', 0)\n                    .attr('height', 0)\n                    .on('end', function () {\n                    oldGraph.remove();\n                    self.renderHelper(newRoot);\n                });\n            }\n        }\n        else {\n            self._renderOrigin = { x: 0, y: 0 };\n            oldGraph.remove();\n            self.renderHelper(newRoot);\n        }\n    }\n}\nexports.D3HierarchyGraph = D3HierarchyGraph;\n/**\n * helper function to traverse the node trees.\n * Walks over the top/bottom/left/right/center children arrays and applies the\n * callback function to those nodes\n */\nD3HierarchyGraph.CHILDREN = ['top', 'bottom', 'left', 'right', 'center'];\nrenderer_1.D3Renderer.register(ui_base_1.UIType.HierarchyGraph, D3HierarchyGraph);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9jb25uZWN0ZWQtZ3JhcGgvaGllcmFyY2h5LnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2NvcmUvY29ubmVjdGVkLWdyYXBoL2hpZXJhcmNoeS50cz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSU9wdGlvbnMsIEFsaWdubWVudCwgUmVjdCwgVUlFbGVtZW50LCBVSVR5cGVcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlL3VpLWJhc2UnO1xuaW1wb3J0IHtcbiAgICBJWFlWYWx1ZVxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvY2hhcnQvc2VyaWVzLWRhdGEnO1xuXG5pbXBvcnQge1xuICAgIElIaWVyYXJjaHlHcmFwaExpbmssIElIaWVyYXJjaHlOb2RlLCBJSGllcmFyY2h5R3JhcGgsXG4gICAgSUdyYXBoTm9kZURlY2ltYXRvclxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvZ3JhcGgnO1xuXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25OYW1lIH0gZnJvbSAnLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gICAgYWRkQ2xpY2tIZWxwZXIsIGNvbnZlcnRUb1NWR0Nvb3JkcywgZ2V0U3R5bGVcbn0gZnJvbSAnLi4vc3ZnLWhlbHBlcic7XG5pbXBvcnQge1xuICAgIGdldENvb3Jkc0FuZENhY2hlLCBJUmVuZGVyZWREaWFncmFtTm9kZSwgSVJlbmRlcmVkRGlhZ3JhbUxpbmssXG4gICAgRDNDb25uZWN0ZWRHcmFwaFNWR1xufSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgRDNSZW5kZXJlciB9IGZyb20gJy4uL3JlbmRlcmVyJztcblxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuXG5pbnRlcmZhY2UgSVJlbmRlcmVkSGllcmFyY2h5Tm9kZSBleHRlbmRzIElSZW5kZXJlZERpYWdyYW1Ob2RlIHtcbiAgICAvKiogcmVuZGVyIHBhcmVudCBvZiB0aGlzIG5vZGUgKi9cbiAgICBwYXJlbnQ/OiBJUmVuZGVyZWRIaWVyYXJjaHlOb2RlO1xuICAgIC8qKiB0aGUgbGlua3MgZm9yIGVhY2ggbm9kZSAqL1xuICAgIHBvcnRzPzoge1xuICAgICAgICB0b3A/OiBhbnk7XG4gICAgICAgIGJvdHRvbT86IGFueTtcbiAgICAgICAgbGVmdD86IGFueTtcbiAgICAgICAgcmlnaHQ/OiBhbnk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRDNIaWVyYXJjaHlHcmFwaCBleHRlbmRzIEQzQ29ubmVjdGVkR3JhcGhTVkcge1xuICAgIHByb3RlY3RlZCBfbWFyZ2luOiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9wYWRkaW5nOiBudW1iZXI7XG5cbiAgICAvKiogY2FjaGUgdGhlIGRlY2ltYXRvciB1c2VkIGZvciB0aGlzIGdyYXBoICovXG4gICAgcHJvdGVjdGVkIF9kZWNpbWF0b3I6IElHcmFwaE5vZGVEZWNpbWF0b3I7XG5cbiAgICAvKiogdGhpcyBpcyB3aGVyZSB0aGUgZWxlbWVudHMgYXJlIGdvaW5nIHRvIGFwcGVhciBmcm9tIHJlbGF0aXZlIGZyb20gaW4gdGhlIFNWRyAqL1xuICAgIHByb3RlY3RlZCBfcmVuZGVyT3JpZ2luOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH07XG5cbiAgICBwcm90ZWN0ZWQgX25vZGVzOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBVSUVsZW1lbnQsIHJlbmRlcmVyOiBEM1JlbmRlcmVyLFxuICAgICAgICBwYXJlbnQ6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4pIHtcblxuICAgICAgICBzdXBlcihlbGVtZW50LCByZW5kZXJlciwgcGFyZW50KTtcblxuICAgICAgICAvLyB1bmRvIGF1dG8gd2lkdGggZnJvbSBpbml0aWFsaXplIGNhbGxcbiAgICAgICAgdGhpcy5fb3B0aW9ucy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fbm9kZXMgPSB7fTtcblxuICAgICAgICB0aGlzLl9ncmFwaFJlY3QgPSB0aGlzLl9zdmdSZWN0O1xuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICB0aGlzLmdldExpbmtTdGFydFhZID0gZnVuY3Rpb24gKGxpbms6IElSZW5kZXJlZERpYWdyYW1MaW5rKSB7XG4gICAgICAgICAgICBsZXQgZnJvbSA9IHRoaXMuX25vZGVzW2xpbmsuc291cmNlLm5vZGUuZGVmLmtleV07XG4gICAgICAgICAgICBsZXQgZnJvbVJlY3QgPSBnZXRDb29yZHNBbmRDYWNoZShzZWxmLl9zdmcsIGZyb20pO1xuICAgICAgICAgICAgbGV0IGZyb21YWTogSVhZVmFsdWUgPSB7IHg6IHVuZGVmaW5lZCwgeTogdW5kZWZpbmVkIH07XG5cbiAgICAgICAgICAgIGxldCBsaW5rT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIC8vIGdldCB0aGUgZXhpdCBwb2ludCBvZiB0aGUgZnJvbSBub2RlXG4gICAgICAgICAgICBzd2l0Y2ggKGxpbmsuc291cmNlLmFsaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LkJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgbGlua09mZnNldCA9IGxpbmsuc291cmNlLmVuZFBvaW50ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICgoZnJvbVJlY3QucmlnaHQgLSBmcm9tUmVjdC54KSAvIChmcm9tLnBvcnRzLmJvdHRvbS5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgIGZyb21YWS54ID0gZnJvbVJlY3QueCArIGxpbmtPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIGZyb21YWS55ID0gZnJvbVJlY3QuYm90dG9tO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5Ub3A6XG4gICAgICAgICAgICAgICAgICAgIGxpbmtPZmZzZXQgPSBsaW5rLnNvdXJjZS5lbmRQb2ludCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGZyb21SZWN0LnJpZ2h0IC0gZnJvbVJlY3QueCkgLyAoZnJvbS5wb3J0cy50b3AubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICBmcm9tWFkueCA9IGZyb21SZWN0LnggKyBsaW5rT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICBmcm9tWFkueSA9IGZyb21SZWN0Lnk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LkxlZnQ6XG4gICAgICAgICAgICAgICAgICAgIGxpbmtPZmZzZXQgPSBsaW5rLnNvdXJjZS5lbmRQb2ludCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGZyb21SZWN0LmJvdHRvbSAtIGZyb21SZWN0LnkpIC8gKGZyb20ucG9ydHMubGVmdC5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgIGZyb21YWS54ID0gZnJvbVJlY3QueDtcbiAgICAgICAgICAgICAgICAgICAgZnJvbVhZLnkgPSBmcm9tUmVjdC55ICsgbGlua09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuUmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgIGxpbmtPZmZzZXQgPSBsaW5rLnNvdXJjZS5lbmRQb2ludCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGZyb21SZWN0LmJvdHRvbSAtIGZyb21SZWN0LnkpIC8gKGZyb20ucG9ydHMucmlnaHQubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICBmcm9tWFkueCA9IGZyb21SZWN0LnJpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBmcm9tWFkueSA9IGZyb21SZWN0LnkgKyBsaW5rT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmcm9tWFk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldExpbmtFbmRYWSA9IGZ1bmN0aW9uIChsaW5rOiBJUmVuZGVyZWREaWFncmFtTGluaykge1xuICAgICAgICAgICAgbGV0IHRvID0gdGhpcy5fbm9kZXNbbGluay50YXJnZXQubm9kZS5kZWYua2V5XTtcbiAgICAgICAgICAgIGxldCB0b1JlY3QgPSBnZXRDb29yZHNBbmRDYWNoZShzZWxmLl9zdmcsIHRvKTtcbiAgICAgICAgICAgIGxldCB0b1hZOiBJWFlWYWx1ZSA9IHsgeDogdW5kZWZpbmVkLCB5OiB1bmRlZmluZWQgfTtcblxuICAgICAgICAgICAgbGV0IGxpbmtPZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAvLyBnZXQgdGhlIGVudHJ5IHBvaW50IG9mIHRoZSB0byBub2RlIGFuZCBkcmF3IHRoZSBlbGJvdyBsaW5lXG4gICAgICAgICAgICBzd2l0Y2ggKGxpbmsudGFyZ2V0LmFsaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LkJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgbGlua09mZnNldCA9IGxpbmsudGFyZ2V0LmVuZFBvaW50ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICgodG9SZWN0LnJpZ2h0IC0gdG9SZWN0LngpIC8gKHRvLnBvcnRzLmJvdHRvbS5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgIHRvWFkueCA9IHRvUmVjdC54ICsgbGlua09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdG9YWS55ID0gdG9SZWN0LmJvdHRvbTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuVG9wOlxuICAgICAgICAgICAgICAgICAgICBsaW5rT2Zmc2V0ID0gbGluay50YXJnZXQuZW5kUG9pbnQgKlxuICAgICAgICAgICAgICAgICAgICAgICAgKCh0b1JlY3QucmlnaHQgLSB0b1JlY3QueCkgLyAodG8ucG9ydHMudG9wLmxlbmd0aCArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgdG9YWS54ID0gdG9SZWN0LnggKyBsaW5rT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB0b1hZLnkgPSB0b1JlY3QueTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuTGVmdDpcbiAgICAgICAgICAgICAgICAgICAgbGlua09mZnNldCA9IGxpbmsudGFyZ2V0LmVuZFBvaW50ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICgodG9SZWN0LmJvdHRvbSAtIHRvUmVjdC55KSAvICh0by5wb3J0cy5sZWZ0Lmxlbmd0aCArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgdG9YWS54ID0gdG9SZWN0Lng7XG4gICAgICAgICAgICAgICAgICAgIHRvWFkueSA9IHRvUmVjdC55ICsgbGlua09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuUmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgIGxpbmtPZmZzZXQgPSBsaW5rLnRhcmdldC5lbmRQb2ludCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoKHRvUmVjdC5ib3R0b20gLSB0b1JlY3QueSkgLyAodG8ucG9ydHMucmlnaHQubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICB0b1hZLnggPSB0b1JlY3QucmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHRvWFkueSA9IHRvUmVjdC55ICsgbGlua09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdG9YWTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBpc05vZGVSZW5kZXJlZChyZW5kZXJlZE5vZGU6IElSZW5kZXJlZERpYWdyYW1Ob2RlKSB7XG4gICAgICAgIHJldHVybiByZW5kZXJlZE5vZGUuZDNzZWxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHdpZHRoIG9yIGhlaWdodCBub3QgaW5jbHVkaW5nIGFueSBwYWRkaW5nLCBidXQgaW5jbHVkaW5nIGludGVybmFsIG1hcmdpbnNcbiAgICAgKiBnZXQgYSBwcm9wZXJ0eSBvZiB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggYSBub2RlLiAgVXNlZCB0byBnZXQgZGltZW5zaW9uc1xuICAgICAqIGZvciBzaXppbmcgcHVycG9zZXMuXG4gICAgICpcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFJlY3RQcm9wZXJ0eU1heChjaGlsZHJlbjogSUhpZXJhcmNoeU5vZGVbXSwgcHJvcDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJldCA9IDA7XG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IHRoaXMuX25vZGVzW2NoaWxkcmVuW2ldLmtleV07XG4gICAgICAgICAgICAgICAgaWYgKEQzSGllcmFyY2h5R3JhcGguaXNOb2RlUmVuZGVyZWQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IE1hdGgubWF4KGNoaWxkLnJlY3RbcHJvcF0sIHJldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHdpZHRoIG9yIGhlaWdodCBub3QgaW5jbHVkaW5nIGFueSBwYWRkaW5nLCBidXQgaW5jbHVkaW5nIGludGVybmFsIG1hcmdpbnNcbiAgICAgKiBnZXQgYSBwcm9wZXJ0eSBvZiB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggYSBub2RlLiAgVXNlZCB0byBnZXQgZGltZW5zaW9uc1xuICAgICAqIGZvciBzaXppbmcgcHVycG9zZXMuXG4gICAgICpcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFN0eWxlUHJvcGVydHlNYXgoY2hpbGRyZW46IElIaWVyYXJjaHlOb2RlW10sIHByb3A6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGxldCByZXQgPSAwO1xuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLl9ub2Rlc1tjaGlsZHJlbltpXS5rZXldO1xuICAgICAgICAgICAgICAgIGlmIChEM0hpZXJhcmNoeUdyYXBoLmlzTm9kZVJlbmRlcmVkKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcFZhbHVlID0gcGFyc2VJbnQoZ2V0U3R5bGUoY2hpbGQuZDNzZWxlY3Rpb24pW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gTWF0aC5tYXgocHJvcFZhbHVlLCByZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCBoZWlnaHQgbm90IGluY2x1ZGluZyBhbnkgcGFkZGluZywgYnV0IGluY2x1ZGluZyBpbnRlcm5hbCBtYXJnaW5zXG4gICAgICogc3VtIGEgcHJvcGVydHkgb2YgdGhlIHJlY3QgYXNzb2NpYXRlZCB3aXRoIGEgbm9kZS4gIFVzZWQgdG8gZ2V0IGRpbWVuc2lvbnNcbiAgICAgKiBmb3Igc2l6aW5nIHB1cnBvc2VzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdW1WZXJ0aWNhbChjaGlsZHJlbjogSUhpZXJhcmNoeU5vZGVbXSwgZGVmYXVsdE1hcmdpbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJldCA9IDA7XG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgbGV0IG1hcmdpblRvcCA9IDA7XG4gICAgICAgICAgICBsZXQgbWFyZ2luQm90dG9tID0gMDtcbiAgICAgICAgICAgIGxldCBjc3NNYXJnaW46IG51bWJlcjtcbiAgICAgICAgICAgIGxldCBoYXNDaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IHRoaXMuX25vZGVzW2NoaWxkcmVuW2ldLmtleV07XG4gICAgICAgICAgICAgICAgaWYgKEQzSGllcmFyY2h5R3JhcGguaXNOb2RlUmVuZGVyZWQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRvcCBtYXJnaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc01hcmdpbiA9IHBhcnNlSW50KGdldFN0eWxlKGNoaWxkLmQzc2VsZWN0aW9uKVsnbWFyZ2luLXRvcCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcCA9IGNzc01hcmdpbiA/IGNzc01hcmdpbiA6IGRlZmF1bHRNYXJnaW47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFyZ2luVG9wID4gbWFyZ2luQm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IG1hcmdpblRvcCAtIG1hcmdpbkJvdHRvbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWN0ID0gY29udmVydFRvU1ZHQ29vcmRzKHRoaXMuX3N2ZywgY2hpbGQuZDNzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICByZXQgKz0gTWF0aC5tYXgocmVjdC5oZWlnaHQsIGNoaWxkLnJlY3QuaGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgYm90dG9tIG1hcmdpblxuICAgICAgICAgICAgICAgICAgICBjc3NNYXJnaW4gPSBwYXJzZUludChnZXRTdHlsZShjaGlsZC5kM3NlbGVjdGlvbilbJ21hcmdpbi1ib3R0b20nXSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbSA9IGNzc01hcmdpbiA/IGNzc01hcmdpbiA6IGRlZmF1bHRNYXJnaW47XG4gICAgICAgICAgICAgICAgICAgIHJldCArPSBtYXJnaW5Cb3R0b207XG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICByZXQgLT0gbWFyZ2luQm90dG9tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbW92ZSBub2RlcyB0aGF0IHVzZSBhIHZlcnRpY2FsIGFsaWdubWVudCBpbnRvIHRoZSByaWdodCBwb3NpdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtVmVydGljYWxOb2Rlcyh4TWlkOiBudW1iZXIsIHk6IG51bWJlcixcbiAgICAgICAgY2hpbGRyZW46IElIaWVyYXJjaHlOb2RlW10sIGRlZmF1bHRNYXJnaW46IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmV0ID0gZmFsc2U7XG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgbGV0IG1hcmdpblRvcCA9IDA7XG4gICAgICAgICAgICBsZXQgbWFyZ2luQm90dG9tID0gMDtcbiAgICAgICAgICAgIGxldCBjc3NNYXJnaW46IG51bWJlcjtcbiAgICAgICAgICAgIGxldCBoYXNDaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IHRoaXMuX25vZGVzW2NoaWxkcmVuW2ldLmtleV07XG4gICAgICAgICAgICAgICAgaWYgKEQzSGllcmFyY2h5R3JhcGguaXNOb2RlUmVuZGVyZWQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWN0ID0gY29udmVydFRvU1ZHQ29vcmRzKHRoaXMuX3N2ZywgY2hpbGQuZDNzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IHhNaWQgLSBNYXRoLm1heChyZWN0LndpZHRoLCBjaGlsZC5yZWN0LndpZHRoKSAvIDI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdG9wIG1hcmdpblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNzc01hcmdpbiA9IHBhcnNlSW50KGdldFN0eWxlKGNoaWxkLmQzc2VsZWN0aW9uKVsnbWFyZ2luLXRvcCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcCA9IGNzc01hcmdpbiA/IGNzc01hcmdpbiA6IGRlZmF1bHRNYXJnaW47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFyZ2luVG9wID4gbWFyZ2luQm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBtYXJnaW5Ub3AgLSBtYXJnaW5Cb3R0b207XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5kM3NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uKHRoaXMuZ2V0QW5pbWF0ZUR1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgKyB4ICsgJywgJyArIHkgKyAnKScpO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5yZWN0LnggPSB4O1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5yZWN0LnkgPSB5O1xuXG4gICAgICAgICAgICAgICAgICAgIHkgKz0gY2hpbGQucmVjdFsnaGVpZ2h0J107XG5cbiAgICAgICAgICAgICAgICAgICAgY3NzTWFyZ2luID0gcGFyc2VJbnQoZ2V0U3R5bGUoY2hpbGQuZDNzZWxlY3Rpb24pWydtYXJnaW4tYm90dG9tJ10pO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b20gPSBjc3NNYXJnaW4gPyBjc3NNYXJnaW4gOiBkZWZhdWx0TWFyZ2luO1xuICAgICAgICAgICAgICAgICAgICB5ICs9IG1hcmdpbkJvdHRvbTtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCB3aWR0aCBub3QgaW5jbHVkaW5nIGFueSBwYWRkaW5nLCBidXQgaW5jbHVkaW5nIGludGVybmFsIG1hcmdpbnNcbiAgICAgKiBzdW0gYSBwcm9wZXJ0eSBvZiB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggYSBub2RlLiAgVXNlZCB0byBnZXQgZGltZW5zaW9uc1xuICAgICAqIGZvciBzaXppbmcgcHVycG9zZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHN1bUhvcml6b250YWwoY2hpbGRyZW46IElIaWVyYXJjaHlOb2RlW10sIGRlZmF1bHRNYXJnaW46IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCByZXQgPSAwO1xuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGxldCBtYXJnaW5MZWZ0ID0gMDtcbiAgICAgICAgICAgIGxldCBtYXJnaW5SaWdodCA9IDA7XG4gICAgICAgICAgICBsZXQgY3NzTWFyZ2luOiBudW1iZXI7XG4gICAgICAgICAgICBsZXQgaGFzQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLl9ub2Rlc1tjaGlsZHJlbltpXS5rZXldO1xuICAgICAgICAgICAgICAgIGlmIChEM0hpZXJhcmNoeUdyYXBoLmlzTm9kZVJlbmRlcmVkKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBsZWZ0IG1hcmdpblxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzTWFyZ2luID0gcGFyc2VJbnQoZ2V0U3R5bGUoY2hpbGQuZDNzZWxlY3Rpb24pWydtYXJnaW4tbGVmdCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBjc3NNYXJnaW4gPyBjc3NNYXJnaW4gOiBkZWZhdWx0TWFyZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmdpbkxlZnQgPiBtYXJnaW5SaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBtYXJnaW5MZWZ0IC0gbWFyZ2luUmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVjdCA9IGNvbnZlcnRUb1NWR0Nvb3Jkcyh0aGlzLl9zdmcsIGNoaWxkLmQzc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0ICs9IE1hdGgubWF4KHJlY3Qud2lkdGgsIGNoaWxkLnJlY3Qud2lkdGgpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSByaWdodCBtYXJnaW5cbiAgICAgICAgICAgICAgICAgICAgY3NzTWFyZ2luID0gcGFyc2VJbnQoZ2V0U3R5bGUoY2hpbGQuZDNzZWxlY3Rpb24pWydtYXJnaW4tcmlnaHQnXSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gY3NzTWFyZ2luID8gY3NzTWFyZ2luIDogZGVmYXVsdE1hcmdpbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0ICs9IG1hcmdpblJpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgcmV0IC09IG1hcmdpblJpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbW92ZSBub2RlcyB0aGF0IHVzZSBhIGhvcml6b250YWwgYWxpZ25tZW50IGludG8gdGhlIHJpZ2h0IHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1Ib3Jpem9udGFsTm9kZXMoeDogbnVtYmVyLCB5TWlkOiBudW1iZXIsXG4gICAgICAgIGNoaWxkcmVuOiBJSGllcmFyY2h5Tm9kZVtdLCBkZWZhdWx0TWFyZ2luOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJldCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGxldCBtYXJnaW5MZWZ0ID0gMDtcbiAgICAgICAgICAgIGxldCBtYXJnaW5SaWdodCA9IDA7XG4gICAgICAgICAgICBsZXQgY3NzTWFyZ2luOiBudW1iZXI7XG4gICAgICAgICAgICBsZXQgaGFzQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLl9ub2Rlc1tjaGlsZHJlbltpXS5rZXldO1xuICAgICAgICAgICAgICAgIGlmIChEM0hpZXJhcmNoeUdyYXBoLmlzTm9kZVJlbmRlcmVkKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVjdCA9IGNvbnZlcnRUb1NWR0Nvb3Jkcyh0aGlzLl9zdmcsIGNoaWxkLmQzc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHkgPSB5TWlkIC0gTWF0aC5tYXgocmVjdC5oZWlnaHQsIGNoaWxkLnJlY3QuaGVpZ2h0KSAvIDI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdG9wIG1hcmdpblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNzc01hcmdpbiA9IHBhcnNlSW50KGdldFN0eWxlKGNoaWxkLmQzc2VsZWN0aW9uKVsnbWFyZ2luLWxlZnQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gY3NzTWFyZ2luID8gY3NzTWFyZ2luIDogZGVmYXVsdE1hcmdpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXJnaW5MZWZ0ID4gbWFyZ2luUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IG1hcmdpbkxlZnQgLSBtYXJnaW5SaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmQzc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24odGhpcy5nZXRBbmltYXRlRHVyYXRpb24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHggKyAnLCAnICsgeSArICcpJyk7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnJlY3QueCA9IHg7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnJlY3QueSA9IHk7XG5cbiAgICAgICAgICAgICAgICAgICAgeCArPSBjaGlsZC5yZWN0Wyd3aWR0aCddO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBib3R0b20gbWFyZ2luXG4gICAgICAgICAgICAgICAgICAgIGNzc01hcmdpbiA9IHBhcnNlSW50KGdldFN0eWxlKGNoaWxkLmQzc2VsZWN0aW9uKVsnbWFyZ2luLXJpZ2h0J10pO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IGNzc01hcmdpbiA/IGNzc01hcmdpbiA6IGRlZmF1bHRNYXJnaW47XG4gICAgICAgICAgICAgICAgICAgIHggKz0gbWFyZ2luUmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU5vZGVXaWR0aChub2RlOiBJSGllcmFyY2h5Tm9kZSwgdG9wUmVjdDogUmVjdCwgYm90dG9tUmVjdDogUmVjdCxcbiAgICAgICAgY2VudGVyUmVjdDogUmVjdCwgbGVmdFJlY3Q6IFJlY3QsIHJpZ2h0UmVjdDogUmVjdCwgbm9kZUNvbnRlbnRSZWN0OiBSZWN0LFxuICAgICAgICBkZWZhdWx0TWFyZ2luOiBudW1iZXIsIGRlZmF1bHRQYWRkaW5nOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgcmV0ID0gMDtcbiAgICAgICAgcmV0ID0gTWF0aC5tYXgocmV0LCB0b3BSZWN0LndpZHRoKTtcbiAgICAgICAgcmV0ID0gTWF0aC5tYXgocmV0LCBjZW50ZXJSZWN0LndpZHRoKTtcbiAgICAgICAgcmV0ID0gTWF0aC5tYXgocmV0LCBib3R0b21SZWN0LndpZHRoKTtcbiAgICAgICAgcmV0ID0gTWF0aC5tYXgocmV0LCBub2RlQ29udGVudFJlY3Qud2lkdGgpO1xuXG4gICAgICAgIGxldCBtaWRkbGVXaWR0aCA9IDA7XG4gICAgICAgIC8vIGZvciBlYWNoIHBvc3NpYmxlIGhvcml6b250YWwgZ3JvdXBpbmcgY2FsY3VsYXRlIHdoYXQgdGhlIG1heGltdW0gd2lkdGggY291bGQgYmVcbiAgICAgICAgaWYgKGxlZnRSZWN0LndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBzdGFydCB3aXRoIHRoZSBsZWZ0IHNpZGUgYW5kIGNvbXB1dGUgdGhlIHdpZHRoIGZyb20gbGVmdCB0byByaWdodFxuICAgICAgICAgICAgbWlkZGxlV2lkdGggPSBsZWZ0UmVjdC53aWR0aDtcbiAgICAgICAgICAgIGlmIChjZW50ZXJSZWN0LndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGxlZnQgdG8gY2VudGVyIG1hcmdpblxuICAgICAgICAgICAgICAgIG1pZGRsZVdpZHRoICs9IE1hdGgubWF4KGRlZmF1bHRNYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuZ2V0U3R5bGVQcm9wZXJ0eU1heChub2RlLmxlZnQsICdtYXJnaW4tcmlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGdldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vZGVzW25vZGUuY2VudGVyWzBdLmtleV0uZDNzZWxlY3Rpb24pWydtYXJnaW4tbGVmdCddKSkpO1xuICAgICAgICAgICAgICAgIG1pZGRsZVdpZHRoICs9IGNlbnRlclJlY3Qud2lkdGg7XG5cbiAgICAgICAgICAgICAgICBpZiAocmlnaHRSZWN0LndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBjZW50ZXIgdG8gcmlnaHQgbWFyZ2luXG4gICAgICAgICAgICAgICAgICAgIG1pZGRsZVdpZHRoICs9IE1hdGgubWF4KGRlZmF1bHRNYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChwYXJzZUludChnZXRTdHlsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2Rlc1tub2RlLmNlbnRlcltub2RlLmNlbnRlci5sZW5ndGggLSAxXS5rZXldLmQzc2VsZWN0aW9uKVsnbWFyZ2luLXJpZ2h0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdHlsZVByb3BlcnR5TWF4KG5vZGUucmlnaHQsICdtYXJnaW4tbGVmdCcpKSkpO1xuICAgICAgICAgICAgICAgICAgICBtaWRkbGVXaWR0aCArPSByaWdodFJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodFJlY3Qud2lkdGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBubyBjZW50ZXIgc28ganVzdCBhZGQgbGVmdCB0byByaWdodCBtYXJnaW5cbiAgICAgICAgICAgICAgICBtaWRkbGVXaWR0aCArPSBNYXRoLm1heChkZWZhdWx0TWFyZ2luLFxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCh0aGlzLmdldFN0eWxlUHJvcGVydHlNYXgobm9kZS5sZWZ0LCAnbWFyZ2luLXJpZ2h0JyksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN0eWxlUHJvcGVydHlNYXgobm9kZS5yaWdodCwgJ21hcmdpbi1sZWZ0JykpKTtcbiAgICAgICAgICAgICAgICBtaWRkbGVXaWR0aCArPSByaWdodFJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2VudGVyUmVjdC53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgLy8gbm8gbGVmdCBub2Rlc1xuICAgICAgICAgICAgaWYgKHJpZ2h0UmVjdC53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBjZW50ZXIgdG8gcmlnaHQgbWFyZ2luXG4gICAgICAgICAgICAgICAgbWlkZGxlV2lkdGggKz0gTWF0aC5tYXgoZGVmYXVsdE1hcmdpbixcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgocGFyc2VJbnQoZ2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2Rlc1tub2RlLmNlbnRlcltub2RlLmNlbnRlci5sZW5ndGggLSAxXS5rZXldLmQzc2VsZWN0aW9uKVsnbWFyZ2luLXJpZ2h0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN0eWxlUHJvcGVydHlNYXgobm9kZS5yaWdodCwgJ21hcmdpbi1sZWZ0JykpKSk7XG4gICAgICAgICAgICAgICAgbWlkZGxlV2lkdGggKz0gcmlnaHRSZWN0LndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWlkZGxlV2lkdGggKz0gY2VudGVyUmVjdC53aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pZGRsZVdpZHRoID0gcmlnaHRSZWN0LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldCA9IE1hdGgubWF4KG1pZGRsZVdpZHRoLCByZXQpO1xuICAgICAgICByZXQgKz0gTWF0aC5tYXgoZGVmYXVsdFBhZGRpbmcsIHBhcnNlSW50KGdldFN0eWxlKHRoaXMuX25vZGVzW25vZGUua2V5XS5kM3NlbGVjdGlvbikucGFkZGluZ0xlZnQpKTtcbiAgICAgICAgcmV0ICs9IE1hdGgubWF4KGRlZmF1bHRQYWRkaW5nLCBwYXJzZUludChnZXRTdHlsZSh0aGlzLl9ub2Rlc1tub2RlLmtleV0uZDNzZWxlY3Rpb24pLnBhZGRpbmdSaWdodCkpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlTm9kZUhlaWdodChub2RlOiBJSGllcmFyY2h5Tm9kZSwgdG9wUmVjdDogUmVjdCwgYm90dG9tUmVjdDogUmVjdCxcbiAgICAgICAgY2VudGVyUmVjdDogUmVjdCwgbGVmdFJlY3Q6IFJlY3QsIHJpZ2h0UmVjdDogUmVjdCwgbm9kZUNvbnRlbnRSZWN0OiBSZWN0LFxuICAgICAgICBkZWZhdWx0TWFyZ2luOiBudW1iZXIsIGRlZmF1bHRQYWRkaW5nOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgbGVmdEhlaWdodCA9IDA7XG4gICAgICAgIGxldCBjZW50ZXJIZWlnaHQgPSAwO1xuICAgICAgICBsZXQgcmlnaHRIZWlnaHQgPSAwO1xuICAgICAgICBsZXQgdG9wQm90dG9tSGVpZ2h0ID0gMDtcblxuICAgICAgICAvLyBmb3IgZWFjaCBwb3NzaWJsZSB2ZXJ0aWNhbCBncm91cGluZyBhZGQgdXAgd2hhdCB0aGUgbWF4aW11bSBoZWlnaHQgY291bGQgYmVcbiAgICAgICAgaWYgKGxlZnRSZWN0LmhlaWdodCAhPT0gMCkge1xuICAgICAgICAgICAgLy8gY2FsYyB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBsZWZ0IG5vZGVzICsgdG9wICsgYm90dG9tIHdpdGggbWFyZ2luc1xuICAgICAgICAgICAgbGVmdEhlaWdodCA9IGxlZnRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGlmICh0b3BSZWN0LmhlaWdodCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGFkZCB0b3Agbm9kZSBib3R0b20gbWFyZ2luIG9yIGxlZnQgbm9kZXMgdG9wIG1hcmdpblxuICAgICAgICAgICAgICAgIGxlZnRIZWlnaHQgKz0gTWF0aC5tYXgoZGVmYXVsdE1hcmdpbixcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgodGhpcy5nZXRTdHlsZVByb3BlcnR5TWF4KG5vZGUudG9wLCAnbWFyZ2luLWJvdHRvbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZ2V0U3R5bGUodGhpcy5fbm9kZXNbbm9kZS5sZWZ0WzBdLmtleV0uZDNzZWxlY3Rpb24pWydtYXJnaW4tdG9wJ10pKSk7XG4gICAgICAgICAgICAgICAgbGVmdEhlaWdodCArPSB0b3BSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChib3R0b21SZWN0LmhlaWdodCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBsZWZ0IG5vZGVzIGJvdHRvbSBtYXJnaW4gb3IgYm90dG9tIG5vZGVzIHRvcCBtYXJnaW5cbiAgICAgICAgICAgICAgICBsZWZ0SGVpZ2h0ICs9IE1hdGgubWF4KGRlZmF1bHRNYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHBhcnNlSW50KGdldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9kZXNbbm9kZS5sZWZ0W25vZGUubGVmdC5sZW5ndGggLSAxXS5rZXldLmQzc2VsZWN0aW9uKVsnbWFyZ2luLWJvdHRvbSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdHlsZVByb3BlcnR5TWF4KG5vZGUuYm90dG9tLCAnbWFyZ2luLXRvcCcpKSkpO1xuICAgICAgICAgICAgICAgIGxlZnRIZWlnaHQgKz0gYm90dG9tUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbnRlclJlY3QuaGVpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBjYWxjIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGNlbnRlciBub2RlcyArIHRvcCArIGJvdHRvbSB3aXRoIG1hcmdpbnNcbiAgICAgICAgICAgIGNlbnRlckhlaWdodCA9IGNlbnRlclJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgaWYgKHRvcFJlY3QuaGVpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHRvcCBub2RlIGJvdHRvbSBtYXJnaW4gb3IgY2VudGVyIG5vZGVzIHRvcCBtYXJnaW5cbiAgICAgICAgICAgICAgICBjZW50ZXJIZWlnaHQgKz0gTWF0aC5tYXgoZGVmYXVsdE1hcmdpbixcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgodGhpcy5nZXRTdHlsZVByb3BlcnR5TWF4KG5vZGUudG9wLCAnbWFyZ2luLWJvdHRvbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdHlsZVByb3BlcnR5TWF4KG5vZGUuY2VudGVyLCAnbWFyZ2luLXRvcCcpKSk7XG4gICAgICAgICAgICAgICAgY2VudGVySGVpZ2h0ICs9IHRvcFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYm90dG9tUmVjdC5oZWlnaHQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgY2VudGVyIG5vZGVzIGJvdHRvbSBtYXJnaW4gb3IgYm90dG9tIG5vZGVzIHRvcCBtYXJnaW5cbiAgICAgICAgICAgICAgICBjZW50ZXJIZWlnaHQgKz0gYm90dG9tUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgY2VudGVySGVpZ2h0ICs9IE1hdGgubWF4KGRlZmF1bHRNYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuZ2V0U3R5bGVQcm9wZXJ0eU1heChub2RlLmNlbnRlciwgJ21hcmdpbi1ib3R0b20nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3R5bGVQcm9wZXJ0eU1heChub2RlLmJvdHRvbSwgJ21hcmdpbi10b3AnKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyaWdodFJlY3QuaGVpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBhZGQgdG9wIG5vZGUgYm90dG9tIG1hcmdpbiBvciByaWdodCBub2RlcyB0b3AgbWFyZ2luXG4gICAgICAgICAgICByaWdodEhlaWdodCA9IHJpZ2h0UmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBpZiAodG9wUmVjdC5oZWlnaHQgIT09IDApIHtcbiAgICAgICAgICAgICAgICByaWdodEhlaWdodCArPSB0b3BSZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICByaWdodEhlaWdodCArPSBNYXRoLm1heChkZWZhdWx0TWFyZ2luLFxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCh0aGlzLmdldFN0eWxlUHJvcGVydHlNYXgobm9kZS50b3AsICdtYXJnaW4tYm90dG9tJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChnZXRTdHlsZSh0aGlzLl9ub2Rlc1tub2RlLnJpZ2h0WzBdLmtleV0uZDNzZWxlY3Rpb24pWydtYXJnaW4tdG9wJ10pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm90dG9tUmVjdC5oZWlnaHQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgcmlnaHQgbm9kZXMgYm90dG9tIG1hcmdpbiBvciBib3R0b20gbm9kZXMgdG9wIG1hcmdpblxuICAgICAgICAgICAgICAgIHJpZ2h0SGVpZ2h0ICs9IGJvdHRvbVJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHJpZ2h0SGVpZ2h0ICs9IE1hdGgubWF4KGRlZmF1bHRNYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHBhcnNlSW50KGdldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9kZXNbbm9kZS5yaWdodFtub2RlLnJpZ2h0Lmxlbmd0aCAtIDFdLmtleV0uZDNzZWxlY3Rpb24pWydtYXJnaW4tYm90dG9tJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN0eWxlUHJvcGVydHlNYXgobm9kZS5ib3R0b20sICdtYXJnaW4tdG9wJykpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcFJlY3QuaGVpZ2h0ICYmIGJvdHRvbVJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICB0b3BCb3R0b21IZWlnaHQgPSB0b3BSZWN0LmhlaWdodCArIGJvdHRvbVJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgdG9wQm90dG9tSGVpZ2h0ICs9IE1hdGgubWF4KGRlZmF1bHRNYXJnaW4sXG4gICAgICAgICAgICAgICAgTWF0aC5tYXgodGhpcy5nZXRTdHlsZVByb3BlcnR5TWF4KG5vZGUudG9wLCAnbWFyZ2luLWJvdHRvbScpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN0eWxlUHJvcGVydHlNYXgobm9kZS5ib3R0b20sICdtYXJnaW4tdG9wJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXQgPSAwO1xuICAgICAgICByZXQgPSBNYXRoLm1heChyZXQsIHRvcFJlY3QuaGVpZ2h0KTtcbiAgICAgICAgcmV0ID0gTWF0aC5tYXgocmV0LCBib3R0b21SZWN0LmhlaWdodCk7XG4gICAgICAgIHJldCA9IE1hdGgubWF4KHJldCwgdG9wQm90dG9tSGVpZ2h0KTtcbiAgICAgICAgcmV0ID0gTWF0aC5tYXgocmV0LCBsZWZ0SGVpZ2h0KTtcbiAgICAgICAgcmV0ID0gTWF0aC5tYXgocmV0LCBjZW50ZXJIZWlnaHQpO1xuICAgICAgICByZXQgPSBNYXRoLm1heChyZXQsIHJpZ2h0SGVpZ2h0KTtcblxuICAgICAgICBpZiAobm9kZUNvbnRlbnRSZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgcmV0ICs9IG5vZGVDb250ZW50UmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgKz0gTWF0aC5tYXgoZGVmYXVsdFBhZGRpbmcsIHBhcnNlSW50KGdldFN0eWxlKHRoaXMuX25vZGVzW25vZGUua2V5XS5kM3NlbGVjdGlvbikucGFkZGluZ1RvcCkpO1xuICAgICAgICByZXQgKz0gTWF0aC5tYXgoZGVmYXVsdFBhZGRpbmcsIHBhcnNlSW50KGdldFN0eWxlKHRoaXMuX25vZGVzW25vZGUua2V5XS5kM3NlbGVjdGlvbikucGFkZGluZ0JvdHRvbSkpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogbW92ZSB0aGlzIG5vZGUgYW5kIGl0cyBkZWNlbmRhbnRzIGludG8gcGxhY2VcbiAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtTm9kZShub2RlOiBJSGllcmFyY2h5Tm9kZSxcbiAgICAgICAgYm9yZGVyOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+LFxuICAgICAgICBub2RlQ29udGVudHM6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4sXG4gICAgICAgIGRlZmF1bHRNYXJnaW46IG51bWJlciwgZGVmYXVsdFBhZGRpbmc6IG51bWJlcikge1xuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IHJlbmRlcmVkTm9kZSA9IHNlbGYuX25vZGVzW25vZGUua2V5XTtcblxuICAgICAgICBsZXQgcmVjdCA9IG5ldyBSZWN0KDAsIDAsIDAsIDApO1xuXG4gICAgICAgIC8vIGdldCB0aGUgd2lkdGggb2YgdGhlIHdob2xlIHdpbmRvd1xuICAgICAgICBsZXQgd2lkdGhQcm9wID0gJ3dpZHRoJztcbiAgICAgICAgbGV0IGhlaWdodFByb3AgPSAnaGVpZ2h0JztcblxuICAgICAgICBsZXQgY3NzTWFyZ2luID0gcGFyc2VJbnQoZ2V0U3R5bGUocmVuZGVyZWROb2RlLmQzc2VsZWN0aW9uKVsnbWFyZ2luLXRvcCddKTtcbiAgICAgICAgZGVmYXVsdE1hcmdpbiA9IGNzc01hcmdpbiA/IGNzc01hcmdpbiA6IGRlZmF1bHRNYXJnaW47XG5cbiAgICAgICAgbGV0IGNzc1BhZGRpbmcgPSBwYXJzZUludChnZXRTdHlsZShyZW5kZXJlZE5vZGUuZDNzZWxlY3Rpb24pWydwYWRkaW5nLXRvcCddKTtcbiAgICAgICAgZGVmYXVsdFBhZGRpbmcgPSBjc3NQYWRkaW5nID8gY3NzUGFkZGluZyA6IGRlZmF1bHRQYWRkaW5nO1xuXG4gICAgICAgIGxldCB0b3BSZWN0ID0gbmV3IFJlY3QoMCwgMCwgc2VsZi5zdW1Ib3Jpem9udGFsKG5vZGUudG9wLCBkZWZhdWx0TWFyZ2luKSxcbiAgICAgICAgICAgIHNlbGYuZ2V0UmVjdFByb3BlcnR5TWF4KG5vZGUudG9wLCBoZWlnaHRQcm9wKSk7XG4gICAgICAgIGxldCBib3R0b21SZWN0ID0gbmV3IFJlY3QoMCwgMCwgc2VsZi5zdW1Ib3Jpem9udGFsKG5vZGUuYm90dG9tLCBkZWZhdWx0TWFyZ2luKSxcbiAgICAgICAgICAgIHNlbGYuZ2V0UmVjdFByb3BlcnR5TWF4KG5vZGUuYm90dG9tLCBoZWlnaHRQcm9wKSk7XG4gICAgICAgIGxldCBsZWZ0UmVjdCA9IG5ldyBSZWN0KDAsIDAsIHNlbGYuZ2V0UmVjdFByb3BlcnR5TWF4KG5vZGUubGVmdCwgd2lkdGhQcm9wKSxcbiAgICAgICAgICAgIHNlbGYuc3VtVmVydGljYWwobm9kZS5sZWZ0LCBkZWZhdWx0TWFyZ2luKSk7XG4gICAgICAgIGxldCByaWdodFJlY3QgPSBuZXcgUmVjdCgwLCAwLCBzZWxmLmdldFJlY3RQcm9wZXJ0eU1heChub2RlLnJpZ2h0LCB3aWR0aFByb3ApLFxuICAgICAgICAgICAgc2VsZi5zdW1WZXJ0aWNhbChub2RlLnJpZ2h0LCBkZWZhdWx0TWFyZ2luKSk7XG4gICAgICAgIGxldCBjZW50ZXJSZWN0ID0gbmV3IFJlY3QoMCwgMCwgc2VsZi5zdW1Ib3Jpem9udGFsKG5vZGUuY2VudGVyLCBkZWZhdWx0TWFyZ2luKSxcbiAgICAgICAgICAgIHNlbGYuZ2V0UmVjdFByb3BlcnR5TWF4KG5vZGUuY2VudGVyLCBoZWlnaHRQcm9wKSk7XG5cbiAgICAgICAgbGV0IG5vZGVDb250ZW50UmVjdCA9IG5ldyBSZWN0KDAsIDAsIHJlbmRlcmVkTm9kZS5yZWN0W3dpZHRoUHJvcF0sXG4gICAgICAgICAgICByZW5kZXJlZE5vZGUucmVjdFtoZWlnaHRQcm9wXSk7XG5cbiAgICAgICAgLy8gY29tcHV0ZSB0aGUgcmVjdGFuZ2xlIHdpdGggd2l0aCBwYWRkaW5nL21hcmdpbnNcbiAgICAgICAgcmVjdC53aWR0aCA9IHNlbGYuY2FsY3VsYXRlTm9kZVdpZHRoKG5vZGUsIHRvcFJlY3QsIGJvdHRvbVJlY3QsIGNlbnRlclJlY3QsIGxlZnRSZWN0LFxuICAgICAgICAgICAgcmlnaHRSZWN0LCBub2RlQ29udGVudFJlY3QsIGRlZmF1bHRNYXJnaW4sIGRlZmF1bHRQYWRkaW5nKTtcblxuICAgICAgICByZWN0LmhlaWdodCA9IHNlbGYuY2FsY3VsYXRlTm9kZUhlaWdodChub2RlLCB0b3BSZWN0LCBib3R0b21SZWN0LCBjZW50ZXJSZWN0LCBsZWZ0UmVjdCxcbiAgICAgICAgICAgIHJpZ2h0UmVjdCwgbm9kZUNvbnRlbnRSZWN0LCBkZWZhdWx0TWFyZ2luLCBkZWZhdWx0UGFkZGluZyk7XG5cbiAgICAgICAgLy8gZHJhdyB0aGUgYm9yZGVyIG5vdyB0aGF0IHdlIGtub3cgdGhlIGRpbWVuc2lvbnNcbiAgICAgICAgaWYgKGJvcmRlcikge1xuICAgICAgICAgICAgLy8gcmVuZGVyIGZ1bGwgc2l6ZSBzbyB3ZSBjYW4gc2VlIHdoYXQgdGhlIENTUyBsb29rcyBsaWtlXG4gICAgICAgICAgICBib3JkZXJcbiAgICAgICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgcmVjdC5oZWlnaHQpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgcmVjdC53aWR0aCk7XG5cbiAgICAgICAgICAgIGxldCByZW5kZXJlZFJlY3QgPSBjb252ZXJ0VG9TVkdDb29yZHMoc2VsZi5fc3ZnLCBib3JkZXIpO1xuICAgICAgICAgICAgcmVjdC5oZWlnaHQgPSByZW5kZXJlZFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgcmVjdC53aWR0aCA9IHJlbmRlcmVkUmVjdC53aWR0aDtcblxuICAgICAgICAgICAgLy8gbm93IHNob3cgaXQgYXMgYSB0cmFuc2l0aW9uXG4gICAgICAgICAgICBib3JkZXJcbiAgICAgICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgMClcbiAgICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCAwKVxuICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgICAgICAuZHVyYXRpb24oc2VsZi5nZXRBbmltYXRlRHVyYXRpb24oKSlcbiAgICAgICAgICAgICAgICAuYXR0cigneCcsIDApXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3knLCAwKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCByZWN0LmhlaWdodClcbiAgICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCByZWN0LndpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJlZE5vZGUucmVjdCA9IHJlY3Q7XG5cbiAgICAgICAgaWYgKG5vZGVDb250ZW50cykge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnRTdHlsZSA9IGdldFN0eWxlKG5vZGVDb250ZW50cyk7XG4gICAgICAgICAgICBsZXQgeE9mZnNldCA9IChyZWN0LndpZHRoIC0gbm9kZUNvbnRlbnRSZWN0LndpZHRoKSAvIDI7XG4gICAgICAgICAgICBsZXQgeVBhZGRpbmcgPSBkZWZhdWx0UGFkZGluZztcbiAgICAgICAgICAgIGxldCB5T2Zmc2V0ID0geVBhZGRpbmc7XG4gICAgICAgICAgICBub2RlQ29udGVudHNcbiAgICAgICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAgICAgLmR1cmF0aW9uKHNlbGYuZ2V0QW5pbWF0ZUR1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIHhPZmZzZXQgKyAnLCcgKyB5T2Zmc2V0ICsgJyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXJlbnRNaWRYID0gcmVjdC53aWR0aCAvIDI7XG5cbiAgICAgICAgbGV0IGVsZW1NaWRYID0gcGFyZW50TWlkWCAtIHRvcFJlY3Qud2lkdGggLyAyO1xuICAgICAgICBsZXQgZWxlbU1pZFkgPSBzZWxmLl9wYWRkaW5nICsgbm9kZUNvbnRlbnRSZWN0LmhlaWdodCArIHRvcFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgc2VsZi50cmFuc2Zvcm1Ib3Jpem9udGFsTm9kZXMoZWxlbU1pZFgsIGVsZW1NaWRZLCBub2RlLnRvcCwgZGVmYXVsdE1hcmdpbik7XG5cbiAgICAgICAgLy8gZmluZCB0aGUgY2VudGVyIG9mIHRoZSBjZW50ZXIgc3F1YXJlIChwYXJlbnQgcmVjdCBpcyBhIDN4MyB0aWMtdGFjLXRvZSlcbiAgICAgICAgbGV0IGNlbnRlck1pZFggPSBsZWZ0UmVjdC53aWR0aCArXG4gICAgICAgICAgICAoKHJlY3Qud2lkdGggLSByaWdodFJlY3Qud2lkdGggLSBsZWZ0UmVjdC53aWR0aCkgLyAyKTtcbiAgICAgICAgbGV0IGNlbnRlck1pZFkgPSB0b3BSZWN0LmhlaWdodCArIG5vZGVDb250ZW50UmVjdC5oZWlnaHQgK1xuICAgICAgICAgICAgKChyZWN0LmhlaWdodCAtIGJvdHRvbVJlY3QuaGVpZ2h0IC0gdG9wUmVjdC5oZWlnaHQgLSBub2RlQ29udGVudFJlY3QuaGVpZ2h0KSAvIDIpO1xuICAgICAgICBlbGVtTWlkWCA9IHNlbGYuX3BhZGRpbmcgKyBsZWZ0UmVjdC53aWR0aCAvIDI7XG4gICAgICAgIHNlbGYudHJhbnNmb3JtVmVydGljYWxOb2RlcyhlbGVtTWlkWCwgY2VudGVyTWlkWSAtIGxlZnRSZWN0LmhlaWdodCAvIDIsXG4gICAgICAgICAgICBub2RlLmxlZnQsIGRlZmF1bHRNYXJnaW4pO1xuXG4gICAgICAgIGVsZW1NaWRYID0gcmVjdC53aWR0aCAtIChyaWdodFJlY3Qud2lkdGggKyBzZWxmLl9wYWRkaW5nKSAvIDI7XG4gICAgICAgIHNlbGYudHJhbnNmb3JtVmVydGljYWxOb2RlcyhlbGVtTWlkWCwgY2VudGVyTWlkWSAtIHJpZ2h0UmVjdC5oZWlnaHQgLyAyLFxuICAgICAgICAgICAgbm9kZS5yaWdodCwgZGVmYXVsdE1hcmdpbik7XG5cbiAgICAgICAgZWxlbU1pZFggPSBwYXJlbnRNaWRYIC0gYm90dG9tUmVjdC53aWR0aCAvIDI7XG4gICAgICAgIGVsZW1NaWRZID0gcmVjdC5oZWlnaHQgLSBib3R0b21SZWN0LmhlaWdodCAvIDIgLSBzZWxmLl9wYWRkaW5nO1xuICAgICAgICBzZWxmLnRyYW5zZm9ybUhvcml6b250YWxOb2RlcyhlbGVtTWlkWCwgZWxlbU1pZFksIG5vZGUuYm90dG9tLCBkZWZhdWx0TWFyZ2luKTtcblxuICAgICAgICBpZiAobm9kZS5jZW50ZXIgJiYgbm9kZS5jZW50ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY2VudGVyWCBpcyB0aGUgeCBwb3Mgd2hlcmUgdGhlIG5vZGUgY2VudGVyIHN0YXJ0cy4gIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gWVxuICAgICAgICAgICAgbGV0IGNlbnRlclggPSBjZW50ZXJNaWRYIC0gY2VudGVyUmVjdC53aWR0aCAvIDI7XG4gICAgICAgICAgICBpZiAobGVmdFJlY3Qud2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjZW50ZXJYID0gTWF0aC5tYXgoY2VudGVyWCwgc2VsZi5fcGFkZGluZyArIGxlZnRSZWN0LndpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoZGVmYXVsdE1hcmdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuZ2V0U3R5bGVQcm9wZXJ0eU1heChub2RlLmxlZnQsICdtYXJnaW4tcmlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChnZXRTdHlsZShzZWxmLl9ub2Rlc1tub2RlLmNlbnRlclswXS5rZXldLmQzc2VsZWN0aW9uKVsnbWFyZ2luLWxlZnQnXSkpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmlnaHRSZWN0LndpZHRoKSB7XG4gICAgICAgICAgICAgICAgY2VudGVyWCA9IE1hdGgubWluKGNlbnRlclgsIHJlY3Qud2lkdGggLSBzZWxmLl9wYWRkaW5nIC0gcmlnaHRSZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgICAgICAgY2VudGVyUmVjdC53aWR0aCAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGRlZmF1bHRNYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCh0aGlzLmdldFN0eWxlUHJvcGVydHlNYXgobm9kZS5yaWdodCwgJ21hcmdpbi1sZWZ0JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZ2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25vZGVzW25vZGUuY2VudGVyW25vZGUuY2VudGVyLmxlbmd0aCAtIDFdLmtleV0uZDNzZWxlY3Rpb24pWydtYXJnaW4tbGVmdCddKSkpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2VudGVyWSBpcyB0aGUgeSBwb3Mgb2YgdGhlIG1pZGRsZSB0aGUgY2VudGVyIG5vZGVzLiAgVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiBYLlxuICAgICAgICAgICAgbGV0IGNlbnRlclkgPSBjZW50ZXJNaWRZO1xuICAgICAgICAgICAgaWYgKHRvcFJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY2VudGVyWSA9IE1hdGgubWF4KGNlbnRlclksIHNlbGYuX3BhZGRpbmcgKyB0b3BSZWN0LmhlaWdodCArXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGRlZmF1bHRNYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCh0aGlzLmdldFN0eWxlUHJvcGVydHlNYXgobm9kZS50b3AsICdtYXJnaW4tYm90dG9tJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdHlsZVByb3BlcnR5TWF4KG5vZGUuY2VudGVyLCAnbWFyZ2luLXRvcCcpKSkgK1xuICAgICAgICAgICAgICAgICAgICBjZW50ZXJSZWN0LmhlaWdodCAvIDIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYm90dG9tUmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjZW50ZXJZID0gTWF0aC5taW4oY2VudGVyWSwgcmVjdC5oZWlnaHQgLSBzZWxmLl9wYWRkaW5nIC0gYm90dG9tUmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJSZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChkZWZhdWx0TWFyZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgodGhpcy5nZXRTdHlsZVByb3BlcnR5TWF4KG5vZGUuY2VudGVyLCAnbWFyZ2luLWJvdHRvbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3R5bGVQcm9wZXJ0eU1heChub2RlLmJvdHRvbSwgJ21hcmdpbi10b3AnKSkpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZi50cmFuc2Zvcm1Ib3Jpem9udGFsTm9kZXMoY2VudGVyWCwgY2VudGVyWSwgbm9kZS5jZW50ZXIsIGRlZmF1bHRNYXJnaW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29uZmlndXJlIHRoZSBob3ZlciByZXF1aXJlbWVudHMgZm9yIGEgbm9kZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb25maWd1cmVJdGVtSG92ZXIoZWxlbTogYW55LCBub2RlOiBJUmVuZGVyZWREaWFncmFtTm9kZSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICghKG5vZGUuZGVmIGFzIElIaWVyYXJjaHlOb2RlKS5kaXNhYmxlSG92ZXIpIHtcbiAgICAgICAgICAgIGVsZW0ub24oJ21vdXNlZW50ZXInLCBzZWxmLm5vZGVIb3ZlclN0YXJ0KVxuICAgICAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsIHNlbGYuaG92ZXJFbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5vbignbW91c2VlbnRlcicsIGZ1bmN0aW9uICgpIHsgZWxlbS5jbGFzc2VkKCdob3ZlcicsIHRydWUpIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24gKCkgeyBlbGVtLmNsYXNzZWQoJ2hvdmVyJywgZmFsc2UpIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEobm9kZS5kZWYgYXMgSUhpZXJhcmNoeU5vZGUpLmhpZGVUb29sdGlwKSB7XG4gICAgICAgICAgICBzZWxmLl9kYXRhVG9vbHRpcC5zZXRUYXJnZXQoZWxlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ3JhcGggPSAodGhpcy5fZWxlbWVudCBhcyBJSGllcmFyY2h5R3JhcGgpO1xuICAgICAgICBhZGRDbGlja0hlbHBlcihlbGVtLCBzZWxmLmdldE9wdGlvbnMoKSwgZ3JhcGgub25DbGljaywgZ3JhcGgub25Eb3VibGVDbGljayxcbiAgICAgICAgICAgIGdyYXBoLmNvbnRleHRNZW51SXRlbXMsIHNlbGYuX2RhdGFUb29sdGlwLCBncmFwaCwgbm9kZS5kZWYsIG5vZGUuZGVmLmtleSk7XG5cbiAgICAgICAgbGV0IGh0bWxOb2RlID0gZWxlbS5ub2RlKCk7XG4gICAgICAgIGh0bWxOb2RlWydfX2RhdGFfXyddID0gbm9kZS5kZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaGVscGVyIGZ1bmN0aW9uIHRvIHRyYXZlcnNlIHRoZSBub2RlIHRyZWVzLlxuICAgICAqIFdhbGtzIG92ZXIgdGhlIHRvcC9ib3R0b20vbGVmdC9yaWdodC9jZW50ZXIgY2hpbGRyZW4gYXJyYXlzIGFuZCBhcHBsaWVzIHRoZVxuICAgICAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRob3NlIG5vZGVzXG4gICAgICovXG4gICAgc3RhdGljIENISUxEUkVOID0gWyd0b3AnLCAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJ107XG4gICAgcHJpdmF0ZSByZW5kZXJOb2RlcyhwYXJlbnQ6IElIaWVyYXJjaHlOb2RlLCBub2RlOiBJSGllcmFyY2h5Tm9kZSxcbiAgICAgICAgZ3JvdXA6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4sIGRlcHRoOiBudW1iZXIpIHtcblxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIG5vZGUuZGVwdGggPSBkZXB0aDtcbiAgICAgICAgbGV0IHJlbmRlcmVkTm9kZTogSVJlbmRlcmVkSGllcmFyY2h5Tm9kZSA9IHtcbiAgICAgICAgICAgIGRlZjogbm9kZSxcbiAgICAgICAgICAgIHBvcnRzOiB7fVxuICAgICAgICB9O1xuICAgICAgICBzZWxmLl9ub2Rlc1tub2RlLmtleV0gPSByZW5kZXJlZE5vZGU7XG4gICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuXG4gICAgICAgIGlmIChzZWxmLl9kZWNpbWF0b3IgJiYgIXNlbGYuX2RlY2ltYXRvci5pc1Zpc2libGUobm9kZSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByZW5kZXJlZE5vZGUuZDNzZWxlY3Rpb247XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ2V0Q29sb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobm9kZS50eXBlICYmIG5vZGUudHlwZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnR5cGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX2NvbG9yTWdyLmhhc0NvbG9yKG5vZGUudHlwZVtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvck1nci5nZXRDb2xvcihub2RlLnR5cGVbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUua2V5ICYmIHNlbGYuX2NvbG9yTWdyLmhhc0NvbG9yKG5vZGUua2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvck1nci5nZXRDb2xvcihub2RlLmtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ3doaXRlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjbGFzc2VzID0gZ2V0U2VsZWN0aW9uTmFtZShub2RlLmtleSkgKyAnIG5vZGUgJztcbiAgICAgICAgaWYgKG5vZGUudHlwZSAmJiBub2RlLnR5cGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnR5cGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjbGFzc2VzICs9ICcgJyArIGdldFNlbGVjdGlvbk5hbWUobm9kZS50eXBlW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjaGlsZEdyb3VwID0gZ3JvdXAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5jbGFzc2VkKGNsYXNzZXMsIHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVkTm9kZS5kM3NlbGVjdGlvbiA9IGNoaWxkR3JvdXA7XG5cbiAgICAgICAgbGV0IGJvcmRlcjogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PjtcbiAgICAgICAgaWYgKCFub2RlLmhpZGVCb3JkZXIpIHtcbiAgICAgICAgICAgIGJvcmRlciA9IGNoaWxkR3JvdXAuYXBwZW5kKCdyZWN0JylcbiAgICAgICAgICAgICAgICAuY2xhc3NlZChjbGFzc2VzLCB0cnVlKVxuICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdib3JkZXInLCB0cnVlKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgZ2V0Q29sb3IpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdibGFjaycpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS1vcGFjaXR5JywgLjIpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3J4JywgNilcbiAgICAgICAgICAgICAgICAuYXR0cigncnknLCA2KTtcblxuICAgICAgICAgICAgc2VsZi5jb25maWd1cmVJdGVtSG92ZXIoYm9yZGVyLCByZW5kZXJlZE5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgY2hpbGRJZHggPSAwOyBjaGlsZElkeCA8IEQzSGllcmFyY2h5R3JhcGguQ0hJTERSRU4ubGVuZ3RoOyArK2NoaWxkSWR4KSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBEM0hpZXJhcmNoeUdyYXBoLkNISUxEUkVOW2NoaWxkSWR4XTtcbiAgICAgICAgICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKG5vZGUgYXMgYW55KVtjaGlsZHJlbl0ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW5kZXJOb2Rlcyhub2RlLCAobm9kZSBhcyBhbnkpW2NoaWxkcmVuXVtpXSwgY2hpbGRHcm91cCwgZGVwdGggKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbm9kZUNvbnRlbnRzOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+O1xuICAgICAgICBsZXQgcmVjdCA9IG5ldyBSZWN0KDAsIDAsIDAsIDApO1xuICAgICAgICBsZXQgaW1hZ2U6IGFueTtcbiAgICAgICAgbGV0IGltYWdlUmVjdDogYW55O1xuICAgICAgICBsZXQgdGV4dExhYmVsOiBhbnk7XG4gICAgICAgIGxldCB0ZXh0UmVjdDogYW55O1xuICAgICAgICBpZiAoIW5vZGUuaGlkZUltYWdlTGFiZWwgJiYgKG5vZGUubGFiZWwgfHwgbm9kZS5pbWFnZSkpIHtcbiAgICAgICAgICAgIG5vZGVDb250ZW50cyA9IGNoaWxkR3JvdXAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgICAgICAuY2xhc3NlZChjbGFzc2VzLCB0cnVlKTtcblxuICAgICAgICAgICAgaWYgKG5vZGUuaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBYL1kgaGF2ZSB0byBiZSBzZXQgb3IgZWxzZSB0aGUgY29udmVydFRvU1ZHQ29vcmRzIGNhbGwgZ2l2ZXMgYmFjayBhIGJhZCByZWN0XG4gICAgICAgICAgICAgICAgaW1hZ2UgPSBub2RlQ29udGVudHMuYXBwZW5kKCdpbWFnZScpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4bGluazpocmVmJywgbm9kZS5pbWFnZSlcbiAgICAgICAgICAgICAgICAgICAgLmNsYXNzZWQoY2xhc3NlcywgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3gnLCBzZWxmLl9yZW5kZXJPcmlnaW4ueClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCBzZWxmLl9yZW5kZXJPcmlnaW4ueSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgY3NzSGVpZ2h0ID0gcGFyc2VJbnQoZ2V0U3R5bGUoaW1hZ2UpLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgbGV0IGNzc1dpZHRoID0gcGFyc2VJbnQoZ2V0U3R5bGUoaW1hZ2UpLndpZHRoKTtcblxuICAgICAgICAgICAgICAgIGltYWdlLmF0dHIoJ2hlaWdodCcsIGNzc0hlaWdodCA/IGNzc0hlaWdodCA6IG5vZGUuaW1hZ2VIZWlnaHQgPyBub2RlLmltYWdlSGVpZ2h0IDogNDApO1xuICAgICAgICAgICAgICAgIGltYWdlLmF0dHIoJ3dpZHRoJywgY3NzV2lkdGggPyBjc3NXaWR0aCA6IG5vZGUuaW1hZ2VXaWR0aCA/IG5vZGUuaW1hZ2VXaWR0aCA6IDQwKTtcblxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJlSXRlbUhvdmVyKGltYWdlLCByZW5kZXJlZE5vZGUpO1xuXG4gICAgICAgICAgICAgICAgaW1hZ2VSZWN0ID0gY29udmVydFRvU1ZHQ29vcmRzKHNlbGYuX3N2ZywgaW1hZ2UpO1xuICAgICAgICAgICAgICAgIHJlY3Qud2lkdGggPSBNYXRoLm1heChyZWN0LndpZHRoLCBpbWFnZVJlY3Qud2lkdGgpO1xuICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0ICs9IGltYWdlUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgLy8gWC9ZIGhhdmUgdG8gYmUgc2V0IG9yIGVsc2UgdGhlIGNvbnZlcnRUb1NWR0Nvb3JkcyBjYWxsIGdpdmVzIGJhY2sgYSBiYWQgcmVjdFxuICAgICAgICAgICAgICAgIHRleHRMYWJlbCA9IG5vZGVDb250ZW50cy5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAgICAgICAuY2xhc3NlZChjbGFzc2VzLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigneCcsIHNlbGYuX3JlbmRlck9yaWdpbi54KVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigneScsIHNlbGYuX3JlbmRlck9yaWdpbi55KVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FsaWdubWVudC1iYXNlbGluZScsICdtaWRkbGUnKVxuICAgICAgICAgICAgICAgICAgICAudGV4dChub2RlLmxhYmVsKTtcblxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJlSXRlbUhvdmVyKHRleHRMYWJlbCwgcmVuZGVyZWROb2RlKTtcblxuICAgICAgICAgICAgICAgIHRleHRSZWN0ID0gY29udmVydFRvU1ZHQ29vcmRzKHNlbGYuX3N2ZywgdGV4dExhYmVsKTtcbiAgICAgICAgICAgICAgICByZWN0LndpZHRoID0gTWF0aC5tYXgocmVjdC53aWR0aCwgdGV4dFJlY3Qud2lkdGgpO1xuICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0ICs9IHRleHRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxmLl9yZW5kZXJPcmlnaW4ueCAhPT0gMCB8fFxuICAgICAgICAgICAgc2VsZi5fcmVuZGVyT3JpZ2luLnkgIT09IDApIHtcblxuICAgICAgICAgICAgaWYgKGJvcmRlcikge1xuICAgICAgICAgICAgICAgIC8vIHRoZSB0cmFuc2l0aW9uIGlzIGRvbmUgaW4gdHJhbnNmb3JtIG5vZGVzIHNpbmNlIHRoZXJlIGlzIG90aGVyXG4gICAgICAgICAgICAgICAgLy8gcGFydHMgb2YgdGhlIHRyYW5zaXRpb24gdGhhdCBoYXZlIHRvIGhhcHBlblxuICAgICAgICAgICAgICAgIGJvcmRlclxuICAgICAgICAgICAgICAgICAgICAuYXR0cigneCcsIHNlbGYuX3JlbmRlck9yaWdpbi54KVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigneScsIHNlbGYuX3JlbmRlck9yaWdpbi55KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGltYWdlUmVjdCkge1xuICAgICAgICAgICAgICAgIGltYWdlXG4gICAgICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uKHNlbGYuZ2V0QW5pbWF0ZUR1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgcmVjdC53aWR0aCAvIDIgLSBpbWFnZVJlY3Qud2lkdGggLyAyKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigneScsIDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGV4dFJlY3QpIHtcbiAgICAgICAgICAgICAgICB0ZXh0TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oc2VsZi5nZXRBbmltYXRlRHVyYXRpb24oKSlcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3gnLCByZWN0LndpZHRoIC8gMilcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCByZWN0LmhlaWdodCAtIHRleHRSZWN0LmhlaWdodCAvIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGltYWdlUmVjdCkge1xuICAgICAgICAgICAgICAgIGltYWdlLmF0dHIoJ3gnLCByZWN0LndpZHRoIC8gMiAtIGltYWdlUmVjdC53aWR0aCAvIDIpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCd5JywgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dFJlY3QpIHtcbiAgICAgICAgICAgICAgICB0ZXh0TGFiZWwuYXR0cigneCcsIHJlY3Qud2lkdGggLyAyKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigneScsIHJlY3QuaGVpZ2h0IC0gdGV4dFJlY3QuaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlZE5vZGUucmVjdCA9IHJlY3Q7XG5cbiAgICAgICAgc2VsZi50cmFuc2Zvcm1Ob2RlKG5vZGUsIGJvcmRlciwgbm9kZUNvbnRlbnRzLCBzZWxmLl9tYXJnaW4sIHNlbGYuX3BhZGRpbmcpO1xuICAgIH1cblxuICAgIC8qKiBjcmVhdGUgdGhlIHBvcnRzIG9uIHRoZSBub2RlcyB0aGF0IHRoZSBsaW5rcyB3aWxsIGF0dGFjaCBkdWUgYmFzZWQgb24gdGhlIG9yZGVyIG9mXG4gICAgICogdGhlIGxpbmtzIGluIHRoZSBsaXN0LiAgVGhlIGZpcnN0IGxpbmsgb24gYSBnaXZlbiBzaWRlIG9mIGEgbm9kZSB0YWtlcyB0aGUgZmlyc3QgcG9ydCBldGMuLi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUxpbmtzKGxpbmtzOiBJSGllcmFyY2h5R3JhcGhMaW5rW10pIHtcbiAgICAgICAgbGV0IHJldDogSVJlbmRlcmVkRGlhZ3JhbUxpbmtbXSA9IFtdO1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgbGV0IGZyb20gPSBzZWxmLl9ub2Rlc1tsaW5rc1tpXS5mcm9tIGFzIHN0cmluZ10gYXMgSVJlbmRlcmVkSGllcmFyY2h5Tm9kZTtcbiAgICAgICAgICAgIGxldCB0byA9IHNlbGYuX25vZGVzW2xpbmtzW2ldLnRvIGFzIHN0cmluZ10gYXMgSVJlbmRlcmVkSGllcmFyY2h5Tm9kZTtcbiAgICAgICAgICAgIGlmIChzZWxmLl9kZWNpbWF0b3IpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZnJvbSAmJiAhc2VsZi5fZGVjaW1hdG9yLmlzVmlzaWJsZShmcm9tLmRlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHNlbGYuX25vZGVzWyhmcm9tLmRlZiBhcyBJSGllcmFyY2h5Tm9kZSkucGFyZW50LmtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlICh0byAmJiAhc2VsZi5fZGVjaW1hdG9yLmlzVmlzaWJsZSh0by5kZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvID0gc2VsZi5fbm9kZXNbKHRvLmRlZiBhcyBJSGllcmFyY2h5Tm9kZSkucGFyZW50LmtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbGlua3MgaW50ZXJuYWwgdG8gYSBub2RlIHNob3VsZCBiZSBpZ25vcmVkXG4gICAgICAgICAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkIHx8IHRvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlcmUgb25lIGlzIGFuIGFuY2VzdG9yIG9mIGFub3RoZXJcbiAgICAgICAgICAgIGxldCBkZXNjZW5kYW50ID0gKGZyb20uZGVmIGFzIElIaWVyYXJjaHlOb2RlKS5kZXB0aCA+ICh0by5kZWYgYXMgSUhpZXJhcmNoeU5vZGUpLmRlcHRoID8gZnJvbSA6IHRvO1xuICAgICAgICAgICAgbGV0IGFuY2VzdG9yID0gKGZyb20uZGVmIGFzIElIaWVyYXJjaHlOb2RlKS5kZXB0aCA+ICh0by5kZWYgYXMgSUhpZXJhcmNoeU5vZGUpLmRlcHRoID8gdG8gOiBmcm9tO1xuXG4gICAgICAgICAgICB3aGlsZSAoKGFuY2VzdG9yLmRlZiBhcyBJSGllcmFyY2h5Tm9kZSkuZGVwdGggIT0gKGRlc2NlbmRhbnQuZGVmIGFzIElIaWVyYXJjaHlOb2RlKS5kZXB0aCkge1xuICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQgPSBzZWxmLl9ub2Rlc1soZGVzY2VuZGFudC5kZWYgYXMgSUhpZXJhcmNoeU5vZGUpLnBhcmVudC5rZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFuY2VzdG9yID09PSBkZXNjZW5kYW50KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZW5kZXJlZExpbms6IElSZW5kZXJlZERpYWdyYW1MaW5rID0ge1xuICAgICAgICAgICAgICAgIGRlZjogbGlua3NbaV0sXG4gICAgICAgICAgICAgICAgc291cmNlOiB7IG5vZGU6IGZyb20sIGVuZFBvaW50OiB1bmRlZmluZWQsIGFsaWdubWVudDogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7IG5vZGU6IHRvLCBlbmRQb2ludDogdW5kZWZpbmVkLCBhbGlnbm1lbnQ6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldC5wdXNoKHJlbmRlcmVkTGluayk7XG5cbiAgICAgICAgICAgIGxldCBmcm9tUmVjdCA9IGNvbnZlcnRUb1NWR0Nvb3JkcyhzZWxmLl9zdmcsIGZyb20uZDNzZWxlY3Rpb24pO1xuICAgICAgICAgICAgbGV0IHRvUmVjdCA9IGNvbnZlcnRUb1NWR0Nvb3JkcyhzZWxmLl9zdmcsIHRvLmQzc2VsZWN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKGZyb21SZWN0LmJvdHRvbSA8IHRvUmVjdC55KSB7XG4gICAgICAgICAgICAgICAgLy8gZnJvbSBpcyBhYm92ZSB0b1xuICAgICAgICAgICAgICAgIGlmICghZnJvbS5wb3J0cy5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbS5wb3J0cy5ib3R0b20gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0by5wb3J0cy50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgdG8ucG9ydHMudG9wID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZyb20ucG9ydHMuYm90dG9tLnB1c2gocmVuZGVyZWRMaW5rKTtcbiAgICAgICAgICAgICAgICB0by5wb3J0cy50b3AucHVzaChyZW5kZXJlZExpbmspO1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5zb3VyY2UuYWxpZ25tZW50ID0gQWxpZ25tZW50LkJvdHRvbTtcbiAgICAgICAgICAgICAgICByZW5kZXJlZExpbmsudGFyZ2V0LmFsaWdubWVudCA9IEFsaWdubWVudC5Ub3A7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZyb21SZWN0LnkgPiB0b1JlY3QuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgLy8gZnJvbSBpcyBiZWxvdyB0b1xuICAgICAgICAgICAgICAgIGlmICghZnJvbS5wb3J0cy50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbS5wb3J0cy50b3AgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0by5wb3J0cy5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgdG8ucG9ydHMuYm90dG9tID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZyb20ucG9ydHMudG9wLnB1c2gocmVuZGVyZWRMaW5rKTtcbiAgICAgICAgICAgICAgICB0by5wb3J0cy5ib3R0b20ucHVzaChyZW5kZXJlZExpbmspO1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5zb3VyY2UuYWxpZ25tZW50ID0gQWxpZ25tZW50LlRvcDtcbiAgICAgICAgICAgICAgICByZW5kZXJlZExpbmsudGFyZ2V0LmFsaWdubWVudCA9IEFsaWdubWVudC5Cb3R0b207XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZyb21SZWN0LnJpZ2h0IDwgdG9SZWN0LngpIHtcbiAgICAgICAgICAgICAgICAvLyBmcm9tIGlzIGxlZnQgb2YgdG9cbiAgICAgICAgICAgICAgICBpZiAoIWZyb20ucG9ydHMucmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbS5wb3J0cy5yaWdodCA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRvLnBvcnRzLmxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdG8ucG9ydHMubGVmdCA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmcm9tLnBvcnRzLnJpZ2h0LnB1c2gocmVuZGVyZWRMaW5rKTtcbiAgICAgICAgICAgICAgICB0by5wb3J0cy5sZWZ0LnB1c2gocmVuZGVyZWRMaW5rKTtcbiAgICAgICAgICAgICAgICByZW5kZXJlZExpbmsuc291cmNlLmFsaWdubWVudCA9IEFsaWdubWVudC5SaWdodDtcbiAgICAgICAgICAgICAgICByZW5kZXJlZExpbmsudGFyZ2V0LmFsaWdubWVudCA9IEFsaWdubWVudC5MZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBmcm9tIGlzIHRvIHRoZSByaWdodCBvZiB0b1xuICAgICAgICAgICAgICAgIGlmICghZnJvbS5wb3J0cy5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb20ucG9ydHMubGVmdCA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRvLnBvcnRzLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRvLnBvcnRzLnJpZ2h0ID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZyb20ucG9ydHMubGVmdC5wdXNoKHJlbmRlcmVkTGluayk7XG4gICAgICAgICAgICAgICAgdG8ucG9ydHMucmlnaHQucHVzaChyZW5kZXJlZExpbmspO1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkTGluay5zb3VyY2UuYWxpZ25tZW50ID0gQWxpZ25tZW50LkxlZnQ7XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRMaW5rLnRhcmdldC5hbGlnbm1lbnQgPSBBbGlnbm1lbnQuUmlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvKiogZG9lcyBhbiBpbiBwbGFjZSBtZXJnZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGxpbmtzIGZvciBhIG5vZGUgc2luY2UgYSBub2RlIG1heSBoYXZlXG4gICAgICogaW5wdXQgYW5kIG91dHB1dCBwb3J0cyBvbiB0aGUgc2FtZSBzaWRlIG9mIHRoZSBub2RlXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZU5vZGVQb3J0cyhsaW5rczogSVJlbmRlcmVkRGlhZ3JhbUxpbmtbXSwgbm9kZTogSVJlbmRlcmVkRGlhZ3JhbU5vZGUpIHtcbiAgICAgICAgbGV0IG5vZGVFbmRQb2ludHM6IHsgW2luZGV4OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9OyAvLyBtYXBzIG5vZGUgZW5kcG9pbnRzIHRvIGluZGV4IHZhbHVlc1xuICAgICAgICBsZXQgdXNlZElkeCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBsaW5rID0gbGlua3NbaV07XG4gICAgICAgICAgICBsZXQgbGlua0RlZiA9IGxpbmsuZGVmIGFzIElIaWVyYXJjaHlHcmFwaExpbms7XG4gICAgICAgICAgICBpZiAobGluay5zb3VyY2Uubm9kZSA9PT0gbm9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5rRGVmLmZyb21Db25uZWN0aW9uUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVFbmRQb2ludHNbbGlua0RlZi5mcm9tQ29ubmVjdGlvblBvaW50XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlRW5kUG9pbnRzW2xpbmtEZWYuZnJvbUNvbm5lY3Rpb25Qb2ludF0gPSArK3VzZWRJZHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGluay5zb3VyY2UuZW5kUG9pbnQgPSBub2RlRW5kUG9pbnRzW2xpbmtEZWYuZnJvbUNvbm5lY3Rpb25Qb2ludF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGluay5zb3VyY2UuZW5kUG9pbnQgPSArK3VzZWRJZHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmtEZWYudG9Db25uZWN0aW9uUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVFbmRQb2ludHNbbGlua0RlZi50b0Nvbm5lY3Rpb25Qb2ludF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUVuZFBvaW50c1tsaW5rRGVmLnRvQ29ubmVjdGlvblBvaW50XSA9ICsrdXNlZElkeDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsaW5rLnRhcmdldC5lbmRQb2ludCA9IG5vZGVFbmRQb2ludHNbbGlua0RlZi50b0Nvbm5lY3Rpb25Qb2ludF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGluay50YXJnZXQuZW5kUG9pbnQgPSArK3VzZWRJZHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmtzLmxlbmd0aCA9IHVzZWRJZHg7XG4gICAgfVxuXG4gICAgLyoqIHdhbGsgb3ZlciBub2RlcyBhbmQgc29ydCB0aGUgbGluayBlbmRwb2ludHMgYmFzZWQgb24gdGhlIG5vZGUgcG9zaXRpb25zXG4gICAgKiB0byBtaW5pbWl6ZSBjcm9zc2luZyBzbyBwb3J0cyBhcmUgYXNzaWduZWQgYmFzZWQgb24gdGhlIGxvY2F0aW9uIG9mIHRoZSBub2Rlc1xuICAgICogdGhleSBhcmUgY29ubmVjdGluZyB0by4gIEV4YW1wbGUgaWYgdGhlIHRhcmdldCBub2RlIGlzIGFib3ZlIHRoZSBzb3VyY2Ugbm9kZSBpdCB3aWxsXG4gICAgKiB0YWtlIGEgaGlnaGVyIHBvcnQgcG9zaXRpb24gdGhhbiBhIGxpbmsgd2hlcmUgdGhlIHRhcmdldCBub2RlIGlzIGJlbG93IHRoZSBzb3VyY2Ugbm9kZSAqL1xuICAgIHByaXZhdGUgb3JkZXJOb2RlUG9ydHMoKSB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLl9ub2Rlcykge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl9ub2Rlc1trZXldIGFzIElSZW5kZXJlZEhpZXJhcmNoeU5vZGU7XG4gICAgICAgICAgICBsZXQgc29ydFZlcnRpY2FsID0gZnVuY3Rpb24gKGE6IElSZW5kZXJlZERpYWdyYW1MaW5rLFxuICAgICAgICAgICAgICAgIGI6IElSZW5kZXJlZERpYWdyYW1MaW5rKTogbnVtYmVyIHtcbiAgICAgICAgICAgICAgICBsZXQgYUNvbXBhcmF0b3IgPSBhLnNvdXJjZS5ub2RlID09PSBub2RlID8gYS50YXJnZXQubm9kZSA6IGEuc291cmNlLm5vZGU7XG4gICAgICAgICAgICAgICAgbGV0IGJDb21wYXJhdG9yID0gYi5zb3VyY2Uubm9kZSA9PT0gbm9kZSA/IGIudGFyZ2V0Lm5vZGUgOiBiLnNvdXJjZS5ub2RlO1xuICAgICAgICAgICAgICAgIHJldHVybiBhQ29tcGFyYXRvci5kM3NlbGVjdGlvbi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cbiAgICAgICAgICAgICAgICAgICAgYkNvbXBhcmF0b3IuZDNzZWxlY3Rpb24ubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzb3J0SG9yaXpvbnRhbCA9IGZ1bmN0aW9uIChhOiBJUmVuZGVyZWREaWFncmFtTGluayxcbiAgICAgICAgICAgICAgICBiOiBJUmVuZGVyZWREaWFncmFtTGluayk6IG51bWJlciB7XG4gICAgICAgICAgICAgICAgbGV0IGFDb21wYXJhdG9yID0gYS5zb3VyY2Uubm9kZSA9PT0gbm9kZSA/IGEudGFyZ2V0Lm5vZGUgOiBhLnNvdXJjZS5ub2RlO1xuICAgICAgICAgICAgICAgIGxldCBiQ29tcGFyYXRvciA9IGIuc291cmNlLm5vZGUgPT09IG5vZGUgPyBiLnRhcmdldC5ub2RlIDogYi5zb3VyY2Uubm9kZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYUNvbXBhcmF0b3IuZDNzZWxlY3Rpb24ubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuICAgICAgICAgICAgICAgICAgICBiQ29tcGFyYXRvci5kM3NlbGVjdGlvbi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLnBvcnRzLnRvcCkge1xuICAgICAgICAgICAgICAgIG5vZGUucG9ydHMudG9wLnNvcnQoc29ydEhvcml6b250YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VOb2RlUG9ydHMobm9kZS5wb3J0cy50b3AsIG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUucG9ydHMuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5wb3J0cy5ib3R0b20uc29ydChzb3J0SG9yaXpvbnRhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXJnZU5vZGVQb3J0cyhub2RlLnBvcnRzLmJvdHRvbSwgbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZS5wb3J0cy5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgbm9kZS5wb3J0cy5sZWZ0LnNvcnQoc29ydFZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lcmdlTm9kZVBvcnRzKG5vZGUucG9ydHMubGVmdCwgbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZS5wb3J0cy5yaWdodCkge1xuICAgICAgICAgICAgICAgIG5vZGUucG9ydHMucmlnaHQuc29ydChzb3J0VmVydGljYWwpO1xuICAgICAgICAgICAgICAgIG5vZGUucG9ydHMucmlnaHQuc29ydChzb3J0VmVydGljYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VOb2RlUG9ydHMobm9kZS5wb3J0cy5yaWdodCwgbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhY3R1YWxseSByZW5kZXIgdGhlIGxpbmtzIHVzaW5nIHRoZSBwYXRoIGluZm9ybWF0aW9uIHByb3ZpZGVkXG4gICAgICogYnkgdGhlIGxpbmsgZnVuY3Rpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW5kZXJMaW5rcyhsaW5rczogSUhpZXJhcmNoeUdyYXBoTGlua1tdLFxuICAgICAgICBncmFwaEFyZWE6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4pIHtcblxuICAgICAgICAvLyBjcmVhdGUgdGhlIGVuZCBwb2ludHMgZm9yIGVhY2ggbGlua1xuICAgICAgICBsZXQgcmVuZGVyZWRMaW5rczogSVJlbmRlcmVkRGlhZ3JhbUxpbmtbXSA9IHRoaXMuY3JlYXRlTGlua3MobGlua3MpO1xuXG4gICAgICAgIC8vIHNvcnQgbGlua3MgdG8gbWluaW1pemUgY3Jvc3NpbmcgKHNlZSBmdW5jdGlvbiBoZWFkZXIgZm9yIG1vcmUgZGV0YWlsKVxuICAgICAgICB0aGlzLm9yZGVyTm9kZVBvcnRzKCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJMaW5rSGVscGVyKGdyYXBoQXJlYSwgcmVuZGVyZWRMaW5rcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaXplVmlld1RvRml0KHJvb3Q6IElIaWVyYXJjaHlOb2RlKTogYW55IHtcbiAgICAgICAgbGV0IHJlc2l6ZVZpZXc6IGFueTtcbiAgICAgICAgbGV0IHJlY3QgPSB0aGlzLl9ub2Rlc1tyb290LmtleV0ucmVjdDtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZml0VG9XaW5kb3cpIHtcbiAgICAgICAgICAgIHJlc2l6ZVZpZXcgPSB0aGlzLl9zdmdcbiAgICAgICAgICAgICAgICAudHJhbnNpdGlvbigncmVzaXplVmlldycpXG4gICAgICAgICAgICAgICAgLmR1cmF0aW9uKHRoaXMuZ2V0QW5pbWF0ZUR1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCAnMCAwICcgKyByZWN0LndpZHRoICsgJyAnICsgcmVjdC5oZWlnaHQpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAneE1pZFlNaWQgbWVldCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMud2lkdGgpIHtcbiAgICAgICAgICAgICAgICByZXNpemVWaWV3XG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIHRoaXMuX29wdGlvbnMud2lkdGgpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9vcHRpb25zLmhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJlc2l6ZVZpZXdcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgdGhpcy5fb3B0aW9ucy5oZWlnaHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNpemVWaWV3XG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsICcxMDAlJylcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNpemVWaWV3ID0gdGhpcy5fc3ZnXG4gICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oJ3Jlc2l6ZVZpZXcnKVxuICAgICAgICAgICAgICAgIC5kdXJhdGlvbih0aGlzLmdldEFuaW1hdGVEdXJhdGlvbigpKVxuICAgICAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIHJlY3Qud2lkdGgpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIHJlY3QuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzaXplVmlldztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckhlbHBlcihyb290OiBJSGllcmFyY2h5Tm9kZSxcbiAgICAgICAgaXNCYWNrZ3JvdW5kUmVuZGVyID0gZmFsc2UpOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+IHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLl9ub2RlcyA9IHt9O1xuXG4gICAgICAgIGxldCBncmFwaEFyZWEgPSBzZWxmLl9zdmcuaW5zZXJ0KCdnJywgJ2cnKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2dyYXBoJywgdHJ1ZSk7XG5cbiAgICAgICAgbGV0IG9sZEFuaW1hdGVEdXJhdGlvbiA9IHNlbGYuZ2V0QW5pbWF0ZUR1cmF0aW9uKCk7XG4gICAgICAgIGlmIChpc0JhY2tncm91bmRSZW5kZXIpIHtcbiAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYW5pbWF0ZUR1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIGdyYXBoQXJlYS5hdHRyKCdvcGFjaXR5JywgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLl9kZWNpbWF0b3IgPSAoc2VsZi5fZWxlbWVudCBhcyBJSGllcmFyY2h5R3JhcGgpLmRlY2ltYXRvcjtcbiAgICAgICAgc2VsZi5yZW5kZXJOb2Rlcyh1bmRlZmluZWQsIHJvb3QsIGdyYXBoQXJlYSwgMCk7XG5cbiAgICAgICAgLy8gcmVuZGVyIGxpbmtzIGFmdGVyIG5vZGVzIGFyZSBkb25lIHJlbmRlcmluZ1xuICAgICAgICBzZWxmLmluaXRpYWxpemVMaW5rTGF5ZXIoZ3JhcGhBcmVhKTtcblxuICAgICAgICBsZXQgbGlua3MgPSAoc2VsZi5fZWxlbWVudCBhcyBJSGllcmFyY2h5R3JhcGgpLmxpbmtzO1xuICAgICAgICBncmFwaEFyZWFcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKCdub2RlV2FpdCcpXG4gICAgICAgICAgICAuZHVyYXRpb24oc2VsZi5nZXRBbmltYXRlRHVyYXRpb24oKSlcbiAgICAgICAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBzZWxmLnJlbmRlckxpbmtzKGxpbmtzLCBncmFwaEFyZWEpOyB9KTtcblxuICAgICAgICBpZiAoaXNCYWNrZ3JvdW5kUmVuZGVyKSB7XG4gICAgICAgICAgICBzZWxmLl9vcHRpb25zLmFuaW1hdGVEdXJhdGlvbiA9IG9sZEFuaW1hdGVEdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlc2l6ZSB3aW5kb3cgaWYgdGhpcyBpc24ndCBhIGJhY2tncm91bmQgcmVuZGVyXG4gICAgICAgICAgICBzZWxmLnNpemVWaWV3VG9GaXQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyYXBoQXJlYTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSBoaWVyYXJjaGljYWwgZ3JhcGhcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVuZGVyKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGdyYXBoID0gc2VsZi5fZWxlbWVudCBhcyBJSGllcmFyY2h5R3JhcGg7XG5cbiAgICAgICAgLy8gVE9ETyBwYXNzIHRoZXNlIGluIGFzIG9wdGlvbnNcbiAgICAgICAgc2VsZi5fbWFyZ2luID0gMzA7XG4gICAgICAgIHNlbGYuX3BhZGRpbmcgPSAxMDtcblxuICAgICAgICBzZWxmLmxvYWRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIGxldCBuZXdSb290ID0gKHNlbGYuX2VsZW1lbnQgYXMgSUhpZXJhcmNoeUdyYXBoKS5ub2RlcztcbiAgICAgICAgbGV0IG9sZEdyYXBoID0gc2VsZi5fc3ZnLnNlbGVjdCgnLmdyYXBoJyk7XG4gICAgICAgIGxldCBhbmltYXRlRHVyYXRpb24gPSBzZWxmLmdldEFuaW1hdGVEdXJhdGlvbigpO1xuICAgICAgICBpZiAoYW5pbWF0ZUR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSBncmFwaCB0cmFuc2l0aW9uIGluIGEgcHJldHR5IHdheVxuXG4gICAgICAgICAgICAvLyB0aGlzIHdvdWxkIGJlIHdoZXJlIHRoZSBuZXcgcm9vdCB3YXMgaW4gdGhlIG9sZCB0cmVlXG4gICAgICAgICAgICBsZXQgbmV3Um9vdEluT2xkVHJlZSA9IHNlbGYuX25vZGVzW25ld1Jvb3Qua2V5XTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHRoZSBuZXcgdHJlZSBoaWRkZW4gZmlyc3Qgc28gd2UgY2FuIG1ha2UgdHJhbnNpdGlvbnNcbiAgICAgICAgICAgIHNlbGYuX3JlbmRlck9yaWdpbiA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgICAgICAgbGV0IG5ld0dyYXBoID0gc2VsZi5yZW5kZXJIZWxwZXIobmV3Um9vdCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgd291bGQgYmUgd2hlcmUgdGhlIG9sZCByb290IGlzIGluIHRoZSBuZXdcbiAgICAgICAgICAgIGxldCBvbGRSb290SW5OZXdUcmVlOiBJUmVuZGVyZWREaWFncmFtTm9kZTtcbiAgICAgICAgICAgIGxldCBvbGRHcmFwaE5vZGUgPSBvbGRHcmFwaC5zZWxlY3QoJ3JlY3QnKS5ub2RlKCk7XG4gICAgICAgICAgICBpZiAob2xkR3JhcGhOb2RlKSB7XG4gICAgICAgICAgICAgICAgb2xkUm9vdEluTmV3VHJlZSA9IHNlbGYuX25vZGVzWyhvbGRHcmFwaE5vZGUgYXMgYW55KVsnX19kYXRhX18nXS5rZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3Um9vdEluT2xkVHJlZSkge1xuICAgICAgICAgICAgICAgIC8vIG5ldyByb290IHdhcyBpbiBvbGQgdHJlZSBzbyB0aGlzIGlzIHpvb21pbmcgaW50byBhIG5vZGVcbiAgICAgICAgICAgICAgICBsZXQgbmV3Um9vdE5vZGUgPSBzZWxmLl9ub2Rlc1tuZXdSb290LmtleV07XG4gICAgICAgICAgICAgICAgbGV0IG9sZFJlY3QgPSBjb252ZXJ0VG9TVkdDb29yZHMoc2VsZi5fc3ZnLCBuZXdSb290SW5PbGRUcmVlLmQzc2VsZWN0aW9uKTtcblxuICAgICAgICAgICAgICAgIGxldCB0cmFuc2xhdGVPbGROb2RlID0gb2xkR3JhcGhcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oJ3RyYW5zbGF0ZU9sZE5vZGUnKVxuICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oYW5pbWF0ZUR1cmF0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLScgKyBvbGRSZWN0LnggKyAnLC0nICsgb2xkUmVjdC55ICsgJyknKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzaXplVmlldyA9IHNlbGYuc2l6ZVZpZXdUb0ZpdChuZXdSb290KTtcblxuICAgICAgICAgICAgICAgIGxldCBub2RlQ2hhbmdlZCA9IG5ld1Jvb3RJbk9sZFRyZWUuZDNzZWxlY3Rpb24uc2VsZWN0QWxsKCcqJykuc2l6ZSgpICE9PVxuICAgICAgICAgICAgICAgICAgICBuZXdSb290Tm9kZS5kM3NlbGVjdGlvbi5zZWxlY3RBbGwoJyonKS5zaXplKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobm9kZUNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcm9vdCBoYXMgYWRkZWQvcmVtb3ZlZCBub2RlcyBzbyB3YWl0IGZvciB0aGUgc2l6ZVxuICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGFuZCB0aGVuIHJlZHJhdyB0aGUgcm9vdFxuICAgICAgICAgICAgICAgICAgICBuZXdHcmFwaC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzaXplVmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uKGFuaW1hdGVEdXJhdGlvbiAvIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRHcmFwaC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbmRlckhlbHBlcihuZXdSb290KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZU9sZE5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEdyYXBoLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0dyYXBoLmF0dHIoJ29wYWNpdHknLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkUm9vdEluTmV3VHJlZSAmJiBvbGRSb290SW5OZXdUcmVlLmQzc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IHRpbWVvdXQgc28gbmV3IHRyZWUgaXMgcmVuZGVyZWQgZmlyc3Qgc28gd2UgY2FuIGFkanVzdCBvdXIgYW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgaW4gdGhlIG9sZCB0cmVlIGFuZCByZW5kZXJlZFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3UmVjdCA9IGNvbnZlcnRUb1NWR0Nvb3JkcyhzZWxmLl9zdmcsIG9sZFJvb3RJbk5ld1RyZWUuZDNzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG9wTGVmdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IG5ld1JlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IG5ld1JlY3QueVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbmRlck9yaWdpbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IChuZXdSZWN0LnggKyBuZXdSZWN0LnJpZ2h0KSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAobmV3UmVjdC55ICsgbmV3UmVjdC5ib3R0b20pIC8gMixcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIHJvb3QgaXMgaW4gbmV3IHRyZWUgc28gem9vbWluZyBvdXRcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0VsZW1Db3VudCA9IG9sZFJvb3RJbk5ld1RyZWUuZDNzZWxlY3Rpb24uc2VsZWN0QWxsKCcqJykuc2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb2xkRWxlbUNvdW50ID0gb2xkR3JhcGguc2VsZWN0KCcubm9kZScpLnNlbGVjdEFsbCgnKicpLnNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVDaGFuZ2VkID0gbmV3RWxlbUNvdW50ICE9PSBvbGRFbGVtQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgIG5ld0dyYXBoLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc2xhdGVPbGROb2RlID0gb2xkR3JhcGhcbiAgICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uKCd0cmFuc2xhdGVPbGROb2RlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbihhbmltYXRlRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgKyB0b3BMZWZ0LnggKyAnLCcgKyB0b3BMZWZ0LnkgKyAnKScpXG4gICAgICAgICAgICAgICAgICAgICAgICAub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZUNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkR3JhcGgucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVuZGVySGVscGVyKG5ld1Jvb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uKHNlbGYuZ2V0QW5pbWF0ZUR1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEdyYXBoLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2l6ZVZpZXdUb0ZpdChuZXdSb290KTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdG90YWxseSBvcnRob2dvbmFsIHRyZWUgc28ganVzdCByZW5kZXIgaXRcbiAgICAgICAgICAgICAgICBuZXdHcmFwaC5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgIHNlbGYuX3JlbmRlck9yaWdpbiA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgICAgICAgICAgIHNlbGYuX3N2Z1xuICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvbignaGlkZVZpZXcnKVxuICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oYW5pbWF0ZUR1cmF0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCAwKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgMClcbiAgICAgICAgICAgICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRHcmFwaC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVuZGVySGVscGVyKG5ld1Jvb3QpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuX3JlbmRlck9yaWdpbiA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgICAgICAgb2xkR3JhcGgucmVtb3ZlKCk7XG4gICAgICAgICAgICBzZWxmLnJlbmRlckhlbHBlcihuZXdSb290KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkQzUmVuZGVyZXIucmVnaXN0ZXIoVUlUeXBlLkhpZXJhcmNoeUdyYXBoLCBEM0hpZXJhcmNoeUdyYXBoKTsiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFZQTtBQUNBO0FBR0E7QUFJQTtBQWdCQTtBQVlBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFHQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFRQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQTNwQ0E7QUF3bkJBOzs7O0FBSUE7QUFDQTtBQWdpQkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/core/connected-graph/hierarchy.ts\n");

/***/ }),

/***/ "./src/core/connected-graph/port.ts":
/*!******************************************!*\
  !*** ./src/core/connected-graph/port.ts ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utilities_1 = __webpack_require__(/*! ../utilities */ \"./src/core/utilities.ts\");\nconst ui_base_1 = __webpack_require__(/*! ../../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst graph_1 = __webpack_require__(/*! ../../interface/graph */ \"./src/interface/graph.ts\");\nconst renderer_1 = __webpack_require__(/*! ../renderer */ \"./src/core/renderer.ts\");\nconst svg_helper_1 = __webpack_require__(/*! ../svg-helper */ \"./src/core/svg-helper.ts\");\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\nconst PIXI = __webpack_require__(/*! pixi.js */ \"pixi.js\");\nconst dagre = __webpack_require__(/*! dagre */ \"dagre\");\nconst base_1 = __webpack_require__(/*! ./base */ \"./src/core/connected-graph/base.ts\");\nconst pixi_helper_1 = __webpack_require__(/*! ../pixi-helper */ \"./src/core/pixi-helper.ts\");\n/********************************************\n * NODE RENDER HELPERS\n*********************************************/\nclass SVGNode {\n    updatePosition(pos) {\n        this.def.x += pos.dx;\n        this.def.y += pos.dy;\n        this._nodeContainer\n            .attr('transform', `translate(${this.def.x}, ${this.def.y})`);\n    }\n    renderPort(portDef, options) {\n        let port = this._nodeContainer\n            .append('circle')\n            .attr('class', this._portDiagram.getClasses(this.def) + ' ' + portDef.key)\n            .classed('port', true)\n            .attr('cx', portDef.x)\n            .attr('cy', portDef.y)\n            .attr('r', PORT_RADIUS)\n            .attr('fill', 'white')\n            .attr('stroke-width', 1)\n            .attr('stroke', this._portDiagram.getColor(this.def));\n        return port;\n    }\n}\nclass PIXINode {\n    constructor() {\n        this._selectTempItems = {};\n    }\n    initializeNode() {\n        this._nodeContainer = new PIXI.Container();\n    }\n    getNode() {\n        return this._nodeContainer;\n    }\n    updatePosition(pos) {\n        this.def.x += pos.dx;\n        this.def.y += pos.dy;\n        this._nodeContainer.x = this.def.x;\n        this._nodeContainer.y = this.def.y;\n    }\n    renderPort(port, options) {\n        let portGraphic = options.manager.add(this.def.type[0], this.def.key, PIXI.SCALE_MODES.LINEAR, 1, function () {\n            let ret = new PIXI.Graphics();\n            ret.beginFill(options.color); // white\n            ret.drawCircle(0, 0, PORT_RADIUS); // drawCircle(x, y, radius)\n            ret.beginFill(0xFFFFFF); // white\n            ret.drawCircle(0, 0, PORT_RADIUS - 1); // drawCircle(x, y, radius)\n            ret.endFill();\n            return ret;\n        });\n        // put port relatively in the right place for the container\n        portGraphic.x = port.x - PORT_RADIUS;\n        portGraphic.y = port.y - PORT_RADIUS;\n        portGraphic.renderer = this;\n        this._nodeContainer.addChild(portGraphic);\n        return portGraphic;\n    }\n    select(selection, elem, index, graphicsMgr) {\n        let createSelectionBorder = function (circle) {\n            let circleRadius = circle.width / 2;\n            let radius = circleRadius + STROKE_WIDTH;\n            let border = graphicsMgr.add(selection + radius, selection + radius, PIXI.SCALE_MODES.LINEAR, 1, function () {\n                let pixiCircle = new PIXI.Graphics();\n                pixiCircle.beginFill(0xFFFFFF);\n                pixiCircle.drawCircle(0, 0, radius); // drawCircle(x, y, radius)\n                pixiCircle.endFill();\n                return pixiCircle;\n            });\n            border.x = circle.x + circleRadius - radius;\n            border.y = circle.y + circleRadius - radius;\n            border.tint = SELECTION_COLOR;\n            border.__data__ = circle.__data__;\n            return border;\n        };\n        let border = createSelectionBorder(elem);\n        this._selectTempItems[`${selection}Select${index}`] = border;\n        elem.parent.addChildAt(border, 0);\n    }\n    unselect(selection, elem, index) {\n        let border = this._selectTempItems[`${selection}Select${index}`];\n        border.parent.removeChild(border);\n        delete this._selectTempItems[`${selection}Select`];\n    }\n}\n/********************************************\n * NODE CONFIGURATION HELPERS\n *********************************************/\nlet RADIUS = 25;\nlet PORT_RADIUS = 3;\nlet STROKE_WIDTH = 3;\nlet SELECTION_COLOR = 15921737;\nlet PADDING = 3;\nlet simplePortArea = { x: -RADIUS, y: -RADIUS, height: RADIUS * 2, width: RADIUS * 2 };\nclass SimpleNode {\n    constructor(node) {\n        this._selectTempItems = {};\n        this.def = node;\n    }\n    configureNode() {\n        this.def.height = 50;\n        this.def.width = 50;\n    }\n    getPortAreaRect() {\n        return simplePortArea;\n    }\n}\nclass RectangleNode {\n    constructor(node) {\n        this.def = node;\n    }\n    getXYOffset() {\n        return { x: -this.def.width * .5, y: -this.def.height * .5 };\n    }\n    getTitle() {\n        return this.def.type.length > 0 ? this.def.type[0] : 'None';\n    }\n    getTitleTextRect() {\n        throw \"Error please implement this function\";\n    }\n    configureNode() {\n        let node = this.def;\n        let topPorts = node.ports.top ? node.ports.top.length : 0;\n        let bottomPorts = node.ports.bottom ? node.ports.bottom.length : 0;\n        let leftPorts = node.ports.left ? node.ports.left.length : 0;\n        let rightPorts = node.ports.right ? node.ports.right.length : 0;\n        let portSize = 15;\n        let titleTextRect = this.getTitleTextRect();\n        let titleHeight = titleTextRect.height + PADDING * 2;\n        let minHeight = titleHeight + PADDING * 2 + 50;\n        let minWidth = titleTextRect.width + PADDING * 2;\n        let xOffset = -minWidth * .5;\n        let yOffset = -minHeight * .5;\n        this._portRect = new ui_base_1.Rect(xOffset, titleHeight + yOffset, Math.max(Math.max(topPorts, bottomPorts) * portSize, minWidth), Math.max(Math.max(leftPorts, rightPorts) * portSize, minHeight));\n        this.def.height = titleHeight + this._portRect.height;\n        this.def.width = this._portRect.width;\n    }\n    getPortAreaRect() {\n        return this._portRect;\n    }\n}\n/********************************************\n * NODE IMPLEMENTATIONS\n *********************************************/\nclass SVGSimpleNode extends SimpleNode {\n    constructor(node, portDiagram) {\n        super(node);\n        this._portDiagram = portDiagram;\n        this.updatePosition = SVGNode.prototype.updatePosition.bind(this);\n        this.renderPort = SVGNode.prototype.renderPort.bind(this);\n    }\n    renderNode(options) {\n        this._nodeContainer = options.group.append('g');\n        this._nodeContainer\n            .append('circle')\n            .attr('class', this._portDiagram.getClasses(this.def))\n            .classed('node', true)\n            .attr('r', RADIUS)\n            .attr('cx', 0)\n            .attr('cy', 0)\n            .attr('fill', this._portDiagram.getColor(this.def));\n        if (this.def.x !== undefined) {\n            this.updatePosition({ dx: 0, dy: 0 });\n        }\n        return this._nodeContainer;\n    }\n}\nclass PIXISimpleNode extends SimpleNode {\n    constructor(node) {\n        super(node);\n        this.initializeNode = PIXINode.prototype.initializeNode.bind(this);\n        this.getNode = PIXINode.prototype.getNode.bind(this);\n        this.updatePosition = PIXINode.prototype.updatePosition.bind(this);\n        this.renderPort = PIXINode.prototype.renderPort.bind(this);\n    }\n    renderNode(options) {\n        this.initializeNode();\n        let node = options.manager.add(this.def.type[0], this.def.key, PIXI.SCALE_MODES.LINEAR, 4, function () {\n            let ret = new PIXI.Graphics();\n            ret.beginFill(0xFFFFFF);\n            ret.drawCircle(-RADIUS, -RADIUS, RADIUS); // drawCircle(x, y, radius)\n            ret.beginFill(options.color);\n            ret.drawCircle(-RADIUS, -RADIUS, RADIUS - 1); // drawCircle(x, y, radius)\n            ret.endFill();\n            return ret;\n        });\n        node.x = -RADIUS;\n        node.y = -RADIUS;\n        this._nodeContainer.addChild(node);\n        if (this.def.x !== undefined) {\n            this.updatePosition({ dx: 0, dy: 0 });\n        }\n        return node;\n    }\n    select(selection, elem, index, graphicsMgr) {\n        console.log('need node select');\n        let createSelectionBorder = function (circle) {\n            let circleRadius = circle.width / 2;\n            let radius = circleRadius + STROKE_WIDTH;\n            let border = graphicsMgr.add(selection + radius, selection + radius, PIXI.SCALE_MODES.LINEAR, 1, function () {\n                let pixiCircle = new PIXI.Graphics();\n                pixiCircle.beginFill(0xFFFFFF);\n                pixiCircle.drawCircle(0, 0, radius); // drawCircle(x, y, radius)\n                pixiCircle.endFill();\n                return pixiCircle;\n            });\n            border.x = circle.x + circleRadius - radius;\n            border.y = circle.y + circleRadius - radius;\n            border.tint = SELECTION_COLOR;\n            border.__data__ = circle.__data__;\n            return border;\n        };\n        let border = createSelectionBorder(elem);\n        this._selectTempItems[`${selection}Select${index}`] = border;\n        elem.parent.addChildAt(border, 0);\n    }\n    unselect(selection, elem, index) {\n        let border = this._selectTempItems[`${selection}Select${index}`];\n        border.parent.removeChild(border);\n        delete this._selectTempItems[`${selection}Select${index}`];\n    }\n}\nclass SVGRectangleNode extends RectangleNode {\n    constructor(node, portDiagram, svg) {\n        super(node);\n        this._portDiagram = portDiagram;\n        this._svg = svg;\n        this.updatePosition = SVGNode.prototype.updatePosition.bind(this);\n        this.renderPort = SVGNode.prototype.renderPort.bind(this);\n    }\n    getTitleTextRect() {\n        return svg_helper_1.getTextRect(this._svg, this.getTitle());\n    }\n    renderNode(options) {\n        this._nodeContainer = options.group.append('g');\n        let nodeBox = this._nodeContainer.append('rect');\n        let titleBox = this._nodeContainer.append('rect');\n        let textRenderer = this._nodeContainer.append('text');\n        let nodeOffset = this.getXYOffset();\n        let xOffset = nodeOffset.x;\n        let yOffset = nodeOffset.y;\n        let text = this.getTitle();\n        textRenderer\n            .text(text)\n            .attr('fill', 'white')\n            .attr('stroke', 'white')\n            .attr('alignment-baseline', 'hanging')\n            .attr('x', xOffset + PADDING)\n            .attr('y', yOffset + PADDING);\n        nodeBox\n            .attr('class', this._portDiagram.getClasses(this.def))\n            .classed('node', true)\n            .classed('border', true)\n            .attr('fill', '#FFFFFF')\n            .attr('stroke', '#000000')\n            .attr('stroke-width', 1)\n            .attr('x', xOffset)\n            .attr('y', yOffset)\n            .attr('width', this.def.width)\n            .attr('height', this.def.height)\n            .attr('rx', 3)\n            .attr('ry', 3);\n        titleBox\n            .attr('class', this._portDiagram.getClasses(this.def))\n            .classed('node', true)\n            .classed('title-box', true)\n            .attr('fill', this._portDiagram.getColor(this.def))\n            .attr('x', xOffset)\n            .attr('y', yOffset)\n            .attr('width', this.def.width)\n            .attr('height', 20)\n            .attr('rx', 3)\n            .attr('ry', 3);\n        if (this.def.x !== undefined) {\n            this.updatePosition({ dx: 0, dy: 0 });\n        }\n        return this._nodeContainer;\n    }\n}\nclass PIXIRectangleNode extends RectangleNode {\n    constructor(node, pixiHelper) {\n        super(node);\n        this._selectTempItems = {};\n        this._pixiHelper = pixiHelper;\n        this.initializeNode = PIXINode.prototype.initializeNode.bind(this);\n        this.getNode = PIXINode.prototype.getNode.bind(this);\n        this.updatePosition = PIXINode.prototype.updatePosition.bind(this);\n        this.renderPort = PIXINode.prototype.renderPort.bind(this);\n    }\n    getTitleTextRect() {\n        let text = this.getTitle();\n        return this._pixiHelper.renderText(text, d3.select(this._pixiHelper.getRenderer().view.parentNode), 0xFFFFFF);\n    }\n    renderNode(options) {\n        this.initializeNode();\n        let id = `${this.def.type[0]}H${this.def.height}W${this.def.width}`;\n        id += this.def.ports.top ? `T${this.def.ports.top.length}` : '';\n        id += this.def.ports.left ? `L${this.def.ports.left.length}` : '';\n        id += this.def.ports.right ? `R${this.def.ports.right.length}` : '';\n        id += this.def.ports.bottom ? `B${this.def.ports.bottom.length}` : '';\n        let node = options.manager.add(id, this.def.key, PIXI.SCALE_MODES.LINEAR, 1, () => {\n            // adjust the text to the right spot\n            let text = this.getTitle();\n            this._titleText = this._pixiHelper.renderText(text, d3.select(this._pixiHelper.getRenderer().view.parentNode), 0xFFFFFF);\n            this._titleText.x = PADDING;\n            this._titleText.y = PADDING;\n            // outline node\n            let graphic = new PIXI.Graphics();\n            graphic.beginFill(0xFFFFFF, 1);\n            graphic.lineStyle(1, 0x000000, .7);\n            graphic.drawRoundedRect(0, 0, this._portRect.width, this.def.height, 3);\n            // draw title box\n            graphic.beginFill(options.color, 1);\n            graphic.drawRoundedRect(0, 0, this._portRect.width, this._titleText.height + PADDING * 2, 3);\n            graphic.addChild(this._titleText);\n            return graphic;\n        });\n        let nodeOffset = this.getXYOffset();\n        node.x = nodeOffset.x;\n        node.y = nodeOffset.y;\n        this._nodeContainer.addChild(node);\n        if (this.def.x !== undefined) {\n            this.updatePosition({ dx: 0, dy: 0 });\n        }\n        return node;\n    }\n    select(selection, elem, index, graphicsMgr) {\n        // outline node\n        let border = new PIXI.Graphics();\n        border.lineStyle(STROKE_WIDTH * 2, SELECTION_COLOR);\n        border.drawRoundedRect(0, 0, this._portRect.width, this.def.height, 3);\n        let nodeOffset = this.getXYOffset();\n        border.x = nodeOffset.x;\n        border.y = nodeOffset.y;\n        this._nodeContainer.addChildAt(border, 0);\n        this._selectTempItems[`${selection}Select${index}`] = border;\n        elem.parent.addChildAt(border, 0);\n    }\n    unselect(selection, elem, index) {\n        let border = this._selectTempItems[`${selection}Select${index}`];\n        border.parent.removeChild(border);\n        delete this._selectTempItems[`${selection}Select${index}`];\n    }\n}\nclass D3PortDiagram extends renderer_1.UIElementRenderer {\n    constructor(element, renderer, parent) {\n        super();\n        /** cache stuff for later, portMap allows links to find the right\n         * port to attached to by to/from.  The ports array is just for rendering quickly\n         */\n        this._nodePortInfo = {};\n        this._options = {};\n        this.invalidate = this.render;\n        this._element = element;\n        this._rendererManager = renderer;\n        this._parent = parent;\n        this._nodes = {};\n        this._requiresLayout = false;\n        this._renderedNodes = [];\n        let self = this;\n        this.getLinkStartXY = function (link) {\n            let nodeDef = self._nodes[link.def.from];\n            let linkDef = link.def;\n            let offset = self._nodePortInfo[nodeDef.key][linkDef.fromPort];\n            return { x: nodeDef.x + offset.x, y: nodeDef.y + offset.y };\n        };\n        this.getLinkEndXY = function (link) {\n            let nodeDef = self._nodes[link.def.to];\n            let linkDef = link.def;\n            let offset = self._nodePortInfo[nodeDef.key][linkDef.toPort];\n            return { x: nodeDef.x + offset.x, y: nodeDef.y + offset.y };\n        };\n    }\n    /**\n     * @deprecated ('Deprecated since 1.14.0 in favor of focus.  Will be removed in 2.x')\n     * hover event\n     *\n     * @param event the event to pass to the renderer\n     */\n    hover(event) {\n        this.focus(event);\n    }\n    /**\n     * bring an item into focus\n     *\n     * @param event the event to focus on\n     */\n    focus(event) {\n        this._renderer.focus(event);\n    }\n    /**\n     * select an item\n     *\n     * @param event the event to focus on\n     */\n    select(event) {\n        this._renderer.select(event);\n    }\n    cursorChange(event) {\n    }\n    /**\n     * brush event\n     *\n     * @param event the event to pass to the renderer\n     */\n    brush(event) {\n        this._renderer.brush(event);\n    }\n    addNodePorts(portList, node, alignment) {\n        let self = this;\n        if (portList) {\n            let nodeKey = node.def.key;\n            if (!self._nodePortInfo[nodeKey]) {\n                self._nodePortInfo[nodeKey] = {};\n            }\n            let portArea = node.getPortAreaRect();\n            let verticalPortSize = portArea.height / portList.length; // amount of space the port can take\n            let verticalPortOffset = verticalPortSize * .5;\n            let horizontalPortSize = portArea.width / portList.length; // amount of space the port can take\n            let horizontallPortOffset = horizontalPortSize * .5;\n            let nodePortMap = self._nodePortInfo[nodeKey];\n            switch (alignment) {\n                case ui_base_1.Alignment.Top:\n                    portList.forEach(function (port, index) {\n                        let x = portArea.x + horizontallPortOffset + horizontalPortSize * index;\n                        nodePortMap[port.key] =\n                            { key: port.key, index: index, alignment: alignment, x: x, y: 0 };\n                    });\n                    break;\n                case ui_base_1.Alignment.Bottom:\n                    portList.forEach(function (port, index) {\n                        let x = portArea.x + horizontallPortOffset + horizontalPortSize * index;\n                        nodePortMap[port.key] =\n                            { key: port.key, index: index, alignment: alignment, x: x, y: node.def.height };\n                    });\n                    break;\n                case ui_base_1.Alignment.Left:\n                    portList.forEach(function (port, index) {\n                        let y = verticalPortOffset + verticalPortSize * index + portArea.y;\n                        nodePortMap[port.key] =\n                            { key: port.key, index: index, alignment: alignment, x: portArea.x, y: y };\n                    });\n                    break;\n                case ui_base_1.Alignment.Right:\n                    portList.forEach(function (port, index) {\n                        let y = verticalPortOffset + verticalPortSize * index + portArea.y;\n                        nodePortMap[port.key] =\n                            { key: port.key, index: index, alignment: alignment, x: portArea.x + node.def.width, y: y };\n                    });\n                    break;\n            }\n        }\n    }\n    addPorts(node) {\n        this.addNodePorts(node.def.ports.left, node, ui_base_1.Alignment.Left);\n        this.addNodePorts(node.def.ports.right, node, ui_base_1.Alignment.Right);\n        this.addNodePorts(node.def.ports.top, node, ui_base_1.Alignment.Top);\n        this.addNodePorts(node.def.ports.bottom, node, ui_base_1.Alignment.Bottom);\n    }\n    getColor(node) {\n        let colorMgr = this._rendererManager.getColorManager();\n        let color;\n        if (colorMgr.hasColor(node.key)) {\n            color = colorMgr.getColor(node.key);\n        }\n        else if (node.type) {\n            color = colorMgr.getColor(node.type[0]);\n        }\n        else {\n            color = colorMgr.getColor(node.key);\n        }\n        return color;\n    }\n    getClasses(node) {\n        let ret = node.key;\n        node.type.forEach(function (type) {\n            ret += ' ' + type;\n        });\n        return ret;\n    }\n    addNode(node) {\n        node.configureNode();\n        this._nodes[node.def.key] = node.def;\n    }\n    createRenderedLinks() {\n        let graph = this._element;\n        let links = graph.links;\n        let renderedLinks = [];\n        let self = this;\n        links.forEach(function (link) {\n            let sourceNode = self._nodes[link.from];\n            let targetNode = self._nodes[link.to];\n            if (!sourceNode || !targetNode) {\n                return;\n            }\n            let sourcePort = self._nodePortInfo[sourceNode.key][link.fromPort];\n            let targetPort = self._nodePortInfo[targetNode.key][link.toPort];\n            let renderedLink = {\n                def: link,\n                source: {\n                    node: sourceNode,\n                    alignment: sourcePort.alignment\n                },\n                target: {\n                    node: targetNode,\n                    alignment: targetPort.alignment\n                },\n            };\n            renderedLinks.push(renderedLink);\n        });\n        return renderedLinks;\n    }\n    layout(nodes, links) {\n        let graph = this._element;\n        let requiresLayout = graph.nodes && graph.nodes.length > 0 &&\n            graph.nodes[0].x === undefined;\n        if (requiresLayout) {\n            var g = new dagre.graphlib.Graph();\n            g.setGraph({ rankdir: 'LR' });\n            g.setDefaultEdgeLabel(function () { return {}; });\n            nodes.forEach((node) => {\n                node.def['label'] = node.def.key;\n                g.setNode(node.def.key, node.def);\n            });\n            links.forEach((link) => {\n                g.setEdge(link.def.from, link.def.to);\n            });\n            dagre.layout(g);\n            nodes.forEach((node) => {\n                node.updatePosition({ dx: 0, dy: 0 });\n            });\n        }\n    }\n    render(options) {\n        utilities_1.merge(this._options, options);\n        if (!this._renderer) {\n            if (this._options.forceSvgRenderer) {\n                this._renderer = new D3PortDiagramSVG(this._element, this._rendererManager, this._parent, this);\n            }\n            else {\n                this._renderer = new D3PortDiagramPixi(this._element, this._rendererManager, this._parent, this);\n            }\n            this._renderer.setColorManager(this._colorMgr);\n        }\n        this._renderer.render(options);\n    }\n}\nexports.D3PortDiagram = D3PortDiagram;\nclass D3PortDiagramSVG extends base_1.D3ConnectedGraphSVG {\n    constructor(element, renderer, parent, portDiagram) {\n        super(element, renderer, parent);\n        base_1.DiagramBase.prototype.bind.call(this, this._renderer, this._element);\n        this._portDiagram = portDiagram;\n        this.getLinkStartXY = portDiagram.getLinkStartXY;\n        this.getLinkEndXY = portDiagram.getLinkEndXY;\n    }\n    render(options) {\n        let self = this;\n        let graphArea = self.initializeGraphArea(options);\n        self.initializeLinkLayer(graphArea);\n        let nodeRenderers = self.renderNodes(graphArea);\n        let renderedLinks = this._portDiagram.createRenderedLinks();\n        self._portDiagram.layout(nodeRenderers, renderedLinks);\n        this.renderLinkHelper(graphArea, renderedLinks);\n        self.configureView();\n    }\n    renderNodes(graphArea) {\n        let self = this;\n        let graph = self._element;\n        self._portDiagram._nodePortInfo = {};\n        let nodeRenderers = [];\n        let nodeGroup = graphArea.append('g')\n            .attr('class', 'nodes');\n        graph.nodes.forEach((nodeDef) => {\n            if (graph.decimator && !graph.decimator(nodeDef)) {\n                return;\n            }\n            // has to happen before addNode/addPorts\n            let node;\n            // has to happen before addNode/addPorts\n            if (graph.nodeRenderType === graph_1.NodeType.NodeRectangle ||\n                nodeDef.renderType === graph_1.NodeType.NodeRectangle) {\n                node = new SVGRectangleNode(nodeDef, self._portDiagram, self._svg);\n            }\n            else {\n                node = new SVGSimpleNode(nodeDef, self._portDiagram);\n            }\n            self._portDiagram.addNode(node);\n            self._portDiagram.addPorts(node);\n            nodeRenderers.push(node);\n            // the function for moving the nodes\n            function dragMove(nodeDef) {\n                self._dataTooltip.hideTooltip();\n                node.updatePosition(d3.event);\n                let linksToUpdate = [];\n                graphArea.selectAll('.link.' + nodeDef.key)\n                    .each(function (link) {\n                    linksToUpdate.push(link);\n                });\n                self.renderLinkHelper(graphArea, linksToUpdate, true);\n            }\n            let renderedNode = node.renderNode({ group: nodeGroup })\n                .on('mouseenter', self.nodeHoverStart)\n                .on('mouseleave', self.hoverEnd)\n                .call(d3.drag()\n                .on('drag', dragMove));\n            renderedNode.node()['__data__'] = node.def;\n            svg_helper_1.addClickHelper(renderedNode, self.getOptions(), graph.onClick, graph.onDoubleClick, graph.contextMenuItems, self._dataTooltip, graph, node.def, node.def.key);\n            self._dataTooltip.setTarget(renderedNode);\n            // we do this here instead of using the renderPorts helper\n            // function because it's expensive to call selectAll multiple\n            // times (aka once for each node if we call that helper)\n            if (!self._element.disablePortRendering) {\n                // gather all the ports for rendering\n                let nodePorts = this._portDiagram._nodePortInfo[node.def.key];\n                for (let portKey in nodePorts) {\n                    let port = nodePorts[portKey];\n                    let renderedPort = node.renderPort(port);\n                    renderedPort.node()['__data__'] = port;\n                    svg_helper_1.addClickHelper(renderedPort, self.getOptions(), graph.onClick, graph.onDoubleClick, graph.contextMenuItems, this._dataTooltip, graph, port);\n                    this._dataTooltip.setTarget(renderedPort);\n                }\n            }\n        });\n        return nodeRenderers;\n    }\n}\nexports.D3PortDiagramSVG = D3PortDiagramSVG;\nrenderer_1.D3Renderer.register(ui_base_1.UIType.PortDiagram, D3PortDiagram);\n// WEBGL STUFF\nclass D3PortDiagramPixi extends base_1.D3ConnectedGraphPixi {\n    constructor(element, renderer, parent, portDiagram) {\n        super(element, renderer, parent);\n        this._portDiagram = portDiagram;\n        this.getLinkStartXY = portDiagram.getLinkStartXY;\n        this.getLinkEndXY = portDiagram.getLinkEndXY;\n    }\n    renderNodes(stage) {\n        let self = this;\n        let graph = self._element;\n        // create graphics managers for caching\n        self._nodeGraphics = new pixi_helper_1.GraphicsManager(self._pixi);\n        if (!self._element.disablePortRendering) {\n            self._portGraphics = new pixi_helper_1.GraphicsManager(self._pixi);\n        }\n        let nodeRenderers = [];\n        graph.nodes.forEach(function (node) {\n            // initialize node info\n            let nodeRenderer;\n            // has to happen before addNode/addPorts\n            if (graph.nodeRenderType === graph_1.NodeType.NodeRectangle ||\n                node.renderType === graph_1.NodeType.NodeRectangle) {\n                nodeRenderer = new PIXIRectangleNode(node, self._pixiHelper);\n            }\n            else {\n                nodeRenderer = new PIXISimpleNode(node);\n            }\n            self._portDiagram.addNode(nodeRenderer);\n            self._portDiagram.addPorts(nodeRenderer);\n            nodeRenderers.push(nodeRenderer);\n            if (graph.decimator && !graph.decimator(node)) {\n                return;\n            }\n            let color = parseInt(self._portDiagram.getColor(node).substring(1), 16);\n            // RENDER THE NODE\n            let nodeGraphic = nodeRenderer.renderNode({\n                color: color,\n                manager: self._nodeGraphics\n            });\n            nodeGraphic.__data__ = node;\n            nodeGraphic.renderer = nodeRenderer;\n            // add item lets us do selection\n            self._pixiHelper.addSelection(node.key, nodeGraphic);\n            self._pixiHelper.addInteractionHelper(nodeGraphic, self.getOptions(), graph.onClick, graph.onDoubleClick, graph.contextMenuItems, self.nodeHoverStart, self.hoverEnd, self._dataTooltip, graph, node, node.key);\n            // RENDER THE PORTS\n            if (!self._element.disablePortRendering) {\n                // gather all the ports for rendering\n                let nodePorts = self._portDiagram._nodePortInfo[node.key];\n                for (let portKey in nodePorts) {\n                    let port = nodePorts[portKey];\n                    let portGraphic = nodeRenderer.renderPort(port, {\n                        color: color,\n                        manager: self._portGraphics\n                    });\n                    self._pixiHelper.addSelection(node.key, portGraphic);\n                    self._pixiHelper.addSelection(node.key + port.key, portGraphic);\n                    self._pixiHelper.addInteractionHelper(portGraphic, self.getOptions(), graph.onClick, graph.onDoubleClick, graph.contextMenuItems, self.nodeHoverStart, self.hoverEnd, self._dataTooltip, graph, { def: port }, node.key);\n                }\n            }\n            // CONFIGURE HOVER/DRAG ON CONTAINER\n            let nodeContainer = nodeRenderer.getNode();\n            // the function for moving the nodes\n            let prevPos;\n            function dragStart(event) {\n                // store a reference to the data\n                // the reason for this is because of multitouch\n                // we want to track the movement of this particular touch\n                this.data = event.data;\n                this.dragging = true;\n                // itemDragging is a workaround to have d3 and pixi coexist for events\n                stage.itemDragging = true;\n                prevPos = this.data.getLocalPosition(nodeContainer.parent);\n                event.stopPropagation();\n            }\n            function dragMove(event) {\n                if (this.dragging) {\n                    self._dataTooltip.hideTooltip();\n                    let pos = this.data.getLocalPosition(nodeContainer.parent);\n                    pos.dx = pos.x - prevPos.x;\n                    pos.dy = pos.y - prevPos.y;\n                    // TODO make NodeType a class to get rid of all these if statements\n                    nodeRenderer.updatePosition(pos);\n                    self.renderLinkHelper(stage, self._renderedLinks);\n                    self._pixiHelper.render();\n                    event.stopPropagation();\n                    prevPos = pos;\n                }\n            }\n            function dragEnd() {\n                this.dragging = false;\n                // itemDragging is a workaround to have d3 and pixi coexist for events\n                stage.itemDragging = false;\n                // set the interaction data to null\n                this.data = null;\n            }\n            nodeGraphic\n                .on('mousedown', dragStart)\n                .on('touchstart', dragStart)\n                // events for drag end\n                .on('mouseup', dragEnd)\n                .on('mouseupoutside', dragEnd)\n                .on('touchend', dragEnd)\n                .on('touchendoutside', dragEnd)\n                // events for drag move\n                .on('mousemove', dragMove)\n                .on('touchmove', dragMove);\n            stage.addChild(nodeContainer);\n        });\n        return nodeRenderers;\n    }\n    _select(selection) {\n        if (selection) {\n            let items = this._pixiHelper.getSelection(selection);\n            if (items) {\n                let self = this;\n                items.forEach(function (elem, index) {\n                    // assigned this renderer when rendering the node so we\n                    // could find it later easily\n                    elem.renderer.select(selection, elem, index, self._nodeGraphics);\n                });\n            }\n            this._pixiHelper.render();\n        }\n    }\n    _unselect(selection) {\n        let items = this._pixiHelper.getSelection(selection);\n        if (items) {\n            items.forEach(function (elem, index) {\n                // assigned this renderer when rendering the node so we\n                // could fifnd it later easily\n                elem.renderer.unselect(selection, elem, index);\n            });\n            this._pixiHelper.render();\n        }\n    }\n    // cache the basic graphic structures so we can clone them\n    // vs recreating them\n    render(options) {\n        utilities_1.merge(this._options, options);\n        let self = this;\n        let graph = self._element;\n        let first = this._pixiHelper === undefined;\n        if (!first && (options.height || options.width)) {\n            this._pixi.resize(self._options.width, self._options.height);\n            this._pixiHelper.render();\n            return;\n        }\n        self._portDiagram._nodePortInfo = {};\n        let stage = self.initializeGraphArea(options);\n        let nodeRenderers = self.renderNodes(stage);\n        this._renderedLinks = self._portDiagram.createRenderedLinks();\n        self._portDiagram.layout(nodeRenderers, this._renderedLinks);\n        self.renderLinkHelper(stage, this._renderedLinks);\n        //Render the stage\n        self.configureView();\n        self._pixiHelper.render(stage);\n    }\n}\nexports.D3PortDiagramPixi = D3PortDiagramPixi;\nrenderer_1.D3Renderer.register(ui_base_1.UIType.PortDiagram, D3PortDiagram);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9jb25uZWN0ZWQtZ3JhcGgvcG9ydC50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL3NyYy9jb3JlL2Nvbm5lY3RlZC1ncmFwaC9wb3J0LnRzP2JjYzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICcuLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgSVhZVmFsdWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvY2hhcnQvc2VyaWVzLWRhdGEnO1xuaW1wb3J0IHtcbiAgICBBbGlnbm1lbnQsIElFdmVudCwgVUlFbGVtZW50LCBJT3B0aW9ucywgVUlUeXBlLCBVSVJlbmRlcmVyLCBSZWN0LCBJUmVjdFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvdWktYmFzZSc7XG5pbXBvcnQge1xuICAgIElQb3J0RGlhZ3JhbSwgSVBvcnREaWFncmFtTGluaywgSVBvcnREaWFncmFtTm9kZSwgTm9kZVR5cGVcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlL2dyYXBoJztcbmltcG9ydCB7IFVJRWxlbWVudFJlbmRlcmVyLCBEM1JlbmRlcmVyIH0gZnJvbSAnLi4vcmVuZGVyZXInO1xuaW1wb3J0IHsgYWRkQ2xpY2tIZWxwZXIsIGdldFRleHRSZWN0IH0gZnJvbSAnLi4vc3ZnLWhlbHBlcic7XG5cbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCAqIGFzIFBJWEkgZnJvbSAncGl4aS5qcyc7XG5pbXBvcnQgKiBhcyBkYWdyZSBmcm9tICdkYWdyZSc7XG5cbmltcG9ydCB7XG4gICAgSVJlbmRlcmVkRGlhZ3JhbUxpbmssXG4gICAgRDNDb25uZWN0ZWRHcmFwaFNWRyxcbiAgICBEM0Nvbm5lY3RlZEdyYXBoUGl4aSxcbiAgICBEaWFncmFtQmFzZVxufSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtcbiAgICBHcmFwaGljc01hbmFnZXIsIFBJWElIZWxwZXJcbn0gZnJvbSAnLi4vcGl4aS1oZWxwZXInO1xuaW1wb3J0IHsgdHN2UGFyc2UgfSBmcm9tICdkMyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBvcnREaWFncmFtTm9kZVJlbmRlcmVyIHtcbiAgICBkZWY/OiBJUG9ydERpYWdyYW1Ob2RlO1xuICAgIHJlbmRlcmVyPzogSU5vZGVSZW5kZXJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZVJlbmRlcmVyIGV4dGVuZHMgSVBvcnREaWFncmFtTm9kZVJlbmRlcmVyIHtcbiAgICB1cGRhdGVQb3NpdGlvbjogKHBvczogeyBkeDogbnVtYmVyLCBkeTogbnVtYmVyIH0pID0+IHZvaWQ7XG4gICAgZ2V0Tm9kZT86ICgpID0+IGFueTtcbiAgICByZW5kZXJOb2RlOiAob3B0aW9ucz86IGFueSkgPT4gYW55O1xuICAgIHJlbmRlclBvcnQ6IChwb3J0OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IGFueTtcbiAgICBjb25maWd1cmVOb2RlOiAoKSA9PiB2b2lkO1xuICAgIGdldFBvcnRBcmVhUmVjdDogKCkgPT4gSVJlY3Q7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogTk9ERSBSRU5ERVIgSEVMUEVSU1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5jbGFzcyBTVkdOb2RlIHtcbiAgICBwdWJsaWMgZGVmOiBJUG9ydERpYWdyYW1Ob2RlO1xuICAgIHByb3RlY3RlZCBfbm9kZUNvbnRhaW5lcjogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PjtcbiAgICBwcm90ZWN0ZWQgX3BvcnREaWFncmFtOiBEM1BvcnREaWFncmFtO1xuXG4gICAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKHBvczogeyBkeDogbnVtYmVyLCBkeTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWYueCArPSBwb3MuZHg7XG4gICAgICAgIHRoaXMuZGVmLnkgKz0gcG9zLmR5O1xuXG4gICAgICAgIHRoaXMuX25vZGVDb250YWluZXJcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7dGhpcy5kZWYueH0sICR7dGhpcy5kZWYueX0pYCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclBvcnQocG9ydERlZjogYW55LCBvcHRpb25zPzogYW55KTogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PiB7XG4gICAgICAgIGxldCBwb3J0ID0gdGhpcy5fbm9kZUNvbnRhaW5lclxuICAgICAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIHRoaXMuX3BvcnREaWFncmFtLmdldENsYXNzZXModGhpcy5kZWYpICsgJyAnICsgcG9ydERlZi5rZXkpXG4gICAgICAgICAgICAuY2xhc3NlZCgncG9ydCcsIHRydWUpXG4gICAgICAgICAgICAuYXR0cignY3gnLCBwb3J0RGVmLngpXG4gICAgICAgICAgICAuYXR0cignY3knLCBwb3J0RGVmLnkpXG4gICAgICAgICAgICAuYXR0cigncicsIFBPUlRfUkFESVVTKVxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnd2hpdGUnKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEpXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgdGhpcy5fcG9ydERpYWdyYW0uZ2V0Q29sb3IodGhpcy5kZWYpKTtcbiAgICAgICAgcmV0dXJuIHBvcnQ7XG4gICAgfVxufVxuXG5jbGFzcyBQSVhJTm9kZSB7XG4gICAgcHVibGljIGRlZjogSVBvcnREaWFncmFtTm9kZTtcbiAgICBwcm90ZWN0ZWQgX25vZGVDb250YWluZXI6IFBJWEkuQ29udGFpbmVyO1xuXG4gICAgcHVibGljIGluaXRpYWxpemVOb2RlKCkge1xuICAgICAgICB0aGlzLl9ub2RlQ29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXROb2RlKCk6IFBJWEkuQ29udGFpbmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVDb250YWluZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKHBvczogeyBkeDogbnVtYmVyLCBkeTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWYueCArPSBwb3MuZHg7XG4gICAgICAgIHRoaXMuZGVmLnkgKz0gcG9zLmR5O1xuXG4gICAgICAgIHRoaXMuX25vZGVDb250YWluZXIueCA9IHRoaXMuZGVmLng7XG4gICAgICAgIHRoaXMuX25vZGVDb250YWluZXIueSA9IHRoaXMuZGVmLnk7XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyUG9ydChwb3J0OiBhbnksIG9wdGlvbnM/OiBhbnkpOiBQSVhJLkNvbnRhaW5lciB7XG4gICAgICAgIGxldCBwb3J0R3JhcGhpYyA9IG9wdGlvbnMubWFuYWdlci5hZGQodGhpcy5kZWYudHlwZVswXSxcbiAgICAgICAgICAgIHRoaXMuZGVmLmtleSwgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVIsIDEsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJldCA9IG5ldyBQSVhJLkdyYXBoaWNzKCk7XG4gICAgICAgICAgICAgICAgcmV0LmJlZ2luRmlsbChvcHRpb25zLmNvbG9yKTsgLy8gd2hpdGVcbiAgICAgICAgICAgICAgICByZXQuZHJhd0NpcmNsZSgwLCAwLCBQT1JUX1JBRElVUyk7IC8vIGRyYXdDaXJjbGUoeCwgeSwgcmFkaXVzKVxuICAgICAgICAgICAgICAgIHJldC5iZWdpbkZpbGwoMHhGRkZGRkYpOyAvLyB3aGl0ZVxuICAgICAgICAgICAgICAgIHJldC5kcmF3Q2lyY2xlKDAsIDAsIFBPUlRfUkFESVVTIC0gMSk7IC8vIGRyYXdDaXJjbGUoeCwgeSwgcmFkaXVzKVxuICAgICAgICAgICAgICAgIHJldC5lbmRGaWxsKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHB1dCBwb3J0IHJlbGF0aXZlbHkgaW4gdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGUgY29udGFpbmVyXG4gICAgICAgIHBvcnRHcmFwaGljLnggPSBwb3J0LnggLSBQT1JUX1JBRElVUztcbiAgICAgICAgcG9ydEdyYXBoaWMueSA9IHBvcnQueSAtIFBPUlRfUkFESVVTO1xuICAgICAgICBwb3J0R3JhcGhpYy5yZW5kZXJlciA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5fbm9kZUNvbnRhaW5lci5hZGRDaGlsZChwb3J0R3JhcGhpYyk7XG4gICAgICAgIHJldHVybiBwb3J0R3JhcGhpYztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RUZW1wSXRlbXMgPSB7fTtcbiAgICBwdWJsaWMgc2VsZWN0KHNlbGVjdGlvbjogc3RyaW5nLCBlbGVtOiBQSVhJLlNwcml0ZSwgaW5kZXg6IG51bWJlcixcbiAgICAgICAgZ3JhcGhpY3NNZ3I6IEdyYXBoaWNzTWFuYWdlcikge1xuICAgICAgICBsZXQgY3JlYXRlU2VsZWN0aW9uQm9yZGVyID0gZnVuY3Rpb24gKGNpcmNsZTogUElYSS5TcHJpdGUpIHtcbiAgICAgICAgICAgIGxldCBjaXJjbGVSYWRpdXMgPSBjaXJjbGUud2lkdGggLyAyO1xuICAgICAgICAgICAgbGV0IHJhZGl1cyA9IGNpcmNsZVJhZGl1cyArIFNUUk9LRV9XSURUSDtcbiAgICAgICAgICAgIGxldCBib3JkZXIgPSBncmFwaGljc01nci5hZGQoc2VsZWN0aW9uICsgcmFkaXVzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiArIHJhZGl1cywgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVIsIDEsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGl4aUNpcmNsZSA9IG5ldyBQSVhJLkdyYXBoaWNzKCk7XG4gICAgICAgICAgICAgICAgICAgIHBpeGlDaXJjbGUuYmVnaW5GaWxsKDB4RkZGRkZGKTtcbiAgICAgICAgICAgICAgICAgICAgcGl4aUNpcmNsZS5kcmF3Q2lyY2xlKDAsIDAsIHJhZGl1cyk7IC8vIGRyYXdDaXJjbGUoeCwgeSwgcmFkaXVzKVxuICAgICAgICAgICAgICAgICAgICBwaXhpQ2lyY2xlLmVuZEZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpeGlDaXJjbGU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGJvcmRlci54ID0gY2lyY2xlLnggKyBjaXJjbGVSYWRpdXMgLSByYWRpdXM7XG4gICAgICAgICAgICBib3JkZXIueSA9IGNpcmNsZS55ICsgY2lyY2xlUmFkaXVzIC0gcmFkaXVzO1xuICAgICAgICAgICAgYm9yZGVyLnRpbnQgPSBTRUxFQ1RJT05fQ09MT1I7XG4gICAgICAgICAgICBib3JkZXIuX19kYXRhX18gPSAoY2lyY2xlIGFzIGFueSkuX19kYXRhX187XG5cbiAgICAgICAgICAgIHJldHVybiBib3JkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYm9yZGVyID0gY3JlYXRlU2VsZWN0aW9uQm9yZGVyKGVsZW0pO1xuICAgICAgICB0aGlzLl9zZWxlY3RUZW1wSXRlbXNbYCR7c2VsZWN0aW9ufVNlbGVjdCR7aW5kZXh9YF0gPSBib3JkZXI7XG4gICAgICAgIGVsZW0ucGFyZW50LmFkZENoaWxkQXQoYm9yZGVyLCAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdW5zZWxlY3Qoc2VsZWN0aW9uOiBzdHJpbmcsIGVsZW06IFBJWEkuU3ByaXRlLCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGxldCBib3JkZXIgPSB0aGlzLl9zZWxlY3RUZW1wSXRlbXNbYCR7c2VsZWN0aW9ufVNlbGVjdCR7aW5kZXh9YF07XG4gICAgICAgIGJvcmRlci5wYXJlbnQucmVtb3ZlQ2hpbGQoYm9yZGVyKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdFRlbXBJdGVtc1tgJHtzZWxlY3Rpb259U2VsZWN0YF07XG4gICAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIE5PREUgQ09ORklHVVJBVElPTiBIRUxQRVJTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xubGV0IFJBRElVUyA9IDI1O1xubGV0IFBPUlRfUkFESVVTID0gMztcbmxldCBTVFJPS0VfV0lEVEggPSAzO1xubGV0IFNFTEVDVElPTl9DT0xPUiA9IDE1OTIxNzM3O1xubGV0IFBBRERJTkcgPSAzO1xubGV0IHNpbXBsZVBvcnRBcmVhID0geyB4OiAtUkFESVVTLCB5OiAtUkFESVVTLCBoZWlnaHQ6IFJBRElVUyAqIDIsIHdpZHRoOiBSQURJVVMgKiAyIH07XG5jbGFzcyBTaW1wbGVOb2RlIGltcGxlbWVudHMgSVBvcnREaWFncmFtTm9kZVJlbmRlcmVyIHtcbiAgICBwdWJsaWMgZGVmOiBJUG9ydERpYWdyYW1Ob2RlO1xuICAgIHByb3RlY3RlZCBfc2VsZWN0VGVtcEl0ZW1zID0ge31cblxuICAgIGNvbnN0cnVjdG9yKG5vZGU6IElQb3J0RGlhZ3JhbU5vZGUpIHtcbiAgICAgICAgdGhpcy5kZWYgPSBub2RlO1xuICAgIH1cbiAgICBwdWJsaWMgY29uZmlndXJlTm9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWYuaGVpZ2h0ID0gNTA7XG4gICAgICAgIHRoaXMuZGVmLndpZHRoID0gNTA7XG4gICAgfVxuICAgIHB1YmxpYyBnZXRQb3J0QXJlYVJlY3QoKTogSVJlY3Qge1xuICAgICAgICByZXR1cm4gc2ltcGxlUG9ydEFyZWE7XG4gICAgfVxufVxuXG5jbGFzcyBSZWN0YW5nbGVOb2RlIGltcGxlbWVudHMgSVBvcnREaWFncmFtTm9kZVJlbmRlcmVyIHtcbiAgICBwcm90ZWN0ZWQgX3BvcnRSZWN0OiBJUmVjdDtcblxuICAgIHB1YmxpYyBkZWY6IElQb3J0RGlhZ3JhbU5vZGU7XG4gICAgcHVibGljIHJlbmRlcmVyOiBJTm9kZVJlbmRlcmVyO1xuXG4gICAgY29uc3RydWN0b3Iobm9kZTogSVBvcnREaWFncmFtTm9kZSkge1xuICAgICAgICB0aGlzLmRlZiA9IG5vZGU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFhZT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4geyB4OiAtdGhpcy5kZWYud2lkdGggKiAuNSwgeTogLXRoaXMuZGVmLmhlaWdodCAqIC41IH07XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmLnR5cGUubGVuZ3RoID4gMCA/IHRoaXMuZGVmLnR5cGVbMF0gOiAnTm9uZSc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRpdGxlVGV4dFJlY3QoKTogSVJlY3Qge1xuICAgICAgICB0aHJvdyBcIkVycm9yIHBsZWFzZSBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvblwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVOb2RlKCk6IHZvaWQge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuZGVmO1xuICAgICAgICBsZXQgdG9wUG9ydHMgPSBub2RlLnBvcnRzLnRvcCA/IG5vZGUucG9ydHMudG9wLmxlbmd0aCA6IDA7XG4gICAgICAgIGxldCBib3R0b21Qb3J0cyA9IG5vZGUucG9ydHMuYm90dG9tID8gbm9kZS5wb3J0cy5ib3R0b20ubGVuZ3RoIDogMDtcbiAgICAgICAgbGV0IGxlZnRQb3J0cyA9IG5vZGUucG9ydHMubGVmdCA/IG5vZGUucG9ydHMubGVmdC5sZW5ndGggOiAwO1xuICAgICAgICBsZXQgcmlnaHRQb3J0cyA9IG5vZGUucG9ydHMucmlnaHQgPyBub2RlLnBvcnRzLnJpZ2h0Lmxlbmd0aCA6IDA7XG5cbiAgICAgICAgbGV0IHBvcnRTaXplID0gMTU7XG5cbiAgICAgICAgbGV0IHRpdGxlVGV4dFJlY3QgPSB0aGlzLmdldFRpdGxlVGV4dFJlY3QoKTtcblxuICAgICAgICBsZXQgdGl0bGVIZWlnaHQgPSB0aXRsZVRleHRSZWN0LmhlaWdodCArIFBBRERJTkcgKiAyO1xuICAgICAgICBsZXQgbWluSGVpZ2h0ID0gdGl0bGVIZWlnaHQgKyBQQURESU5HICogMiArIDUwO1xuICAgICAgICBsZXQgbWluV2lkdGggPSB0aXRsZVRleHRSZWN0LndpZHRoICsgUEFERElORyAqIDI7XG5cbiAgICAgICAgbGV0IHhPZmZzZXQgPSAtbWluV2lkdGggKiAuNTtcbiAgICAgICAgbGV0IHlPZmZzZXQgPSAtbWluSGVpZ2h0ICogLjU7XG5cbiAgICAgICAgdGhpcy5fcG9ydFJlY3QgPSBuZXcgUmVjdCh4T2Zmc2V0LCB0aXRsZUhlaWdodCArIHlPZmZzZXQsXG4gICAgICAgICAgICBNYXRoLm1heChNYXRoLm1heCh0b3BQb3J0cywgYm90dG9tUG9ydHMpICogcG9ydFNpemUsIG1pbldpZHRoKSxcbiAgICAgICAgICAgIE1hdGgubWF4KE1hdGgubWF4KGxlZnRQb3J0cywgcmlnaHRQb3J0cykgKiBwb3J0U2l6ZSwgbWluSGVpZ2h0KSk7XG5cbiAgICAgICAgdGhpcy5kZWYuaGVpZ2h0ID0gdGl0bGVIZWlnaHQgKyB0aGlzLl9wb3J0UmVjdC5oZWlnaHQ7XG4gICAgICAgIHRoaXMuZGVmLndpZHRoID0gdGhpcy5fcG9ydFJlY3Qud2lkdGg7XG4gICAgfVxuICAgIHB1YmxpYyBnZXRQb3J0QXJlYVJlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3J0UmVjdDtcbiAgICB9XG59XG5cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBOT0RFIElNUExFTUVOVEFUSU9OU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmNsYXNzIFNWR1NpbXBsZU5vZGUgZXh0ZW5kcyBTaW1wbGVOb2RlIGltcGxlbWVudHMgSU5vZGVSZW5kZXJlciB7XG4gICAgcHJvdGVjdGVkIF9ub2RlQ29udGFpbmVyOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+O1xuICAgIHByb3RlY3RlZCBfcG9ydERpYWdyYW06IEQzUG9ydERpYWdyYW07XG5cbiAgICBwdWJsaWMgdXBkYXRlUG9zaXRpb246IChwb3M6IHsgZHg6IG51bWJlciwgZHk6IG51bWJlciB9KSA9PiB2b2lkO1xuICAgIHB1YmxpYyByZW5kZXJQb3J0OiAocG9ydERlZjogYW55LCBvcHRpb25zPzogYW55KSA9PiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+O1xuXG4gICAgY29uc3RydWN0b3Iobm9kZTogSVBvcnREaWFncmFtTm9kZSxcbiAgICAgICAgcG9ydERpYWdyYW06IEQzUG9ydERpYWdyYW0pIHtcblxuICAgICAgICBzdXBlcihub2RlKTtcbiAgICAgICAgdGhpcy5fcG9ydERpYWdyYW0gPSBwb3J0RGlhZ3JhbTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uID0gU1ZHTm9kZS5wcm90b3R5cGUudXBkYXRlUG9zaXRpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZW5kZXJQb3J0ID0gU1ZHTm9kZS5wcm90b3R5cGUucmVuZGVyUG9ydC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXJOb2RlKG9wdGlvbnM/OiBhbnkpOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+IHtcbiAgICAgICAgdGhpcy5fbm9kZUNvbnRhaW5lciA9IG9wdGlvbnMuZ3JvdXAuYXBwZW5kKCdnJyk7XG4gICAgICAgIHRoaXMuX25vZGVDb250YWluZXJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCB0aGlzLl9wb3J0RGlhZ3JhbS5nZXRDbGFzc2VzKHRoaXMuZGVmKSlcbiAgICAgICAgICAgIC5jbGFzc2VkKCdub2RlJywgdHJ1ZSlcbiAgICAgICAgICAgIC5hdHRyKCdyJywgUkFESVVTKVxuICAgICAgICAgICAgLmF0dHIoJ2N4JywgMClcbiAgICAgICAgICAgIC5hdHRyKCdjeScsIDApXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsIHRoaXMuX3BvcnREaWFncmFtLmdldENvbG9yKHRoaXMuZGVmKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGVmLnggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbih7IGR4OiAwLCBkeTogMCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZUNvbnRhaW5lcjtcbiAgICB9XG59XG5cbmNsYXNzIFBJWElTaW1wbGVOb2RlIGV4dGVuZHMgU2ltcGxlTm9kZSBpbXBsZW1lbnRzIElOb2RlUmVuZGVyZXIge1xuICAgIHByaXZhdGUgX25vZGVDb250YWluZXI6IFBJWEkuQ29udGFpbmVyO1xuXG4gICAgcHVibGljIHVwZGF0ZVBvc2l0aW9uOiAocG9zOiB7IGR4OiBudW1iZXIsIGR5OiBudW1iZXIgfSkgPT4gdm9pZDtcbiAgICBwdWJsaWMgcmVuZGVyUG9ydDogKHBvcnREZWY6IGFueSwgb3B0aW9ucz86IGFueSkgPT4gUElYSS5Db250YWluZXI7XG4gICAgcHVibGljIGluaXRpYWxpemVOb2RlOiAoKSA9PiBQSVhJLkNvbnRhaW5lcjtcbiAgICBwdWJsaWMgZ2V0Tm9kZTogKCkgPT4gUElYSS5Db250YWluZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihub2RlOiBJUG9ydERpYWdyYW1Ob2RlKSB7XG4gICAgICAgIHN1cGVyKG5vZGUpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU5vZGUgPSBQSVhJTm9kZS5wcm90b3R5cGUuaW5pdGlhbGl6ZU5vZGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXROb2RlID0gUElYSU5vZGUucHJvdG90eXBlLmdldE5vZGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbiA9IFBJWElOb2RlLnByb3RvdHlwZS51cGRhdGVQb3NpdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlbmRlclBvcnQgPSBQSVhJTm9kZS5wcm90b3R5cGUucmVuZGVyUG9ydC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXJOb2RlKG9wdGlvbnM/OiBhbnkpOiBQSVhJLkNvbnRhaW5lciB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU5vZGUoKTtcbiAgICAgICAgbGV0IG5vZGUgPSBvcHRpb25zLm1hbmFnZXIuYWRkKHRoaXMuZGVmLnR5cGVbMF0sXG4gICAgICAgICAgICB0aGlzLmRlZi5rZXksIFBJWEkuU0NBTEVfTU9ERVMuTElORUFSLCA0LFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCByZXQgPSBuZXcgUElYSS5HcmFwaGljcygpO1xuICAgICAgICAgICAgICAgIHJldC5iZWdpbkZpbGwoMHhGRkZGRkYpO1xuICAgICAgICAgICAgICAgIHJldC5kcmF3Q2lyY2xlKC1SQURJVVMsIC1SQURJVVMsIFJBRElVUyk7IC8vIGRyYXdDaXJjbGUoeCwgeSwgcmFkaXVzKVxuICAgICAgICAgICAgICAgIHJldC5iZWdpbkZpbGwob3B0aW9ucy5jb2xvcik7XG4gICAgICAgICAgICAgICAgcmV0LmRyYXdDaXJjbGUoLVJBRElVUywgLVJBRElVUywgUkFESVVTIC0gMSk7IC8vIGRyYXdDaXJjbGUoeCwgeSwgcmFkaXVzKVxuICAgICAgICAgICAgICAgIHJldC5lbmRGaWxsKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBub2RlLnggPSAtUkFESVVTO1xuICAgICAgICBub2RlLnkgPSAtUkFESVVTO1xuICAgICAgICB0aGlzLl9ub2RlQ29udGFpbmVyLmFkZENoaWxkKG5vZGUpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlZi54ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oeyBkeDogMCwgZHk6IDAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgc2VsZWN0KHNlbGVjdGlvbjogc3RyaW5nLCBlbGVtOiBQSVhJLlNwcml0ZSwgaW5kZXg6IG51bWJlcixcbiAgICAgICAgZ3JhcGhpY3NNZ3I6IEdyYXBoaWNzTWFuYWdlcikge1xuICAgICAgICBjb25zb2xlLmxvZygnbmVlZCBub2RlIHNlbGVjdCcpXG5cbiAgICAgICAgbGV0IGNyZWF0ZVNlbGVjdGlvbkJvcmRlciA9IGZ1bmN0aW9uIChjaXJjbGU6IFBJWEkuU3ByaXRlKSB7XG4gICAgICAgICAgICBsZXQgY2lyY2xlUmFkaXVzID0gY2lyY2xlLndpZHRoIC8gMjtcbiAgICAgICAgICAgIGxldCByYWRpdXMgPSBjaXJjbGVSYWRpdXMgKyBTVFJPS0VfV0lEVEg7XG4gICAgICAgICAgICBsZXQgYm9yZGVyID0gZ3JhcGhpY3NNZ3IuYWRkKHNlbGVjdGlvbiArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24gKyByYWRpdXMsIFBJWEkuU0NBTEVfTU9ERVMuTElORUFSLCAxLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBpeGlDaXJjbGUgPSBuZXcgUElYSS5HcmFwaGljcygpO1xuICAgICAgICAgICAgICAgICAgICBwaXhpQ2lyY2xlLmJlZ2luRmlsbCgweEZGRkZGRik7XG4gICAgICAgICAgICAgICAgICAgIHBpeGlDaXJjbGUuZHJhd0NpcmNsZSgwLCAwLCByYWRpdXMpOyAvLyBkcmF3Q2lyY2xlKHgsIHksIHJhZGl1cylcbiAgICAgICAgICAgICAgICAgICAgcGl4aUNpcmNsZS5lbmRGaWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwaXhpQ2lyY2xlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBib3JkZXIueCA9IGNpcmNsZS54ICsgY2lyY2xlUmFkaXVzIC0gcmFkaXVzO1xuICAgICAgICAgICAgYm9yZGVyLnkgPSBjaXJjbGUueSArIGNpcmNsZVJhZGl1cyAtIHJhZGl1cztcbiAgICAgICAgICAgIGJvcmRlci50aW50ID0gU0VMRUNUSU9OX0NPTE9SO1xuICAgICAgICAgICAgYm9yZGVyLl9fZGF0YV9fID0gKGNpcmNsZSBhcyBhbnkpLl9fZGF0YV9fO1xuXG4gICAgICAgICAgICByZXR1cm4gYm9yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJvcmRlciA9IGNyZWF0ZVNlbGVjdGlvbkJvcmRlcihlbGVtKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0VGVtcEl0ZW1zW2Ake3NlbGVjdGlvbn1TZWxlY3Qke2luZGV4fWBdID0gYm9yZGVyO1xuICAgICAgICBlbGVtLnBhcmVudC5hZGRDaGlsZEF0KGJvcmRlciwgMCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVuc2VsZWN0KHNlbGVjdGlvbjogc3RyaW5nLCBlbGVtOiBQSVhJLlNwcml0ZSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBsZXQgYm9yZGVyID0gdGhpcy5fc2VsZWN0VGVtcEl0ZW1zW2Ake3NlbGVjdGlvbn1TZWxlY3Qke2luZGV4fWBdO1xuICAgICAgICBib3JkZXIucGFyZW50LnJlbW92ZUNoaWxkKGJvcmRlcik7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3RUZW1wSXRlbXNbYCR7c2VsZWN0aW9ufVNlbGVjdCR7aW5kZXh9YF07XG4gICAgfVxufVxuXG5jbGFzcyBTVkdSZWN0YW5nbGVOb2RlIGV4dGVuZHMgUmVjdGFuZ2xlTm9kZSBpbXBsZW1lbnRzIElOb2RlUmVuZGVyZXIge1xuICAgIHByb3RlY3RlZCBfcG9ydERpYWdyYW06IEQzUG9ydERpYWdyYW07XG4gICAgcHJvdGVjdGVkIF9ub2RlQ29udGFpbmVyOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+O1xuICAgIHByb3RlY3RlZCBfc3ZnOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+O1xuXG4gICAgcHVibGljIHVwZGF0ZVBvc2l0aW9uOiAocG9zOiB7IGR4OiBudW1iZXIsIGR5OiBudW1iZXIgfSkgPT4gdm9pZDtcbiAgICBwdWJsaWMgcmVuZGVyUG9ydDogKHBvcnREZWY6IGFueSwgb3B0aW9ucz86IGFueSkgPT4gZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PjtcblxuICAgIGNvbnN0cnVjdG9yKG5vZGU6IElQb3J0RGlhZ3JhbU5vZGUsXG4gICAgICAgIHBvcnREaWFncmFtOiBEM1BvcnREaWFncmFtLFxuICAgICAgICBzdmc6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4pIHtcblxuICAgICAgICBzdXBlcihub2RlKTtcbiAgICAgICAgdGhpcy5fcG9ydERpYWdyYW0gPSBwb3J0RGlhZ3JhbTtcbiAgICAgICAgdGhpcy5fc3ZnID0gc3ZnO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24gPSBTVkdOb2RlLnByb3RvdHlwZS51cGRhdGVQb3NpdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlbmRlclBvcnQgPSBTVkdOb2RlLnByb3RvdHlwZS5yZW5kZXJQb3J0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRpdGxlVGV4dFJlY3QoKTogSVJlY3Qge1xuICAgICAgICByZXR1cm4gZ2V0VGV4dFJlY3QodGhpcy5fc3ZnLCB0aGlzLmdldFRpdGxlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXJOb2RlKG9wdGlvbnM/OiBhbnkpOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+IHtcbiAgICAgICAgdGhpcy5fbm9kZUNvbnRhaW5lciA9IG9wdGlvbnMuZ3JvdXAuYXBwZW5kKCdnJyk7XG4gICAgICAgIGxldCBub2RlQm94ID0gdGhpcy5fbm9kZUNvbnRhaW5lci5hcHBlbmQoJ3JlY3QnKTtcbiAgICAgICAgbGV0IHRpdGxlQm94ID0gdGhpcy5fbm9kZUNvbnRhaW5lci5hcHBlbmQoJ3JlY3QnKTtcbiAgICAgICAgbGV0IHRleHRSZW5kZXJlciA9IHRoaXMuX25vZGVDb250YWluZXIuYXBwZW5kKCd0ZXh0Jyk7XG5cbiAgICAgICAgbGV0IG5vZGVPZmZzZXQgPSB0aGlzLmdldFhZT2Zmc2V0KCk7XG4gICAgICAgIGxldCB4T2Zmc2V0ID0gbm9kZU9mZnNldC54O1xuICAgICAgICBsZXQgeU9mZnNldCA9IG5vZGVPZmZzZXQueTtcbiAgICAgICAgbGV0IHRleHQgPSB0aGlzLmdldFRpdGxlKCk7XG4gICAgICAgIHRleHRSZW5kZXJlclxuICAgICAgICAgICAgLnRleHQodGV4dClcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3doaXRlJylcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCAnd2hpdGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2FsaWdubWVudC1iYXNlbGluZScsICdoYW5naW5nJylcbiAgICAgICAgICAgIC5hdHRyKCd4JywgeE9mZnNldCArIFBBRERJTkcpXG4gICAgICAgICAgICAuYXR0cigneScsIHlPZmZzZXQgKyBQQURESU5HKTtcblxuICAgICAgICBub2RlQm94XG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCB0aGlzLl9wb3J0RGlhZ3JhbS5nZXRDbGFzc2VzKHRoaXMuZGVmKSlcbiAgICAgICAgICAgIC5jbGFzc2VkKCdub2RlJywgdHJ1ZSlcbiAgICAgICAgICAgIC5jbGFzc2VkKCdib3JkZXInLCB0cnVlKVxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnI0ZGRkZGRicpXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJyMwMDAwMDAnKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEpXG4gICAgICAgICAgICAuYXR0cigneCcsIHhPZmZzZXQpXG4gICAgICAgICAgICAuYXR0cigneScsIHlPZmZzZXQpXG4gICAgICAgICAgICAuYXR0cignd2lkdGgnLCB0aGlzLmRlZi53aWR0aClcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCB0aGlzLmRlZi5oZWlnaHQpXG4gICAgICAgICAgICAuYXR0cigncngnLCAzKVxuICAgICAgICAgICAgLmF0dHIoJ3J5JywgMyk7XG5cbiAgICAgICAgdGl0bGVCb3hcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIHRoaXMuX3BvcnREaWFncmFtLmdldENsYXNzZXModGhpcy5kZWYpKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ25vZGUnLCB0cnVlKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ3RpdGxlLWJveCcsIHRydWUpXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsIHRoaXMuX3BvcnREaWFncmFtLmdldENvbG9yKHRoaXMuZGVmKSlcbiAgICAgICAgICAgIC5hdHRyKCd4JywgeE9mZnNldClcbiAgICAgICAgICAgIC5hdHRyKCd5JywgeU9mZnNldClcbiAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIHRoaXMuZGVmLndpZHRoKVxuICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDIwKVxuICAgICAgICAgICAgLmF0dHIoJ3J4JywgMylcbiAgICAgICAgICAgIC5hdHRyKCdyeScsIDMpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlZi54ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oeyBkeDogMCwgZHk6IDAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVDb250YWluZXI7XG4gICAgfVxufVxuXG5jbGFzcyBQSVhJUmVjdGFuZ2xlTm9kZSBleHRlbmRzIFJlY3RhbmdsZU5vZGUgaW1wbGVtZW50cyBJTm9kZVJlbmRlcmVyIHtcbiAgICBwcml2YXRlIF9ub2RlQ29udGFpbmVyOiBQSVhJLkNvbnRhaW5lcjtcbiAgICBwcml2YXRlIF9waXhpSGVscGVyOiBQSVhJSGVscGVyO1xuICAgIHByaXZhdGUgX3RpdGxlVGV4dDogUElYSS5UZXh0O1xuICAgIHByaXZhdGUgX3NlbGVjdFRlbXBJdGVtcyA9IHt9XG5cbiAgICBwdWJsaWMgdXBkYXRlUG9zaXRpb246IChwb3M6IHsgZHg6IG51bWJlciwgZHk6IG51bWJlciB9KSA9PiB2b2lkO1xuICAgIHB1YmxpYyByZW5kZXJQb3J0OiAocG9ydERlZjogYW55LCBvcHRpb25zPzogYW55KSA9PiBQSVhJLkNvbnRhaW5lcjtcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZU5vZGU6ICgpID0+IHZvaWQ7XG4gICAgcHVibGljIGdldE5vZGU6ICgpID0+IFBJWEkuQ29udGFpbmVyO1xuXG4gICAgY29uc3RydWN0b3Iobm9kZTogSVBvcnREaWFncmFtTm9kZSwgcGl4aUhlbHBlcjogUElYSUhlbHBlcikge1xuICAgICAgICBzdXBlcihub2RlKTtcbiAgICAgICAgdGhpcy5fcGl4aUhlbHBlciA9IHBpeGlIZWxwZXI7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplTm9kZSA9IFBJWElOb2RlLnByb3RvdHlwZS5pbml0aWFsaXplTm9kZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE5vZGUgPSBQSVhJTm9kZS5wcm90b3R5cGUuZ2V0Tm9kZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uID0gUElYSU5vZGUucHJvdG90eXBlLnVwZGF0ZVBvc2l0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVuZGVyUG9ydCA9IFBJWElOb2RlLnByb3RvdHlwZS5yZW5kZXJQb3J0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRpdGxlVGV4dFJlY3QoKTogSVJlY3Qge1xuICAgICAgICBsZXQgdGV4dCA9IHRoaXMuZ2V0VGl0bGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpeGlIZWxwZXIucmVuZGVyVGV4dCh0ZXh0LFxuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMuX3BpeGlIZWxwZXIuZ2V0UmVuZGVyZXIoKS52aWV3LnBhcmVudE5vZGUpLCAweEZGRkZGRik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlck5vZGUob3B0aW9ucz86IGFueSk6IFBJWEkuQ29udGFpbmVyIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTm9kZSgpO1xuXG4gICAgICAgIGxldCBpZCA9IGAke3RoaXMuZGVmLnR5cGVbMF19SCR7dGhpcy5kZWYuaGVpZ2h0fVcke3RoaXMuZGVmLndpZHRofWA7XG4gICAgICAgIGlkICs9IHRoaXMuZGVmLnBvcnRzLnRvcCA/IGBUJHt0aGlzLmRlZi5wb3J0cy50b3AubGVuZ3RofWAgOiAnJztcbiAgICAgICAgaWQgKz0gdGhpcy5kZWYucG9ydHMubGVmdCA/IGBMJHt0aGlzLmRlZi5wb3J0cy5sZWZ0Lmxlbmd0aH1gIDogJyc7XG4gICAgICAgIGlkICs9IHRoaXMuZGVmLnBvcnRzLnJpZ2h0ID8gYFIke3RoaXMuZGVmLnBvcnRzLnJpZ2h0Lmxlbmd0aH1gIDogJyc7XG4gICAgICAgIGlkICs9IHRoaXMuZGVmLnBvcnRzLmJvdHRvbSA/IGBCJHt0aGlzLmRlZi5wb3J0cy5ib3R0b20ubGVuZ3RofWAgOiAnJztcbiAgICAgICAgbGV0IG5vZGUgPSBvcHRpb25zLm1hbmFnZXIuYWRkKGlkLCB0aGlzLmRlZi5rZXksXG4gICAgICAgICAgICBQSVhJLlNDQUxFX01PREVTLkxJTkVBUiwgMSwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgLy8gYWRqdXN0IHRoZSB0ZXh0IHRvIHRoZSByaWdodCBzcG90XG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSB0aGlzLmdldFRpdGxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGl0bGVUZXh0ID0gdGhpcy5fcGl4aUhlbHBlci5yZW5kZXJUZXh0KHRleHQsXG4gICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzLl9waXhpSGVscGVyLmdldFJlbmRlcmVyKCkudmlldy5wYXJlbnROb2RlKSwgMHhGRkZGRkYpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fdGl0bGVUZXh0LnggPSBQQURESU5HO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpdGxlVGV4dC55ID0gUEFERElORztcblxuICAgICAgICAgICAgICAgIC8vIG91dGxpbmUgbm9kZVxuICAgICAgICAgICAgICAgIGxldCBncmFwaGljID0gbmV3IFBJWEkuR3JhcGhpY3MoKTtcbiAgICAgICAgICAgICAgICBncmFwaGljLmJlZ2luRmlsbCgweEZGRkZGRiwgMSk7XG4gICAgICAgICAgICAgICAgZ3JhcGhpYy5saW5lU3R5bGUoMSwgMHgwMDAwMDAsIC43KTtcbiAgICAgICAgICAgICAgICBncmFwaGljLmRyYXdSb3VuZGVkUmVjdCgwLCAwLCB0aGlzLl9wb3J0UmVjdC53aWR0aCwgdGhpcy5kZWYuaGVpZ2h0LCAzKTtcblxuICAgICAgICAgICAgICAgIC8vIGRyYXcgdGl0bGUgYm94XG4gICAgICAgICAgICAgICAgZ3JhcGhpYy5iZWdpbkZpbGwob3B0aW9ucy5jb2xvciwgMSk7XG4gICAgICAgICAgICAgICAgZ3JhcGhpYy5kcmF3Um91bmRlZFJlY3QoMCwgMCwgdGhpcy5fcG9ydFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpdGxlVGV4dC5oZWlnaHQgKyBQQURESU5HICogMiwgMyk7XG5cbiAgICAgICAgICAgICAgICBncmFwaGljLmFkZENoaWxkKHRoaXMuX3RpdGxlVGV4dCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpYztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBub2RlT2Zmc2V0ID0gdGhpcy5nZXRYWU9mZnNldCgpO1xuICAgICAgICBub2RlLnggPSBub2RlT2Zmc2V0Lng7XG4gICAgICAgIG5vZGUueSA9IG5vZGVPZmZzZXQueTtcblxuICAgICAgICB0aGlzLl9ub2RlQ29udGFpbmVyLmFkZENoaWxkKG5vZGUpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlZi54ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oeyBkeDogMCwgZHk6IDAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdChzZWxlY3Rpb246IHN0cmluZywgZWxlbTogUElYSS5TcHJpdGUsIGluZGV4OiBudW1iZXIsXG4gICAgICAgIGdyYXBoaWNzTWdyOiBHcmFwaGljc01hbmFnZXIpIHtcbiAgICAgICAgLy8gb3V0bGluZSBub2RlXG4gICAgICAgIGxldCBib3JkZXIgPSBuZXcgUElYSS5HcmFwaGljcygpO1xuICAgICAgICBib3JkZXIubGluZVN0eWxlKFNUUk9LRV9XSURUSCAqIDIsIFNFTEVDVElPTl9DT0xPUik7XG4gICAgICAgIGJvcmRlci5kcmF3Um91bmRlZFJlY3QoMCwgMCwgdGhpcy5fcG9ydFJlY3Qud2lkdGgsXG4gICAgICAgICAgICB0aGlzLmRlZi5oZWlnaHQsIDMpO1xuXG4gICAgICAgIGxldCBub2RlT2Zmc2V0ID0gdGhpcy5nZXRYWU9mZnNldCgpO1xuICAgICAgICBib3JkZXIueCA9IG5vZGVPZmZzZXQueDtcbiAgICAgICAgYm9yZGVyLnkgPSBub2RlT2Zmc2V0Lnk7XG5cbiAgICAgICAgdGhpcy5fbm9kZUNvbnRhaW5lci5hZGRDaGlsZEF0KGJvcmRlciwgMCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdFRlbXBJdGVtc1tgJHtzZWxlY3Rpb259U2VsZWN0JHtpbmRleH1gXSA9IGJvcmRlcjtcbiAgICAgICAgZWxlbS5wYXJlbnQuYWRkQ2hpbGRBdChib3JkZXIsIDApO1xuICAgIH1cblxuICAgIHB1YmxpYyB1bnNlbGVjdChzZWxlY3Rpb246IHN0cmluZywgZWxlbTogUElYSS5TcHJpdGUsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGJvcmRlciA9IHRoaXMuX3NlbGVjdFRlbXBJdGVtc1tgJHtzZWxlY3Rpb259U2VsZWN0JHtpbmRleH1gXTtcbiAgICAgICAgYm9yZGVyLnBhcmVudC5yZW1vdmVDaGlsZChib3JkZXIpO1xuICAgICAgICBkZWxldGUgdGhpcy5fc2VsZWN0VGVtcEl0ZW1zW2Ake3NlbGVjdGlvbn1TZWxlY3Qke2luZGV4fWBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEQzUG9ydERpYWdyYW0gZXh0ZW5kcyBVSUVsZW1lbnRSZW5kZXJlciB7XG4gICAgX3JlbmRlcmVyTWFuYWdlcjogVUlSZW5kZXJlcjtcbiAgICBfcmVuZGVyZXI6IGFueTtcbiAgICBfcGFyZW50OiBhbnk7XG4gICAgX25vZGVzOiBhbnk7XG4gICAgX3JlcXVpcmVzTGF5b3V0OiBib29sZWFuO1xuICAgIF9yZW5kZXJlZE5vZGVzOiBJTm9kZVJlbmRlcmVyW107XG5cbiAgICAvKiogZ2V0IHRoZSB4eSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIGxpbmsgKi9cbiAgICBnZXRMaW5rU3RhcnRYWTogKGxpbms6IElSZW5kZXJlZERpYWdyYW1MaW5rKSA9PiBJWFlWYWx1ZTtcbiAgICAvKiogZ2V0IHRoZSB4eSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBsaW5rICovXG4gICAgZ2V0TGlua0VuZFhZOiAobGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmspID0+IElYWVZhbHVlO1xuXG4gICAgLyoqIGNhY2hlIHN0dWZmIGZvciBsYXRlciwgcG9ydE1hcCBhbGxvd3MgbGlua3MgdG8gZmluZCB0aGUgcmlnaHRcbiAgICAgKiBwb3J0IHRvIGF0dGFjaGVkIHRvIGJ5IHRvL2Zyb20uICBUaGUgcG9ydHMgYXJyYXkgaXMganVzdCBmb3IgcmVuZGVyaW5nIHF1aWNrbHlcbiAgICAgKi9cbiAgICBwdWJsaWMgX25vZGVQb3J0SW5mbzoge1xuICAgICAgICBbaW5kZXg6IHN0cmluZ106IHtcbiAgICAgICAgICAgIFtpbmRleDogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgIGtleTogYW55LCBpbmRleDogbnVtYmVyLCBhbGlnbm1lbnQ6IEFsaWdubWVudCwgeDogbnVtYmVyLCB5OiBudW1iZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfSA9IHt9O1xuICAgIHByb3RlY3RlZCBfb3B0aW9uczogSU9wdGlvbnMgPSB7fTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFVJRWxlbWVudCwgcmVuZGVyZXI6IFVJUmVuZGVyZXIsXG4gICAgICAgIHBhcmVudDogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55Pikge1xuXG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQgYXMgSVBvcnREaWFncmFtO1xuICAgICAgICB0aGlzLl9yZW5kZXJlck1hbmFnZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLl9ub2RlcyA9IHt9O1xuICAgICAgICB0aGlzLl9yZXF1aXJlc0xheW91dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZE5vZGVzID0gW107XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuZ2V0TGlua1N0YXJ0WFkgPSBmdW5jdGlvbiAobGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmspOiBJWFlWYWx1ZSB7XG4gICAgICAgICAgICBsZXQgbm9kZURlZiA9IHNlbGYuX25vZGVzW2xpbmsuZGVmLmZyb20gYXMgc3RyaW5nXSBhcyBJUG9ydERpYWdyYW1Ob2RlO1xuICAgICAgICAgICAgbGV0IGxpbmtEZWYgPSBsaW5rLmRlZiBhcyBJUG9ydERpYWdyYW1MaW5rO1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IHNlbGYuX25vZGVQb3J0SW5mb1tub2RlRGVmLmtleV1bbGlua0RlZi5mcm9tUG9ydCBhcyBzdHJpbmddO1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogbm9kZURlZi54ICsgb2Zmc2V0LngsIHk6IG5vZGVEZWYueSArIG9mZnNldC55IH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldExpbmtFbmRYWSA9IGZ1bmN0aW9uIChsaW5rOiBJUmVuZGVyZWREaWFncmFtTGluayk6IElYWVZhbHVlIHtcbiAgICAgICAgICAgIGxldCBub2RlRGVmID0gc2VsZi5fbm9kZXNbbGluay5kZWYudG8gYXMgc3RyaW5nXSBhcyBJUG9ydERpYWdyYW1Ob2RlO1xuICAgICAgICAgICAgbGV0IGxpbmtEZWYgPSBsaW5rLmRlZiBhcyBJUG9ydERpYWdyYW1MaW5rO1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IHNlbGYuX25vZGVQb3J0SW5mb1tub2RlRGVmLmtleV1bbGlua0RlZi50b1BvcnQgYXMgc3RyaW5nXTtcbiAgICAgICAgICAgIHJldHVybiB7IHg6IG5vZGVEZWYueCArIG9mZnNldC54LCB5OiBub2RlRGVmLnkgKyBvZmZzZXQueSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgKCdEZXByZWNhdGVkIHNpbmNlIDEuMTQuMCBpbiBmYXZvciBvZiBmb2N1cy4gIFdpbGwgYmUgcmVtb3ZlZCBpbiAyLngnKVxuICAgICAqIGhvdmVyIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIHBhc3MgdG8gdGhlIHJlbmRlcmVyXG4gICAgICovXG4gICAgcHVibGljIGhvdmVyKGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1cyhldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYnJpbmcgYW4gaXRlbSBpbnRvIGZvY3VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIGZvY3VzIG9uXG4gICAgICovXG4gICAgcHVibGljIGZvY3VzKGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuZm9jdXMoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNlbGVjdCBhbiBpdGVtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIGZvY3VzIG9uXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdChldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNlbGVjdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGN1cnNvckNoYW5nZShldmVudDogSUV2ZW50KTogdm9pZCB7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBicnVzaCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHB1YmxpYyBicnVzaChldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmJydXNoKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE5vZGVQb3J0cyhwb3J0TGlzdDogYW55LCBub2RlOiBJTm9kZVJlbmRlcmVyLCBhbGlnbm1lbnQ6IEFsaWdubWVudCkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChwb3J0TGlzdCkge1xuICAgICAgICAgICAgbGV0IG5vZGVLZXkgPSBub2RlLmRlZi5rZXk7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX25vZGVQb3J0SW5mb1tub2RlS2V5XSkge1xuICAgICAgICAgICAgICAgIHNlbGYuX25vZGVQb3J0SW5mb1tub2RlS2V5XSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcG9ydEFyZWE6IElSZWN0ID0gbm9kZS5nZXRQb3J0QXJlYVJlY3QoKTtcblxuICAgICAgICAgICAgbGV0IHZlcnRpY2FsUG9ydFNpemUgPSBwb3J0QXJlYS5oZWlnaHQgLyBwb3J0TGlzdC5sZW5ndGg7ICAvLyBhbW91bnQgb2Ygc3BhY2UgdGhlIHBvcnQgY2FuIHRha2VcbiAgICAgICAgICAgIGxldCB2ZXJ0aWNhbFBvcnRPZmZzZXQgPSB2ZXJ0aWNhbFBvcnRTaXplICogLjU7XG5cbiAgICAgICAgICAgIGxldCBob3Jpem9udGFsUG9ydFNpemUgPSBwb3J0QXJlYS53aWR0aCAvIHBvcnRMaXN0Lmxlbmd0aDsgIC8vIGFtb3VudCBvZiBzcGFjZSB0aGUgcG9ydCBjYW4gdGFrZVxuICAgICAgICAgICAgbGV0IGhvcml6b250YWxsUG9ydE9mZnNldCA9IGhvcml6b250YWxQb3J0U2l6ZSAqIC41O1xuXG4gICAgICAgICAgICBsZXQgbm9kZVBvcnRNYXAgPSBzZWxmLl9ub2RlUG9ydEluZm9bbm9kZUtleV07XG4gICAgICAgICAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlRvcDpcbiAgICAgICAgICAgICAgICAgICAgcG9ydExpc3QuZm9yRWFjaChmdW5jdGlvbiAocG9ydDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IHBvcnRBcmVhLnggKyBob3Jpem9udGFsbFBvcnRPZmZzZXQgKyBob3Jpem9udGFsUG9ydFNpemUgKiBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVQb3J0TWFwW3BvcnQua2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBrZXk6IHBvcnQua2V5LCBpbmRleDogaW5kZXgsIGFsaWdubWVudDogYWxpZ25tZW50LCB4OiB4LCB5OiAwIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5Cb3R0b206XG4gICAgICAgICAgICAgICAgICAgIHBvcnRMaXN0LmZvckVhY2goZnVuY3Rpb24gKHBvcnQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBwb3J0QXJlYS54ICsgaG9yaXpvbnRhbGxQb3J0T2Zmc2V0ICsgaG9yaXpvbnRhbFBvcnRTaXplICogaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlUG9ydE1hcFtwb3J0LmtleV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBwb3J0LmtleSwgaW5kZXg6IGluZGV4LCBhbGlnbm1lbnQ6IGFsaWdubWVudCwgeDogeCwgeTogbm9kZS5kZWYuaGVpZ2h0IH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5MZWZ0OlxuICAgICAgICAgICAgICAgICAgICBwb3J0TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChwb3J0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5ID0gdmVydGljYWxQb3J0T2Zmc2V0ICsgdmVydGljYWxQb3J0U2l6ZSAqIGluZGV4ICsgcG9ydEFyZWEueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVQb3J0TWFwW3BvcnQua2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBrZXk6IHBvcnQua2V5LCBpbmRleDogaW5kZXgsIGFsaWdubWVudDogYWxpZ25tZW50LCB4OiBwb3J0QXJlYS54LCB5OiB5IH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFsaWdubWVudC5SaWdodDpcbiAgICAgICAgICAgICAgICAgICAgcG9ydExpc3QuZm9yRWFjaChmdW5jdGlvbiAocG9ydDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeSA9IHZlcnRpY2FsUG9ydE9mZnNldCArIHZlcnRpY2FsUG9ydFNpemUgKiBpbmRleCArIHBvcnRBcmVhLnk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlUG9ydE1hcFtwb3J0LmtleV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBwb3J0LmtleSwgaW5kZXg6IGluZGV4LCBhbGlnbm1lbnQ6IGFsaWdubWVudCwgeDogcG9ydEFyZWEueCArIG5vZGUuZGVmLndpZHRoLCB5OiB5IH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGRQb3J0cyhub2RlOiBJTm9kZVJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuYWRkTm9kZVBvcnRzKG5vZGUuZGVmLnBvcnRzLmxlZnQsIG5vZGUsIEFsaWdubWVudC5MZWZ0KTtcbiAgICAgICAgdGhpcy5hZGROb2RlUG9ydHMobm9kZS5kZWYucG9ydHMucmlnaHQsIG5vZGUsIEFsaWdubWVudC5SaWdodCk7XG4gICAgICAgIHRoaXMuYWRkTm9kZVBvcnRzKG5vZGUuZGVmLnBvcnRzLnRvcCwgbm9kZSwgQWxpZ25tZW50LlRvcCk7XG4gICAgICAgIHRoaXMuYWRkTm9kZVBvcnRzKG5vZGUuZGVmLnBvcnRzLmJvdHRvbSwgbm9kZSwgQWxpZ25tZW50LkJvdHRvbSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbG9yKG5vZGU6IElQb3J0RGlhZ3JhbU5vZGUpIHtcbiAgICAgICAgbGV0IGNvbG9yTWdyID0gdGhpcy5fcmVuZGVyZXJNYW5hZ2VyLmdldENvbG9yTWFuYWdlcigpO1xuICAgICAgICBsZXQgY29sb3I7XG4gICAgICAgIGlmIChjb2xvck1nci5oYXNDb2xvcihub2RlLmtleSkpIHtcbiAgICAgICAgICAgIGNvbG9yID0gY29sb3JNZ3IuZ2V0Q29sb3Iobm9kZS5rZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSkge1xuICAgICAgICAgICAgY29sb3IgPSBjb2xvck1nci5nZXRDb2xvcihub2RlLnR5cGVbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sb3IgPSBjb2xvck1nci5nZXRDb2xvcihub2RlLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGFzc2VzKG5vZGU6IElQb3J0RGlhZ3JhbU5vZGUpIHtcbiAgICAgICAgbGV0IHJldCA9IG5vZGUua2V5O1xuICAgICAgICBub2RlLnR5cGUuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgICAgcmV0ICs9ICcgJyArIHR5cGU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGROb2RlKG5vZGU6IElOb2RlUmVuZGVyZXIpIHtcbiAgICAgICAgbm9kZS5jb25maWd1cmVOb2RlKCk7XG4gICAgICAgIHRoaXMuX25vZGVzW25vZGUuZGVmLmtleV0gPSBub2RlLmRlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUmVuZGVyZWRMaW5rcygpIHtcbiAgICAgICAgbGV0IGdyYXBoID0gdGhpcy5fZWxlbWVudCBhcyBJUG9ydERpYWdyYW07XG4gICAgICAgIGxldCBsaW5rczogSVBvcnREaWFncmFtTGlua1tdID0gZ3JhcGgubGlua3M7XG5cbiAgICAgICAgbGV0IHJlbmRlcmVkTGlua3M6IElSZW5kZXJlZERpYWdyYW1MaW5rW10gPSBbXTtcblxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxpbmtzLmZvckVhY2goZnVuY3Rpb24gKGxpbmspIHtcbiAgICAgICAgICAgIGxldCBzb3VyY2VOb2RlID0gc2VsZi5fbm9kZXNbbGluay5mcm9tIGFzIHN0cmluZ107XG4gICAgICAgICAgICBsZXQgdGFyZ2V0Tm9kZSA9IHNlbGYuX25vZGVzW2xpbmsudG8gYXMgc3RyaW5nXTtcblxuICAgICAgICAgICAgaWYgKCFzb3VyY2VOb2RlIHx8ICF0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNvdXJjZVBvcnQgPSBzZWxmLl9ub2RlUG9ydEluZm9bc291cmNlTm9kZS5rZXldW2xpbmsuZnJvbVBvcnRdO1xuICAgICAgICAgICAgbGV0IHRhcmdldFBvcnQgPSBzZWxmLl9ub2RlUG9ydEluZm9bdGFyZ2V0Tm9kZS5rZXldW2xpbmsudG9Qb3J0XTtcblxuICAgICAgICAgICAgbGV0IHJlbmRlcmVkTGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmsgPSB7XG4gICAgICAgICAgICAgICAgZGVmOiBsaW5rLFxuICAgICAgICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICBub2RlOiBzb3VyY2VOb2RlLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IHNvdXJjZVBvcnQuYWxpZ25tZW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogdGFyZ2V0Tm9kZSxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiB0YXJnZXRQb3J0LmFsaWdubWVudFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVuZGVyZWRMaW5rcy5wdXNoKHJlbmRlcmVkTGluayk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVuZGVyZWRMaW5rcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbGF5b3V0KG5vZGVzOiBJTm9kZVJlbmRlcmVyW10sIGxpbmtzOiBJUmVuZGVyZWREaWFncmFtTGlua1tdKSB7XG4gICAgICAgIGxldCBncmFwaCA9IHRoaXMuX2VsZW1lbnQgYXMgSVBvcnREaWFncmFtO1xuICAgICAgICBsZXQgcmVxdWlyZXNMYXlvdXQgPSBncmFwaC5ub2RlcyAmJiBncmFwaC5ub2Rlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBncmFwaC5ub2Rlc1swXS54ID09PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHJlcXVpcmVzTGF5b3V0KSB7XG4gICAgICAgICAgICB2YXIgZyA9IG5ldyBkYWdyZS5ncmFwaGxpYi5HcmFwaCgpO1xuICAgICAgICAgICAgZy5zZXRHcmFwaCh7IHJhbmtkaXI6ICdMUicgfSk7XG4gICAgICAgICAgICBnLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24gKCkgeyByZXR1cm4ge307IH0pO1xuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZTogSU5vZGVSZW5kZXJlcikgPT4ge1xuICAgICAgICAgICAgICAgIChub2RlLmRlZiBhcyBhbnkpWydsYWJlbCddID0gbm9kZS5kZWYua2V5O1xuICAgICAgICAgICAgICAgIGcuc2V0Tm9kZShub2RlLmRlZi5rZXksIG5vZGUuZGVmKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGlua3MuZm9yRWFjaCgobGluazogSVJlbmRlcmVkRGlhZ3JhbUxpbmspID0+IHtcbiAgICAgICAgICAgICAgICBnLnNldEVkZ2UobGluay5kZWYuZnJvbSBhcyBzdHJpbmcsIGxpbmsuZGVmLnRvIGFzIHN0cmluZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhZ3JlLmxheW91dChnKTtcblxuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZTogSU5vZGVSZW5kZXJlcikgPT4ge1xuICAgICAgICAgICAgICAgIG5vZGUudXBkYXRlUG9zaXRpb24oeyBkeDogMCwgZHk6IDAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgcmVuZGVyKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIG1lcmdlKHRoaXMuX29wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmICghdGhpcy5fcmVuZGVyZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmZvcmNlU3ZnUmVuZGVyZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlciA9IG5ldyBEM1BvcnREaWFncmFtU1ZHKHRoaXMuX2VsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyTWFuYWdlciwgdGhpcy5fcGFyZW50LCB0aGlzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIgPSBuZXcgRDNQb3J0RGlhZ3JhbVBpeGkodGhpcy5fZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXJNYW5hZ2VyLCB0aGlzLl9wYXJlbnQsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0Q29sb3JNYW5hZ2VyKHRoaXMuX2NvbG9yTWdyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW5kZXIob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGludmFsaWRhdGU6IGFueSA9IHRoaXMucmVuZGVyO1xufVxuXG5leHBvcnQgY2xhc3MgRDNQb3J0RGlhZ3JhbVNWRyBleHRlbmRzIEQzQ29ubmVjdGVkR3JhcGhTVkcge1xuICAgIHByb3RlY3RlZCBfcG9ydERpYWdyYW06IEQzUG9ydERpYWdyYW07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBVSUVsZW1lbnQsIHJlbmRlcmVyOiBVSVJlbmRlcmVyLFxuICAgICAgICBwYXJlbnQ6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4sXG4gICAgICAgIHBvcnREaWFncmFtOiBEM1BvcnREaWFncmFtKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIHJlbmRlcmVyLCBwYXJlbnQpO1xuXG4gICAgICAgIERpYWdyYW1CYXNlLnByb3RvdHlwZS5iaW5kLmNhbGwodGhpcywgdGhpcy5fcmVuZGVyZXIsIHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuX3BvcnREaWFncmFtID0gcG9ydERpYWdyYW07XG5cbiAgICAgICAgdGhpcy5nZXRMaW5rU3RhcnRYWSA9IHBvcnREaWFncmFtLmdldExpbmtTdGFydFhZO1xuICAgICAgICB0aGlzLmdldExpbmtFbmRYWSA9IHBvcnREaWFncmFtLmdldExpbmtFbmRYWTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICBsZXQgZ3JhcGhBcmVhID0gc2VsZi5pbml0aWFsaXplR3JhcGhBcmVhKG9wdGlvbnMpO1xuXG4gICAgICAgIHNlbGYuaW5pdGlhbGl6ZUxpbmtMYXllcihncmFwaEFyZWEpO1xuICAgICAgICBsZXQgbm9kZVJlbmRlcmVycyA9IHNlbGYucmVuZGVyTm9kZXMoZ3JhcGhBcmVhKTtcbiAgICAgICAgbGV0IHJlbmRlcmVkTGlua3MgPSB0aGlzLl9wb3J0RGlhZ3JhbS5jcmVhdGVSZW5kZXJlZExpbmtzKCk7XG5cbiAgICAgICAgc2VsZi5fcG9ydERpYWdyYW0ubGF5b3V0KG5vZGVSZW5kZXJlcnMsIHJlbmRlcmVkTGlua3MpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyTGlua0hlbHBlcihncmFwaEFyZWEsIHJlbmRlcmVkTGlua3MpO1xuXG4gICAgICAgIHNlbGYuY29uZmlndXJlVmlldygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyTm9kZXMoZ3JhcGhBcmVhOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+KTogSU5vZGVSZW5kZXJlcltdIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgZ3JhcGggPSBzZWxmLl9lbGVtZW50IGFzIElQb3J0RGlhZ3JhbTtcblxuICAgICAgICBzZWxmLl9wb3J0RGlhZ3JhbS5fbm9kZVBvcnRJbmZvID0ge307XG5cbiAgICAgICAgbGV0IG5vZGVSZW5kZXJlcnM6IElOb2RlUmVuZGVyZXJbXSA9IFtdO1xuXG4gICAgICAgIGxldCBub2RlR3JvdXAgPSBncmFwaEFyZWEuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdub2RlcycpO1xuICAgICAgICBncmFwaC5ub2Rlcy5mb3JFYWNoKChub2RlRGVmKSA9PiB7XG4gICAgICAgICAgICBpZiAoZ3JhcGguZGVjaW1hdG9yICYmICFncmFwaC5kZWNpbWF0b3Iobm9kZURlZikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYXMgdG8gaGFwcGVuIGJlZm9yZSBhZGROb2RlL2FkZFBvcnRzXG4gICAgICAgICAgICBsZXQgbm9kZTogSU5vZGVSZW5kZXJlcjtcblxuICAgICAgICAgICAgLy8gaGFzIHRvIGhhcHBlbiBiZWZvcmUgYWRkTm9kZS9hZGRQb3J0c1xuICAgICAgICAgICAgaWYgKGdyYXBoLm5vZGVSZW5kZXJUeXBlID09PSBOb2RlVHlwZS5Ob2RlUmVjdGFuZ2xlIHx8XG4gICAgICAgICAgICAgICAgbm9kZURlZi5yZW5kZXJUeXBlID09PSBOb2RlVHlwZS5Ob2RlUmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBTVkdSZWN0YW5nbGVOb2RlKG5vZGVEZWYsIHNlbGYuX3BvcnREaWFncmFtLCBzZWxmLl9zdmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbmV3IFNWR1NpbXBsZU5vZGUobm9kZURlZiwgc2VsZi5fcG9ydERpYWdyYW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxmLl9wb3J0RGlhZ3JhbS5hZGROb2RlKG5vZGUpO1xuICAgICAgICAgICAgc2VsZi5fcG9ydERpYWdyYW0uYWRkUG9ydHMobm9kZSk7XG4gICAgICAgICAgICBub2RlUmVuZGVyZXJzLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiBmb3IgbW92aW5nIHRoZSBub2Rlc1xuICAgICAgICAgICAgZnVuY3Rpb24gZHJhZ01vdmUobm9kZURlZjogSVBvcnREaWFncmFtTm9kZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuX2RhdGFUb29sdGlwLmhpZGVUb29sdGlwKCk7XG5cbiAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZVBvc2l0aW9uKGQzLmV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGxldCBsaW5rc1RvVXBkYXRlOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGdyYXBoQXJlYS5zZWxlY3RBbGwoJy5saW5rLicgKyBub2RlRGVmLmtleSlcbiAgICAgICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGxpbms6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlua3NUb1VwZGF0ZS5wdXNoKGxpbmspO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZWxmLnJlbmRlckxpbmtIZWxwZXIoZ3JhcGhBcmVhLCBsaW5rc1RvVXBkYXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHJlbmRlcmVkTm9kZSA9IG5vZGUucmVuZGVyTm9kZSh7IGdyb3VwOiBub2RlR3JvdXAgfSlcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlZW50ZXInLCBzZWxmLm5vZGVIb3ZlclN0YXJ0KVxuICAgICAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsIHNlbGYuaG92ZXJFbmQpXG4gICAgICAgICAgICAgICAgLmNhbGwoKDxhbnk+ZDMpLmRyYWcoKVxuICAgICAgICAgICAgICAgICAgICAub24oJ2RyYWcnLCBkcmFnTW92ZSkpO1xuXG4gICAgICAgICAgICAocmVuZGVyZWROb2RlIGFzIGFueSkubm9kZSgpWydfX2RhdGFfXyddID0gbm9kZS5kZWY7XG4gICAgICAgICAgICBhZGRDbGlja0hlbHBlcihyZW5kZXJlZE5vZGUsIHNlbGYuZ2V0T3B0aW9ucygpLCBncmFwaC5vbkNsaWNrLFxuICAgICAgICAgICAgICAgIGdyYXBoLm9uRG91YmxlQ2xpY2ssIGdyYXBoLmNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgICAgICAgICAgc2VsZi5fZGF0YVRvb2x0aXAsIGdyYXBoLCBub2RlLmRlZiwgbm9kZS5kZWYua2V5KTtcbiAgICAgICAgICAgIHNlbGYuX2RhdGFUb29sdGlwLnNldFRhcmdldChyZW5kZXJlZE5vZGUpO1xuXG4gICAgICAgICAgICAvLyB3ZSBkbyB0aGlzIGhlcmUgaW5zdGVhZCBvZiB1c2luZyB0aGUgcmVuZGVyUG9ydHMgaGVscGVyXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgZXhwZW5zaXZlIHRvIGNhbGwgc2VsZWN0QWxsIG11bHRpcGxlXG4gICAgICAgICAgICAvLyB0aW1lcyAoYWthIG9uY2UgZm9yIGVhY2ggbm9kZSBpZiB3ZSBjYWxsIHRoYXQgaGVscGVyKVxuICAgICAgICAgICAgaWYgKCEoc2VsZi5fZWxlbWVudCBhcyBJUG9ydERpYWdyYW0pLmRpc2FibGVQb3J0UmVuZGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgLy8gZ2F0aGVyIGFsbCB0aGUgcG9ydHMgZm9yIHJlbmRlcmluZ1xuICAgICAgICAgICAgICAgIGxldCBub2RlUG9ydHMgPSB0aGlzLl9wb3J0RGlhZ3JhbS5fbm9kZVBvcnRJbmZvW25vZGUuZGVmLmtleV07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcG9ydEtleSBpbiBub2RlUG9ydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvcnQgPSBub2RlUG9ydHNbcG9ydEtleV07XG4gICAgICAgICAgICAgICAgICAgIGxldCByZW5kZXJlZFBvcnQgPSBub2RlLnJlbmRlclBvcnQocG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKHJlbmRlcmVkUG9ydC5ub2RlKCkgYXMgYW55KVsnX19kYXRhX18nXSA9IHBvcnQ7XG4gICAgICAgICAgICAgICAgICAgIGFkZENsaWNrSGVscGVyKHJlbmRlcmVkUG9ydCwgc2VsZi5nZXRPcHRpb25zKCksIGdyYXBoLm9uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBncmFwaC5vbkRvdWJsZUNsaWNrLCBncmFwaC5jb250ZXh0TWVudUl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVRvb2x0aXAsIGdyYXBoLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVRvb2x0aXAuc2V0VGFyZ2V0KHJlbmRlcmVkUG9ydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGVSZW5kZXJlcnM7XG4gICAgfVxufVxuRDNSZW5kZXJlci5yZWdpc3RlcihVSVR5cGUuUG9ydERpYWdyYW0sIEQzUG9ydERpYWdyYW0pO1xuXG4vLyBXRUJHTCBTVFVGRlxuZXhwb3J0IGNsYXNzIEQzUG9ydERpYWdyYW1QaXhpIGV4dGVuZHMgRDNDb25uZWN0ZWRHcmFwaFBpeGkge1xuICAgIHByb3RlY3RlZCBfcG9ydERpYWdyYW06IEQzUG9ydERpYWdyYW07XG4gICAgcHJvdGVjdGVkIF9yZW5kZXJlZExpbmtzOiBJUmVuZGVyZWREaWFncmFtTGlua1tdO1xuXG4gICAgcHJvdGVjdGVkIF9ub2RlR3JhcGhpY3M6IEdyYXBoaWNzTWFuYWdlcjtcbiAgICBwcm90ZWN0ZWQgX3BvcnRHcmFwaGljczogR3JhcGhpY3NNYW5hZ2VyO1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogVUlFbGVtZW50LCByZW5kZXJlcjogVUlSZW5kZXJlcixcbiAgICAgICAgcGFyZW50OiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+LFxuICAgICAgICBwb3J0RGlhZ3JhbTogRDNQb3J0RGlhZ3JhbSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCByZW5kZXJlciwgcGFyZW50KTtcblxuICAgICAgICB0aGlzLl9wb3J0RGlhZ3JhbSA9IHBvcnREaWFncmFtO1xuXG4gICAgICAgIHRoaXMuZ2V0TGlua1N0YXJ0WFkgPSBwb3J0RGlhZ3JhbS5nZXRMaW5rU3RhcnRYWTtcbiAgICAgICAgdGhpcy5nZXRMaW5rRW5kWFkgPSBwb3J0RGlhZ3JhbS5nZXRMaW5rRW5kWFk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJOb2RlcyhzdGFnZTogYW55KTogSU5vZGVSZW5kZXJlcltdIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgZ3JhcGggPSBzZWxmLl9lbGVtZW50IGFzIElQb3J0RGlhZ3JhbTtcblxuICAgICAgICAvLyBjcmVhdGUgZ3JhcGhpY3MgbWFuYWdlcnMgZm9yIGNhY2hpbmdcbiAgICAgICAgc2VsZi5fbm9kZUdyYXBoaWNzID0gbmV3IEdyYXBoaWNzTWFuYWdlcihzZWxmLl9waXhpKTtcbiAgICAgICAgaWYgKCEoc2VsZi5fZWxlbWVudCBhcyBJUG9ydERpYWdyYW0pLmRpc2FibGVQb3J0UmVuZGVyaW5nKSB7XG4gICAgICAgICAgICBzZWxmLl9wb3J0R3JhcGhpY3MgPSBuZXcgR3JhcGhpY3NNYW5hZ2VyKHNlbGYuX3BpeGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5vZGVSZW5kZXJlcnM6IElOb2RlUmVuZGVyZXJbXSA9IFtdO1xuICAgICAgICBncmFwaC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlOiBJUG9ydERpYWdyYW1Ob2RlKSB7XG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIG5vZGUgaW5mb1xuICAgICAgICAgICAgbGV0IG5vZGVSZW5kZXJlcjogSU5vZGVSZW5kZXJlcjtcbiAgICAgICAgICAgIC8vIGhhcyB0byBoYXBwZW4gYmVmb3JlIGFkZE5vZGUvYWRkUG9ydHNcbiAgICAgICAgICAgIGlmIChncmFwaC5ub2RlUmVuZGVyVHlwZSA9PT0gTm9kZVR5cGUuTm9kZVJlY3RhbmdsZSB8fFxuICAgICAgICAgICAgICAgIG5vZGUucmVuZGVyVHlwZSA9PT0gTm9kZVR5cGUuTm9kZVJlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgIG5vZGVSZW5kZXJlciA9IG5ldyBQSVhJUmVjdGFuZ2xlTm9kZShub2RlLCBzZWxmLl9waXhpSGVscGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZVJlbmRlcmVyID0gbmV3IFBJWElTaW1wbGVOb2RlKG5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxmLl9wb3J0RGlhZ3JhbS5hZGROb2RlKG5vZGVSZW5kZXJlcik7XG4gICAgICAgICAgICBzZWxmLl9wb3J0RGlhZ3JhbS5hZGRQb3J0cyhub2RlUmVuZGVyZXIpXG4gICAgICAgICAgICBub2RlUmVuZGVyZXJzLnB1c2gobm9kZVJlbmRlcmVyKTtcblxuICAgICAgICAgICAgaWYgKGdyYXBoLmRlY2ltYXRvciAmJiAhZ3JhcGguZGVjaW1hdG9yKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBwYXJzZUludChzZWxmLl9wb3J0RGlhZ3JhbS5nZXRDb2xvcihub2RlKS5zdWJzdHJpbmcoMSksIDE2KTtcblxuICAgICAgICAgICAgLy8gUkVOREVSIFRIRSBOT0RFXG4gICAgICAgICAgICBsZXQgbm9kZUdyYXBoaWM6IFBJWEkuQ29udGFpbmVyID0gbm9kZVJlbmRlcmVyLnJlbmRlck5vZGUoe1xuICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICBtYW5hZ2VyOiBzZWxmLl9ub2RlR3JhcGhpY3NcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAobm9kZUdyYXBoaWMgYXMgYW55KS5fX2RhdGFfXyA9IG5vZGU7XG4gICAgICAgICAgICAobm9kZUdyYXBoaWMgYXMgYW55KS5yZW5kZXJlciA9IG5vZGVSZW5kZXJlcjtcblxuICAgICAgICAgICAgLy8gYWRkIGl0ZW0gbGV0cyB1cyBkbyBzZWxlY3Rpb25cbiAgICAgICAgICAgIHNlbGYuX3BpeGlIZWxwZXIuYWRkU2VsZWN0aW9uKG5vZGUua2V5LCBub2RlR3JhcGhpYyk7XG5cbiAgICAgICAgICAgIHNlbGYuX3BpeGlIZWxwZXIuYWRkSW50ZXJhY3Rpb25IZWxwZXIobm9kZUdyYXBoaWMsIHNlbGYuZ2V0T3B0aW9ucygpLFxuICAgICAgICAgICAgICAgIGdyYXBoLm9uQ2xpY2ssIGdyYXBoLm9uRG91YmxlQ2xpY2ssIGdyYXBoLmNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgICAgICAgICAgc2VsZi5ub2RlSG92ZXJTdGFydCwgc2VsZi5ob3ZlckVuZCxcbiAgICAgICAgICAgICAgICBzZWxmLl9kYXRhVG9vbHRpcCwgZ3JhcGgsIG5vZGUsIG5vZGUua2V5KTtcblxuICAgICAgICAgICAgLy8gUkVOREVSIFRIRSBQT1JUU1xuICAgICAgICAgICAgaWYgKCEoc2VsZi5fZWxlbWVudCBhcyBJUG9ydERpYWdyYW0pLmRpc2FibGVQb3J0UmVuZGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgLy8gZ2F0aGVyIGFsbCB0aGUgcG9ydHMgZm9yIHJlbmRlcmluZ1xuICAgICAgICAgICAgICAgIGxldCBub2RlUG9ydHMgPSBzZWxmLl9wb3J0RGlhZ3JhbS5fbm9kZVBvcnRJbmZvW25vZGUua2V5XTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwb3J0S2V5IGluIG5vZGVQb3J0cykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcG9ydCA9IG5vZGVQb3J0c1twb3J0S2V5XTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9ydEdyYXBoaWMgPSBub2RlUmVuZGVyZXIucmVuZGVyUG9ydChwb3J0LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyOiBzZWxmLl9wb3J0R3JhcGhpY3NcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGl4aUhlbHBlci5hZGRTZWxlY3Rpb24obm9kZS5rZXksIHBvcnRHcmFwaGljKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGl4aUhlbHBlci5hZGRTZWxlY3Rpb24obm9kZS5rZXkgKyBwb3J0LmtleSwgcG9ydEdyYXBoaWMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BpeGlIZWxwZXIuYWRkSW50ZXJhY3Rpb25IZWxwZXIocG9ydEdyYXBoaWMsIHNlbGYuZ2V0T3B0aW9ucygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGgub25DbGljaywgZ3JhcGgub25Eb3VibGVDbGljaywgZ3JhcGguY29udGV4dE1lbnVJdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubm9kZUhvdmVyU3RhcnQsIHNlbGYuaG92ZXJFbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXRhVG9vbHRpcCwgZ3JhcGgsIHsgZGVmOiBwb3J0IH0sIG5vZGUua2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENPTkZJR1VSRSBIT1ZFUi9EUkFHIE9OIENPTlRBSU5FUlxuICAgICAgICAgICAgbGV0IG5vZGVDb250YWluZXIgPSBub2RlUmVuZGVyZXIuZ2V0Tm9kZSgpO1xuXG4gICAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gZm9yIG1vdmluZyB0aGUgbm9kZXNcbiAgICAgICAgICAgIGxldCBwcmV2UG9zOiBhbnk7XG4gICAgICAgICAgICBmdW5jdGlvbiBkcmFnU3RhcnQoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBiZWNhdXNlIG9mIG11bHRpdG91Y2hcbiAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHRyYWNrIHRoZSBtb3ZlbWVudCBvZiB0aGlzIHBhcnRpY3VsYXIgdG91Y2hcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gaXRlbURyYWdnaW5nIGlzIGEgd29ya2Fyb3VuZCB0byBoYXZlIGQzIGFuZCBwaXhpIGNvZXhpc3QgZm9yIGV2ZW50c1xuICAgICAgICAgICAgICAgIHN0YWdlLml0ZW1EcmFnZ2luZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBwcmV2UG9zID0gdGhpcy5kYXRhLmdldExvY2FsUG9zaXRpb24obm9kZUNvbnRhaW5lci5wYXJlbnQpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBkcmFnTW92ZShldmVudDogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGF0YVRvb2x0aXAuaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvcyA9IHRoaXMuZGF0YS5nZXRMb2NhbFBvc2l0aW9uKG5vZGVDb250YWluZXIucGFyZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBwb3MuZHggPSBwb3MueCAtIHByZXZQb3MueDtcbiAgICAgICAgICAgICAgICAgICAgcG9zLmR5ID0gcG9zLnkgLSBwcmV2UG9zLnk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBtYWtlIE5vZGVUeXBlIGEgY2xhc3MgdG8gZ2V0IHJpZCBvZiBhbGwgdGhlc2UgaWYgc3RhdGVtZW50c1xuICAgICAgICAgICAgICAgICAgICBub2RlUmVuZGVyZXIudXBkYXRlUG9zaXRpb24ocG9zKTtcblxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbmRlckxpbmtIZWxwZXIoc3RhZ2UsIHNlbGYuX3JlbmRlcmVkTGlua3MpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9waXhpSGVscGVyLnJlbmRlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2UG9zID0gcG9zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZHJhZ0VuZCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvLyBpdGVtRHJhZ2dpbmcgaXMgYSB3b3JrYXJvdW5kIHRvIGhhdmUgZDMgYW5kIHBpeGkgY29leGlzdCBmb3IgZXZlbnRzXG4gICAgICAgICAgICAgICAgc3RhZ2UuaXRlbURyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBpbnRlcmFjdGlvbiBkYXRhIHRvIG51bGxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlR3JhcGhpY1xuICAgICAgICAgICAgICAgIC5vbignbW91c2Vkb3duJywgZHJhZ1N0YXJ0KVxuICAgICAgICAgICAgICAgIC5vbigndG91Y2hzdGFydCcsIGRyYWdTdGFydClcbiAgICAgICAgICAgICAgICAvLyBldmVudHMgZm9yIGRyYWcgZW5kXG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZXVwJywgZHJhZ0VuZClcbiAgICAgICAgICAgICAgICAub24oJ21vdXNldXBvdXRzaWRlJywgZHJhZ0VuZClcbiAgICAgICAgICAgICAgICAub24oJ3RvdWNoZW5kJywgZHJhZ0VuZClcbiAgICAgICAgICAgICAgICAub24oJ3RvdWNoZW5kb3V0c2lkZScsIGRyYWdFbmQpXG4gICAgICAgICAgICAgICAgLy8gZXZlbnRzIGZvciBkcmFnIG1vdmVcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlbW92ZScsIGRyYWdNb3ZlKVxuICAgICAgICAgICAgICAgIC5vbigndG91Y2htb3ZlJywgZHJhZ01vdmUpO1xuXG4gICAgICAgICAgICBzdGFnZS5hZGRDaGlsZChub2RlQ29udGFpbmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub2RlUmVuZGVyZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBfc2VsZWN0KHNlbGVjdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IHRoaXMuX3BpeGlIZWxwZXIuZ2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7XG4gICAgICAgICAgICBpZiAoaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbmVkIHRoaXMgcmVuZGVyZXIgd2hlbiByZW5kZXJpbmcgdGhlIG5vZGUgc28gd2VcbiAgICAgICAgICAgICAgICAgICAgLy8gY291bGQgZmluZCBpdCBsYXRlciBlYXNpbHlcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW5kZXJlci5zZWxlY3Qoc2VsZWN0aW9uLCBlbGVtLCBpbmRleCwgc2VsZi5fbm9kZUdyYXBoaWNzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3BpeGlIZWxwZXIucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgX3Vuc2VsZWN0KHNlbGVjdGlvbjogc3RyaW5nKSB7XG5cbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5fcGl4aUhlbHBlci5nZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcbiAgICAgICAgaWYgKGl0ZW1zKSB7XG4gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25lZCB0aGlzIHJlbmRlcmVyIHdoZW4gcmVuZGVyaW5nIHRoZSBub2RlIHNvIHdlXG4gICAgICAgICAgICAgICAgLy8gY291bGQgZmlmbmQgaXQgbGF0ZXIgZWFzaWx5XG4gICAgICAgICAgICAgICAgZWxlbS5yZW5kZXJlci51bnNlbGVjdChzZWxlY3Rpb24sIGVsZW0sIGluZGV4KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fcGl4aUhlbHBlci5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNhY2hlIHRoZSBiYXNpYyBncmFwaGljIHN0cnVjdHVyZXMgc28gd2UgY2FuIGNsb25lIHRoZW1cbiAgICAvLyB2cyByZWNyZWF0aW5nIHRoZW1cbiAgICBwdWJsaWMgcmVuZGVyKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIG1lcmdlKHRoaXMuX29wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGdyYXBoID0gc2VsZi5fZWxlbWVudCBhcyBJUG9ydERpYWdyYW07XG5cbiAgICAgICAgbGV0IGZpcnN0ID0gdGhpcy5fcGl4aUhlbHBlciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIWZpcnN0ICYmIChvcHRpb25zLmhlaWdodCB8fCBvcHRpb25zLndpZHRoKSkge1xuICAgICAgICAgICAgdGhpcy5fcGl4aS5yZXNpemUoc2VsZi5fb3B0aW9ucy53aWR0aCwgc2VsZi5fb3B0aW9ucy5oZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5fcGl4aUhlbHBlci5yZW5kZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuX3BvcnREaWFncmFtLl9ub2RlUG9ydEluZm8gPSB7fTtcblxuICAgICAgICBsZXQgc3RhZ2UgPSBzZWxmLmluaXRpYWxpemVHcmFwaEFyZWEob3B0aW9ucyk7XG5cbiAgICAgICAgbGV0IG5vZGVSZW5kZXJlcnMgPSBzZWxmLnJlbmRlck5vZGVzKHN0YWdlKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZWRMaW5rcyA9IHNlbGYuX3BvcnREaWFncmFtLmNyZWF0ZVJlbmRlcmVkTGlua3MoKTtcblxuICAgICAgICBzZWxmLl9wb3J0RGlhZ3JhbS5sYXlvdXQobm9kZVJlbmRlcmVycywgdGhpcy5fcmVuZGVyZWRMaW5rcyk7XG5cbiAgICAgICAgc2VsZi5yZW5kZXJMaW5rSGVscGVyKHN0YWdlLCB0aGlzLl9yZW5kZXJlZExpbmtzKTtcblxuICAgICAgICAvL1JlbmRlciB0aGUgc3RhZ2VcbiAgICAgICAgc2VsZi5jb25maWd1cmVWaWV3KCk7XG4gICAgICAgIHNlbGYuX3BpeGlIZWxwZXIucmVuZGVyKHN0YWdlKTtcblxuICAgIH1cbn1cbkQzUmVuZGVyZXIucmVnaXN0ZXIoVUlUeXBlLlBvcnREaWFncmFtLCBEM1BvcnREaWFncmFtKTsiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFFQTtBQUdBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFtQkE7O0FBRUE7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBMENBO0FBa0NBO0FBeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFGQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7QUFFQTtBQUNBO0FBT0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBUUE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBV0E7QUFDQTtBQVJBO0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQTBCQTtBQUdBO0FBaEJBOztBQUVBO0FBQ0E7QUFRQTtBQW1PQTtBQTVOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUE1UEE7QUE4UEE7QUFHQTtBQUdBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzR0E7QUE0R0E7QUFFQTtBQUNBO0FBT0E7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFwTkE7QUFxTkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/core/connected-graph/port.ts\n");

/***/ }),

/***/ "./src/core/connected-graph/sankey.ts":
/*!********************************************!*\
  !*** ./src/core/connected-graph/sankey.ts ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ui_base_1 = __webpack_require__(/*! ../../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst svg_helper_1 = __webpack_require__(/*! ../svg-helper */ \"./src/core/svg-helper.ts\");\nconst renderer_1 = __webpack_require__(/*! ../renderer */ \"./src/core/renderer.ts\");\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\nconst d3_sankey_1 = __webpack_require__(/*! d3-sankey */ \"d3-sankey\");\nconst base_1 = __webpack_require__(/*! ./base */ \"./src/core/connected-graph/base.ts\");\nclass D3SankeyDiagram extends base_1.D3ConnectedGraphSVG {\n    constructor(element, renderer, parent) {\n        super(element, renderer, parent);\n        base_1.ConnectedGraphBase.prototype.initializeGraph.call(this, element);\n    }\n    renderLinks(graphArea) {\n        let self = this;\n        let diagram = self._element;\n        var path = self._sankey.link();\n        // add in the links\n        var links = graphArea.append('g')\n            .classed('links', true)\n            .selectAll('.link')\n            .data(diagram.links)\n            .enter().append('path')\n            .attr('class', function (d) { return d.from + '-' + d.to; })\n            .attr('d', path)\n            .classed('link', true)\n            .style('stroke-width', function (d) { return Math.max(1, d.dy); })\n            .sort(function (a, b) { return b.dy - a.dy; })\n            .on('mouseenter', self.linkHoverStart)\n            .on('mouseleave', self.hoverEnd)\n            .each(function (d) {\n            svg_helper_1.addClickHelper(d3.select(this), self.getOptions(), diagram.onClick, diagram.onDoubleClick, diagram.contextMenuItems, self._dataTooltip, diagram, d);\n        });\n        self._dataTooltip.setTarget(links);\n        return links;\n    }\n    renderNodes(graphArea, dragMove) {\n        let self = this;\n        let diagram = self._element;\n        let width = this._options.width;\n        var nodes = graphArea.append('g')\n            .classed('nodes', true)\n            .selectAll('.nodeGroup')\n            .data(diagram.nodes)\n            .enter().append('g')\n            .classed('nodeGroup', true)\n            .attr('transform', function (d) {\n            return 'translate(' + d.x + ',' + d.y + ')';\n        })\n            .each(function (d) {\n            svg_helper_1.addClickHelper(d3.select(this), self.getOptions(), diagram.onClick, diagram.onDoubleClick, diagram.contextMenuItems, self._dataTooltip, diagram, d);\n        })\n            .call(d3.drag()\n            .subject(function (d) {\n            // put this here because on click isn't hit for\n            // the sankey nodes otherwise\n            if (!self.getOptions().disableSelection) {\n                svg_helper_1.onSelectHelper(self._element, d, d.key);\n            }\n            return d;\n        })\n            .on('start', function () {\n            svg_helper_1.SVGRenderer.IS_RESIZING = true;\n            this.parentNode.appendChild(this);\n        })\n            .on('drag', dragMove)\n            .on('end', function () {\n            svg_helper_1.SVGRenderer.IS_RESIZING = false;\n        }));\n        // add the rectangles for the nodes\n        let colorMgr = self._renderer.getColorManager();\n        nodes.append('rect')\n            .attr('height', function (d) { return d.dy; })\n            .attr('width', self._sankey.nodeWidth())\n            .attr('class', function (d) {\n            if (d.type) {\n                return d.type + ' ' + d.key;\n            }\n            return d.key;\n        })\n            .classed('node', true)\n            .style('fill', function (d) {\n            if (d.type) {\n                return colorMgr.getColor(d.type);\n            }\n            return colorMgr.getColor(d.key);\n        })\n            .style('stroke', function (d) {\n            return d3.rgb(d.color).darker(2);\n        })\n            .on('mouseenter', self.nodeHoverStart)\n            .on('mouseleave', self.hoverEnd);\n        // add in the title for the nodes\n        nodes.append('text')\n            .attr('x', -6)\n            .attr('y', function (d) { return d.dy / 2; })\n            .attr('dy', '.35em')\n            .attr('text-anchor', 'end')\n            .attr('transform', null)\n            .text(function (d) { return d.key; })\n            .filter(function (d) { return d.x < width / 2; })\n            .attr('x', 6 + self._sankey.nodeWidth())\n            .attr('text-anchor', 'start');\n        self._dataTooltip.setTarget(nodes);\n        return nodes;\n    }\n    render(options) {\n        let self = this;\n        let diagram = self._element;\n        if (!this._options.height) {\n            this._options.height = 400;\n        }\n        let width = this._options.width;\n        let height = this._options.height;\n        // Set the sankey diagram properties\n        if (d3.sankey !== undefined) {\n            self._sankey = d3.sankey()\n                .size([width, height]);\n        }\n        else {\n            self._sankey = d3_sankey_1.sankey()\n                .size([width, height]);\n        }\n        var path = self._sankey.link();\n        this._sankey\n            .nodes(diagram.nodes)\n            .links(diagram.links)\n            .layout(32);\n        // add in the nodes\n        // the function for moving the nodes\n        function dragMove(d) {\n            d3.select(this).attr('transform', 'translate(' + (d.x = Math.max(0, Math.min(width - d.dx, d3.event.x)))\n                + ',' + (d.y = Math.max(0, Math.min(height - d.dy, d3.event.y))) + ')');\n            self._sankey.relayout();\n            links.attr('d', path);\n        }\n        let graphArea = self.initializeGraphArea(options);\n        let links = this.renderLinks(graphArea);\n        this.renderNodes(graphArea, dragMove);\n        self.configureView();\n    }\n}\nexports.D3SankeyDiagram = D3SankeyDiagram;\nrenderer_1.D3Renderer.register(ui_base_1.UIType.FlowDiagram, D3SankeyDiagram);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9jb25uZWN0ZWQtZ3JhcGgvc2Fua2V5LnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2NvcmUvY29ubmVjdGVkLWdyYXBoL3NhbmtleS50cz9kN2E3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElPcHRpb25zLCBVSVR5cGUsIFVJRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS91aS1iYXNlJztcbmltcG9ydCB7IElDb25uZWN0ZWRHcmFwaCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9ncmFwaCc7XG5pbXBvcnQgeyBhZGRDbGlja0hlbHBlciwgU1ZHUmVuZGVyZXIsIG9uU2VsZWN0SGVscGVyIH0gZnJvbSAnLi4vc3ZnLWhlbHBlcic7XG5pbXBvcnQgeyBEM1JlbmRlcmVyIH0gZnJvbSAnLi4vcmVuZGVyZXInO1xuXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgeyBzYW5rZXkgfSBmcm9tICdkMy1zYW5rZXknO1xuXG5pbXBvcnQgeyBEM0Nvbm5lY3RlZEdyYXBoU1ZHLCBDb25uZWN0ZWRHcmFwaEJhc2UgfSBmcm9tICcuL2Jhc2UnO1xuXG5leHBvcnQgY2xhc3MgRDNTYW5rZXlEaWFncmFtIGV4dGVuZHMgRDNDb25uZWN0ZWRHcmFwaFNWRyB7XG4gICAgLyoqIHRoZSBzYW5rZXkgb2JqZWN0IGZvciB0aGlzIGZsb3cgY2hhcnQgKi9cbiAgICBwcml2YXRlIF9zYW5rZXk6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFVJRWxlbWVudCwgcmVuZGVyZXI6IEQzUmVuZGVyZXIsXG4gICAgICAgIHBhcmVudDogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55Pikge1xuXG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIHJlbmRlcmVyLCBwYXJlbnQpO1xuXG4gICAgICAgIENvbm5lY3RlZEdyYXBoQmFzZS5wcm90b3R5cGUuaW5pdGlhbGl6ZUdyYXBoLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlckxpbmtzKGdyYXBoQXJlYTogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55Pik6XG4gICAgICAgIGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4ge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBkaWFncmFtID0gc2VsZi5fZWxlbWVudCBhcyBJQ29ubmVjdGVkR3JhcGg7XG5cbiAgICAgICAgdmFyIHBhdGggPSBzZWxmLl9zYW5rZXkubGluaygpO1xuXG4gICAgICAgIC8vIGFkZCBpbiB0aGUgbGlua3NcbiAgICAgICAgdmFyIGxpbmtzID0gZ3JhcGhBcmVhLmFwcGVuZCgnZycpXG4gICAgICAgICAgICAuY2xhc3NlZCgnbGlua3MnLCB0cnVlKVxuICAgICAgICAgICAgLnNlbGVjdEFsbCgnLmxpbmsnKVxuICAgICAgICAgICAgLmRhdGEoZGlhZ3JhbS5saW5rcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZCgncGF0aCcpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLmZyb20gKyAnLScgKyBkLnRvIH0pXG4gICAgICAgICAgICAuYXR0cignZCcsIHBhdGgpXG4gICAgICAgICAgICAuY2xhc3NlZCgnbGluaycsIHRydWUpXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIE1hdGgubWF4KDEsIGQuZHkpOyB9KVxuICAgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7IHJldHVybiBiLmR5IC0gYS5keTsgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VlbnRlcicsIHNlbGYubGlua0hvdmVyU3RhcnQpXG4gICAgICAgICAgICAub24oJ21vdXNlbGVhdmUnLCBzZWxmLmhvdmVyRW5kKVxuICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIGFkZENsaWNrSGVscGVyKGQzLnNlbGVjdCh0aGlzKSwgc2VsZi5nZXRPcHRpb25zKCksXG4gICAgICAgICAgICAgICAgICAgIGRpYWdyYW0ub25DbGljaywgZGlhZ3JhbS5vbkRvdWJsZUNsaWNrLFxuICAgICAgICAgICAgICAgICAgICBkaWFncmFtLmNvbnRleHRNZW51SXRlbXMsIHNlbGYuX2RhdGFUb29sdGlwLCBkaWFncmFtLCBkKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHNlbGYuX2RhdGFUb29sdGlwLnNldFRhcmdldChsaW5rcyk7XG5cbiAgICAgICAgcmV0dXJuIGxpbmtzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW5kZXJOb2RlcyhncmFwaEFyZWE6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4sXG4gICAgICAgIGRyYWdNb3ZlOiAobm9kZTogYW55KSA9PiB2b2lkKTogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PiB7XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgZGlhZ3JhbSA9IHNlbGYuX2VsZW1lbnQgYXMgSUNvbm5lY3RlZEdyYXBoO1xuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLl9vcHRpb25zLndpZHRoO1xuXG4gICAgICAgIHZhciBub2RlcyA9IGdyYXBoQXJlYS5hcHBlbmQoJ2cnKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ25vZGVzJywgdHJ1ZSlcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJy5ub2RlR3JvdXAnKVxuICAgICAgICAgICAgLmRhdGEoZGlhZ3JhbS5ub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZCgnZycpXG4gICAgICAgICAgICAuY2xhc3NlZCgnbm9kZUdyb3VwJywgdHJ1ZSlcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIGQueCArICcsJyArIGQueSArICcpJztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgYWRkQ2xpY2tIZWxwZXIoZDMuc2VsZWN0KHRoaXMpLCBzZWxmLmdldE9wdGlvbnMoKSwgZGlhZ3JhbS5vbkNsaWNrLFxuICAgICAgICAgICAgICAgICAgICBkaWFncmFtLm9uRG91YmxlQ2xpY2ssIGRpYWdyYW0uY29udGV4dE1lbnVJdGVtcywgc2VsZi5fZGF0YVRvb2x0aXAsXG4gICAgICAgICAgICAgICAgICAgIGRpYWdyYW0sIGQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYWxsKCg8YW55PmQzKS5kcmFnKClcbiAgICAgICAgICAgICAgICAuc3ViamVjdChmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHB1dCB0aGlzIGhlcmUgYmVjYXVzZSBvbiBjbGljayBpc24ndCBoaXQgZm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW5rZXkgbm9kZXMgb3RoZXJ3aXNlXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZi5nZXRPcHRpb25zKCkuZGlzYWJsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RIZWxwZXIoc2VsZi5fZWxlbWVudCwgZCwgZC5rZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdzdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgU1ZHUmVuZGVyZXIuSVNfUkVTSVpJTkcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAub24oJ2RyYWcnLCBkcmFnTW92ZSlcbiAgICAgICAgICAgICAgICAub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgU1ZHUmVuZGVyZXIuSVNfUkVTSVpJTkcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gYWRkIHRoZSByZWN0YW5nbGVzIGZvciB0aGUgbm9kZXNcbiAgICAgICAgbGV0IGNvbG9yTWdyID0gc2VsZi5fcmVuZGVyZXIuZ2V0Q29sb3JNYW5hZ2VyKClcbiAgICAgICAgbm9kZXMuYXBwZW5kKCdyZWN0JylcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLmR5OyB9KVxuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgc2VsZi5fc2Fua2V5Lm5vZGVXaWR0aCgpKVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIGlmIChkLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQudHlwZSArICcgJyArIGQua2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZC5rZXlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2xhc3NlZCgnbm9kZScsIHRydWUpXG4gICAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3JNZ3IuZ2V0Q29sb3IoZC50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29sb3JNZ3IuZ2V0Q29sb3IoZC5rZXkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgZnVuY3Rpb24gKGQ6IGFueSk6IGFueSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQzLnJnYihkLmNvbG9yKS5kYXJrZXIoMik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgc2VsZi5ub2RlSG92ZXJTdGFydClcbiAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsIHNlbGYuaG92ZXJFbmQpO1xuXG4gICAgICAgIC8vIGFkZCBpbiB0aGUgdGl0bGUgZm9yIHRoZSBub2Rlc1xuICAgICAgICBub2Rlcy5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgLmF0dHIoJ3gnLCAtNilcbiAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC5keSAvIDI7IH0pXG4gICAgICAgICAgICAuYXR0cignZHknLCAnLjM1ZW0nKVxuICAgICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgbnVsbClcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIGQua2V5OyB9KVxuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLnggPCB3aWR0aCAvIDI7IH0pXG4gICAgICAgICAgICAuYXR0cigneCcsIDYgKyBzZWxmLl9zYW5rZXkubm9kZVdpZHRoKCkpXG4gICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnc3RhcnQnKTtcblxuICAgICAgICBzZWxmLl9kYXRhVG9vbHRpcC5zZXRUYXJnZXQobm9kZXMpO1xuXG4gICAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGRpYWdyYW0gPSBzZWxmLl9lbGVtZW50IGFzIElDb25uZWN0ZWRHcmFwaDtcblxuICAgICAgICBpZiAoIXRoaXMuX29wdGlvbnMuaGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLmhlaWdodCA9IDQwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMuX29wdGlvbnMud2lkdGg7XG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLl9vcHRpb25zLmhlaWdodDtcblxuICAgICAgICAvLyBTZXQgdGhlIHNhbmtleSBkaWFncmFtIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKChkMyBhcyBhbnkpLnNhbmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZWxmLl9zYW5rZXkgPSAoZDMgYXMgYW55KS5zYW5rZXkoKVxuICAgICAgICAgICAgICAgIC5zaXplKFt3aWR0aCwgaGVpZ2h0XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLl9zYW5rZXkgPSBzYW5rZXkoKVxuICAgICAgICAgICAgICAgIC5zaXplKFt3aWR0aCwgaGVpZ2h0XSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGF0aCA9IHNlbGYuX3NhbmtleS5saW5rKCk7XG5cbiAgICAgICAgdGhpcy5fc2Fua2V5XG4gICAgICAgICAgICAubm9kZXMoZGlhZ3JhbS5ub2RlcylcbiAgICAgICAgICAgIC5saW5rcyhkaWFncmFtLmxpbmtzKVxuICAgICAgICAgICAgLmxheW91dCgzMik7XG5cbiAgICAgICAgLy8gYWRkIGluIHRoZSBub2Rlc1xuICAgICAgICAvLyB0aGUgZnVuY3Rpb24gZm9yIG1vdmluZyB0aGUgbm9kZXNcbiAgICAgICAgZnVuY3Rpb24gZHJhZ01vdmUoZDogYW55KSB7XG4gICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cigndHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgKyAoXG4gICAgICAgICAgICAgICAgICAgIGQueCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHdpZHRoIC0gZC5keCwgZDMuZXZlbnQueCkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICsgJywnICsgKFxuICAgICAgICAgICAgICAgICAgICBkLnkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihoZWlnaHQgLSBkLmR5LCBkMy5ldmVudC55KSlcbiAgICAgICAgICAgICAgICApICsgJyknKTtcbiAgICAgICAgICAgIHNlbGYuX3NhbmtleS5yZWxheW91dCgpO1xuICAgICAgICAgICAgbGlua3MuYXR0cignZCcsIHBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdyYXBoQXJlYSA9IHNlbGYuaW5pdGlhbGl6ZUdyYXBoQXJlYShvcHRpb25zKTtcbiAgICAgICAgbGV0IGxpbmtzID0gdGhpcy5yZW5kZXJMaW5rcyhncmFwaEFyZWEpO1xuICAgICAgICB0aGlzLnJlbmRlck5vZGVzKGdyYXBoQXJlYSwgZHJhZ01vdmUpO1xuXG4gICAgICAgIHNlbGYuY29uZmlndXJlVmlldygpO1xuICAgIH1cbn1cbkQzUmVuZGVyZXIucmVnaXN0ZXIoVUlUeXBlLkZsb3dEaWFncmFtLCBEM1NhbmtleURpYWdyYW0pOyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUlBO0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBM0tBO0FBNEtBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/core/connected-graph/sankey.ts\n");

/***/ }),

/***/ "./src/core/connected-graph/simple.ts":
/*!********************************************!*\
  !*** ./src/core/connected-graph/simple.ts ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ui_base_1 = __webpack_require__(/*! ../../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst svg_helper_1 = __webpack_require__(/*! ../svg-helper */ \"./src/core/svg-helper.ts\");\nconst renderer_1 = __webpack_require__(/*! ../renderer */ \"./src/core/renderer.ts\");\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\nconst base_1 = __webpack_require__(/*! ./base */ \"./src/core/connected-graph/base.ts\");\nclass D3SimpleGraph extends base_1.D3ConnectedGraphSVG {\n    constructor(element, renderer, parent) {\n        super(element, renderer, parent);\n        base_1.ConnectedGraphBase.prototype.initializeGraph.call(this, element);\n        // here we convert link.source/link.target to their actual nodes to match as\n        // this is what the base graph helpers expect\n        let graph = this._element;\n        graph.links.forEach(function (link) {\n            if (typeof link.source === 'number') {\n                link.source = graph.nodes[link.source];\n            }\n            if (typeof link.target === 'number') {\n                link.target = graph.nodes[link.target];\n            }\n        });\n    }\n    renderLinks(graphArea) {\n        let self = this;\n        let graph = self._element;\n        let links = graphArea.append('g')\n            .classed('links', true)\n            .selectAll('line')\n            .data(graph.links)\n            .enter().append('line')\n            .attr('x1', function (d) { return d.source.x; })\n            .attr('y1', function (d) { return d.source.y; })\n            .attr('x2', function (d) { return d.target.x; })\n            .attr('y2', function (d) { return d.target.y; })\n            .attr('stroke-width', 1)\n            .attr('class', function (d) {\n            return d.source.key + '-' + d.target.key +\n                ' ' + d.source.key +\n                ' ' + d.target.key;\n        })\n            .classed('link', true)\n            .on('mouseenter', self.linkHoverStart)\n            .on('mouseleave', self.hoverEnd)\n            .each(function (d) {\n            svg_helper_1.addClickHelper(d3.select(this), self.getOptions(), graph.onClick, graph.onDoubleClick, graph.contextMenuItems, self._dataTooltip, graph, d.key, d.key);\n        });\n        self._dataTooltip.setTarget(links);\n        return links;\n    }\n    renderNodes(graphArea, dragStart, dragMove, dragEnd) {\n        let self = this;\n        let graph = self._element;\n        let colorMgr = self._renderer.getColorManager();\n        let nodes = graphArea.append('g')\n            .classed('nodes', true)\n            .selectAll('circle')\n            .data(graph.nodes)\n            .enter().append('circle')\n            .attr('r', 5)\n            .attr('cx', function (d) { return d.x; })\n            .attr('cy', function (d) { return d.y; })\n            .attr('fill', function (d) {\n            if (d.type) {\n                return colorMgr.getColor(d.type);\n            }\n            return colorMgr.getColor(d.key);\n        })\n            .attr('class', function (d) {\n            if (d.type) {\n                return d.type + ' ' + d.key;\n            }\n            return d.key;\n        })\n            .each(function (d) {\n            svg_helper_1.addClickHelper(d3.select(this), self.getOptions(), graph.onClick, graph.onDoubleClick, graph.contextMenuItems, self._dataTooltip, graph, d.key, d.key);\n        })\n            .classed('node', true)\n            .on('mouseenter', self.nodeHoverStart)\n            .on('mouseleave', self.hoverEnd)\n            .call(d3.drag()\n            .on('start', dragStart)\n            .on('drag', dragMove)\n            .on('end', dragEnd));\n        self._dataTooltip.setTarget(nodes);\n        return nodes;\n    }\n    render(options) {\n        let self = this;\n        // the function for moving the nodes\n        function dragMove(node) {\n            d3.select(this)\n                .attr('cx', d3.event.x)\n                .attr('cy', d3.event.y);\n            node.x = d3.event.x;\n            node.y = d3.event.y;\n            graphArea.selectAll('.' + node.key + '.link')\n                .each(function (link) {\n                // Transform to d3 Object\n                if (node.key === link.source.key) {\n                    d3.select(this).attr('x1', function (d) { return d.source.x; })\n                        .attr('y1', function (d) { return d.source.y; });\n                }\n                else {\n                    d3.select(this)\n                        .attr('x2', function (d) { return d.target.x; })\n                        .attr('y2', function (d) { return d.target.y; });\n                }\n            });\n        }\n        let graphArea = self.initializeGraphArea(options);\n        this.renderLinks(graphArea);\n        this.renderNodes(graphArea, undefined, dragMove, undefined);\n        self.configureView();\n    }\n}\nexports.D3SimpleGraph = D3SimpleGraph;\nrenderer_1.D3Renderer.register(ui_base_1.UIType.SimpleGraph, D3SimpleGraph);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9jb25uZWN0ZWQtZ3JhcGgvc2ltcGxlLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2NvcmUvY29ubmVjdGVkLWdyYXBoL3NpbXBsZS50cz84ZGU0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElPcHRpb25zLCBVSVR5cGUsIFVJRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS91aS1iYXNlJztcbmltcG9ydCB7IElDb25uZWN0ZWRHcmFwaCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9ncmFwaCc7XG5pbXBvcnQgeyBhZGRDbGlja0hlbHBlciB9IGZyb20gJy4uL3N2Zy1oZWxwZXInO1xuaW1wb3J0IHsgRDNSZW5kZXJlciB9IGZyb20gJy4uL3JlbmRlcmVyJztcblxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuXG5pbXBvcnQgeyBDb25uZWN0ZWRHcmFwaEJhc2UsIEQzQ29ubmVjdGVkR3JhcGhTVkcgfSBmcm9tICcuL2Jhc2UnO1xuXG5leHBvcnQgY2xhc3MgRDNTaW1wbGVHcmFwaCBleHRlbmRzIEQzQ29ubmVjdGVkR3JhcGhTVkcge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFVJRWxlbWVudCwgcmVuZGVyZXI6IEQzUmVuZGVyZXIsXG4gICAgICAgIHBhcmVudDogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55Pikge1xuXG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIHJlbmRlcmVyLCBwYXJlbnQpO1xuXG4gICAgICAgIENvbm5lY3RlZEdyYXBoQmFzZS5wcm90b3R5cGUuaW5pdGlhbGl6ZUdyYXBoLmNhbGwodGhpcywgZWxlbWVudCBhcyBJQ29ubmVjdGVkR3JhcGgpO1xuXG4gICAgICAgIC8vIGhlcmUgd2UgY29udmVydCBsaW5rLnNvdXJjZS9saW5rLnRhcmdldCB0byB0aGVpciBhY3R1YWwgbm9kZXMgdG8gbWF0Y2ggYXNcbiAgICAgICAgLy8gdGhpcyBpcyB3aGF0IHRoZSBiYXNlIGdyYXBoIGhlbHBlcnMgZXhwZWN0XG4gICAgICAgIGxldCBncmFwaCA9IHRoaXMuX2VsZW1lbnQgYXMgSUNvbm5lY3RlZEdyYXBoO1xuICAgICAgICBncmFwaC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5rOiBhbnkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGluay5zb3VyY2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbGluay5zb3VyY2UgPSBncmFwaC5ub2Rlc1tsaW5rLnNvdXJjZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxpbmsudGFyZ2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGxpbmsudGFyZ2V0ID0gZ3JhcGgubm9kZXNbbGluay50YXJnZXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVuZGVyTGlua3MoZ3JhcGhBcmVhOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+KTpcbiAgICAgICAgZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PiB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGdyYXBoID0gc2VsZi5fZWxlbWVudCBhcyBJQ29ubmVjdGVkR3JhcGg7XG4gICAgICAgIGxldCBsaW5rcyA9IGdyYXBoQXJlYS5hcHBlbmQoJ2cnKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2xpbmtzJywgdHJ1ZSlcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2xpbmUnKVxuICAgICAgICAgICAgLmRhdGEoZ3JhcGgubGlua3MpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoJ2xpbmUnKVxuICAgICAgICAgICAgLmF0dHIoJ3gxJywgZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC5zb3VyY2UueDsgfSlcbiAgICAgICAgICAgIC5hdHRyKCd5MScsIGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIGQuc291cmNlLnk7IH0pXG4gICAgICAgICAgICAuYXR0cigneDInLCBmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLnRhcmdldC54OyB9KVxuICAgICAgICAgICAgLmF0dHIoJ3kyJywgZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC50YXJnZXQueTsgfSlcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnNvdXJjZS5rZXkgKyAnLScgKyBkLnRhcmdldC5rZXkgK1xuICAgICAgICAgICAgICAgICAgICAnICcgKyBkLnNvdXJjZS5rZXkgK1xuICAgICAgICAgICAgICAgICAgICAnICcgKyBkLnRhcmdldC5rZXk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2xpbmsnLCB0cnVlKVxuICAgICAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgc2VsZi5saW5rSG92ZXJTdGFydClcbiAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsIHNlbGYuaG92ZXJFbmQpXG4gICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgYWRkQ2xpY2tIZWxwZXIoZDMuc2VsZWN0KHRoaXMpLCBzZWxmLmdldE9wdGlvbnMoKSwgZ3JhcGgub25DbGljayxcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGgub25Eb3VibGVDbGljaywgZ3JhcGguY29udGV4dE1lbnVJdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGF0YVRvb2x0aXAsIGdyYXBoLCBkLmtleSwgZC5rZXkpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICBzZWxmLl9kYXRhVG9vbHRpcC5zZXRUYXJnZXQobGlua3MpO1xuXG4gICAgICAgIHJldHVybiBsaW5rcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVuZGVyTm9kZXMoZ3JhcGhBcmVhOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+LFxuICAgICAgICBkcmFnU3RhcnQ6IChub2RlOiBhbnkpID0+IHZvaWQsXG4gICAgICAgIGRyYWdNb3ZlOiAobm9kZTogYW55KSA9PiB2b2lkLFxuICAgICAgICBkcmFnRW5kOiAobm9kZTogYW55KSA9PiB2b2lkKTogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PiB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGdyYXBoID0gc2VsZi5fZWxlbWVudCBhcyBJQ29ubmVjdGVkR3JhcGg7XG5cbiAgICAgICAgbGV0IGNvbG9yTWdyID0gc2VsZi5fcmVuZGVyZXIuZ2V0Q29sb3JNYW5hZ2VyKCk7XG4gICAgICAgIGxldCBub2RlcyA9IGdyYXBoQXJlYS5hcHBlbmQoJ2cnKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ25vZGVzJywgdHJ1ZSlcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2NpcmNsZScpXG4gICAgICAgICAgICAuZGF0YShncmFwaC5ub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgICAgIC5hdHRyKCdyJywgNSlcbiAgICAgICAgICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIGQueDsgfSlcbiAgICAgICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIGQueTsgfSlcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIGlmIChkLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yTWdyLmdldENvbG9yKGQudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yTWdyLmdldENvbG9yKGQua2V5KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZC50eXBlICsgJyAnICsgZC5rZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkLmtleVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBhZGRDbGlja0hlbHBlcihkMy5zZWxlY3QodGhpcyksIHNlbGYuZ2V0T3B0aW9ucygpLCBncmFwaC5vbkNsaWNrLFxuICAgICAgICAgICAgICAgICAgICBncmFwaC5vbkRvdWJsZUNsaWNrLCBncmFwaC5jb250ZXh0TWVudUl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXRhVG9vbHRpcCwgZ3JhcGgsIGQua2V5LCBkLmtleSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNsYXNzZWQoJ25vZGUnLCB0cnVlKVxuICAgICAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgc2VsZi5ub2RlSG92ZXJTdGFydClcbiAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsIHNlbGYuaG92ZXJFbmQpXG4gICAgICAgICAgICAuY2FsbCgoPGFueT5kMykuZHJhZygpXG4gICAgICAgICAgICAgICAgLm9uKCdzdGFydCcsIGRyYWdTdGFydClcbiAgICAgICAgICAgICAgICAub24oJ2RyYWcnLCBkcmFnTW92ZSlcbiAgICAgICAgICAgICAgICAub24oJ2VuZCcsIGRyYWdFbmQpKTtcblxuICAgICAgICBzZWxmLl9kYXRhVG9vbHRpcC5zZXRUYXJnZXQobm9kZXMpO1xuXG4gICAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICAvLyB0aGUgZnVuY3Rpb24gZm9yIG1vdmluZyB0aGUgbm9kZXNcbiAgICAgICAgZnVuY3Rpb24gZHJhZ01vdmUobm9kZTogYW55KSB7XG4gICAgICAgICAgICBkMy5zZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgICAuYXR0cignY3gnLCBkMy5ldmVudC54KVxuICAgICAgICAgICAgICAgIC5hdHRyKCdjeScsIGQzLmV2ZW50LnkpO1xuICAgICAgICAgICAgbm9kZS54ID0gZDMuZXZlbnQueDtcbiAgICAgICAgICAgIG5vZGUueSA9IGQzLmV2ZW50Lnk7XG5cbiAgICAgICAgICAgIGdyYXBoQXJlYS5zZWxlY3RBbGwoJy4nICsgbm9kZS5rZXkgKyAnLmxpbmsnKVxuICAgICAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChsaW5rOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRvIGQzIE9iamVjdFxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5rZXkgPT09IGxpbmsuc291cmNlLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ3gxJywgZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC5zb3VyY2UueDsgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigneTEnLCBmdW5jdGlvbiAoZDogYW55KSB7IHJldHVybiBkLnNvdXJjZS55OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4MicsIGZ1bmN0aW9uIChkOiBhbnkpIHsgcmV0dXJuIGQudGFyZ2V0Lng7IH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgZnVuY3Rpb24gKGQ6IGFueSkgeyByZXR1cm4gZC50YXJnZXQueTsgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdyYXBoQXJlYSA9IHNlbGYuaW5pdGlhbGl6ZUdyYXBoQXJlYShvcHRpb25zKTtcbiAgICAgICAgdGhpcy5yZW5kZXJMaW5rcyhncmFwaEFyZWEpO1xuICAgICAgICB0aGlzLnJlbmRlck5vZGVzKGdyYXBoQXJlYSwgdW5kZWZpbmVkLCBkcmFnTW92ZSwgdW5kZWZpbmVkKTtcblxuICAgICAgICBzZWxmLmNvbmZpZ3VyZVZpZXcoKTtcbiAgICB9XG59XG5EM1JlbmRlcmVyLnJlZ2lzdGVyKFVJVHlwZS5TaW1wbGVHcmFwaCwgRDNTaW1wbGVHcmFwaCk7Il0sIm1hcHBpbmdzIjoiOztBQUFBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQXBJQTtBQXFJQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/core/connected-graph/simple.ts\n");

/***/ }),

/***/ "./src/core/context-menu.ts":
/*!**********************************!*\
  !*** ./src/core/context-menu.ts ***!
  \**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction positionMenu(div, rect) {\n    let bodyWidth = document.body.clientWidth;\n    let bodyHeight = document.body.clientHeight;\n    // these points define the top left of our menu\n    let divX = rect.left;\n    let divY = rect.top;\n    // if we draw on the right we do\n    if (rect.right + div.clientWidth < bodyWidth) {\n        divX = rect.right;\n    }\n    else {\n        divX = rect.left - div.clientWidth;\n    }\n    // if we cannot draw down we draw up\n    if (rect.top + div.clientHeight > bodyHeight) {\n        divY = rect.top - div.clientHeight;\n    }\n    div.style.left = (divX - 2) + 'px';\n    div.style.top = (divY - 2) + 'px';\n}\nfunction createMenu(event, data, contextMenuItems, rect, propogateEvent) {\n    let menuDiv;\n    menuDiv = document.createElement('div');\n    menuDiv.setAttribute('class', 'context-menu');\n    menuDiv.oncontextmenu = function (e) {\n        removeMenu();\n        e.preventDefault();\n    };\n    document.body.appendChild(menuDiv);\n    if (contextMenuItems.length > 0) {\n        let menuList = document.createElement('ul');\n        menuDiv.appendChild(menuList);\n        for (let i = 0; i < contextMenuItems.length; ++i) {\n            let item = contextMenuItems[i];\n            let li = document.createElement('li');\n            if (item.divider) {\n                li.className += ' is-divider';\n                li.innerHTML = '<hr>';\n            }\n            else {\n                if (!item.title) {\n                    console.error('No title attribute set. Check the spelling of your options.');\n                }\n                if (item.disabled) {\n                    li.className += ' is-disabled';\n                }\n                if (!item.action && !item.submenu) {\n                    li.className += ' is-header';\n                }\n                if (item.submenu) {\n                    li.innerHTML = `<span><text>${item.title}</text>` +\n                        '<text style=\"width: 5px; float: right; color: #000000A0\">&#9658</text></span>';\n                }\n                else {\n                    li.innerHTML = item.title;\n                }\n                li.onclick = function (d) {\n                    if (item.disabled)\n                        return; // do nothing if disabled\n                    if (!item.action)\n                        return; // headers have no \"action\"\n                    item.action(li, data, i);\n                    removeMenu();\n                };\n                li.onmouseenter = function () {\n                    removeSubmenu(contextMenuItems);\n                    if (item.submenu) {\n                        let relativeRect = li.getBoundingClientRect();\n                        let rect = {\n                            top: relativeRect.top + window.scrollY,\n                            bottom: relativeRect.bottom + window.scrollY,\n                            left: relativeRect.left + window.scrollX,\n                            right: relativeRect.right + window.scrollX,\n                            height: relativeRect.height,\n                            width: relativeRect.width\n                        };\n                        item.submenuDiv = createMenu(event, data, item.submenu, rect, propogateEvent);\n                    }\n                };\n            }\n            menuList.appendChild(li);\n        }\n        menuDiv.style.display = 'block';\n        positionMenu(menuDiv, rect);\n        if (!propogateEvent) {\n            event.stopPropagation();\n        }\n    }\n    return menuDiv;\n}\nfunction removeMenuItem(item) {\n    if (item.submenuDiv) {\n        document.body.removeChild(item.submenuDiv);\n        delete item.submenuDiv;\n    }\n    if (item.submenu) {\n        removeSubmenu(item.submenu);\n    }\n}\nfunction removeSubmenu(items) {\n    items.forEach(function (item, index, items) {\n        removeMenuItem(item);\n    });\n}\nfunction removeMenu() {\n    removeSubmenu(lastMenu);\n    let menus = document.getElementsByClassName('context-menu');\n    while (menus.length) {\n        document.body.removeChild(menus[0]);\n    }\n}\nfunction keyupListener() {\n    window.onkeyup = function (e) {\n        if (e.keyCode === 27) {\n            removeMenu();\n        }\n    };\n}\nlet lastMenu = [];\nfunction showContextMenu(event, data, contextMenuItems, propogateEvent = false) {\n    if (event) {\n        keyupListener();\n        removeMenu();\n        lastMenu = contextMenuItems;\n        createMenu(event, data, contextMenuItems, {\n            left: event.pageX,\n            top: event.pageY,\n            right: event.pageX,\n            bottom: event.pageY,\n            height: 0,\n            width: 0\n        }, propogateEvent);\n        event.preventDefault();\n    }\n}\nexports.showContextMenu = showContextMenu;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9jb250ZXh0LW1lbnUudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9zcmMvY29yZS9jb250ZXh0LW1lbnUudHM/ZjNjNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLWJhc2UnO1xuXG5mdW5jdGlvbiBwb3NpdGlvbk1lbnUoZGl2OiBIVE1MRGl2RWxlbWVudCwgcmVjdDogQ2xpZW50UmVjdCkge1xuICAgIGxldCBib2R5V2lkdGggPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xuICAgIGxldCBib2R5SGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgICAvLyB0aGVzZSBwb2ludHMgZGVmaW5lIHRoZSB0b3AgbGVmdCBvZiBvdXIgbWVudVxuICAgIGxldCBkaXZYID0gcmVjdC5sZWZ0O1xuICAgIGxldCBkaXZZID0gcmVjdC50b3A7XG4gICAgLy8gaWYgd2UgZHJhdyBvbiB0aGUgcmlnaHQgd2UgZG9cbiAgICBpZiAocmVjdC5yaWdodCArIGRpdi5jbGllbnRXaWR0aCA8IGJvZHlXaWR0aCkge1xuICAgICAgICBkaXZYID0gcmVjdC5yaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkaXZYID0gcmVjdC5sZWZ0IC0gZGl2LmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGNhbm5vdCBkcmF3IGRvd24gd2UgZHJhdyB1cFxuICAgIGlmIChyZWN0LnRvcCArIGRpdi5jbGllbnRIZWlnaHQgPiBib2R5SGVpZ2h0KSB7XG4gICAgICAgIGRpdlkgPSByZWN0LnRvcCAtIGRpdi5jbGllbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgZGl2LnN0eWxlLmxlZnQgPSAoZGl2WCAtIDIpICsgJ3B4JztcbiAgICBkaXYuc3R5bGUudG9wID0gKGRpdlkgLSAyKSArICdweCc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGE6IGFueSwgY29udGV4dE1lbnVJdGVtczogSUNvbnRleHRNZW51SXRlbVtdLCByZWN0OiBDbGllbnRSZWN0LFxuICAgIHByb3BvZ2F0ZUV2ZW50OiBib29sZWFuKTogSFRNTERpdkVsZW1lbnQge1xuICAgIGxldCBtZW51RGl2OiBhbnk7XG4gICAgbWVudURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIG1lbnVEaXYuc2V0QXR0cmlidXRlKCdjbGFzcycsICdjb250ZXh0LW1lbnUnKTtcbiAgICBtZW51RGl2Lm9uY29udGV4dG1lbnUgPSBmdW5jdGlvbiAoZTogTW91c2VFdmVudCkge1xuICAgICAgICByZW1vdmVNZW51KCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtZW51RGl2KTtcblxuICAgIGlmIChjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IG1lbnVMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTtcbiAgICAgICAgbWVudURpdi5hcHBlbmRDaGlsZChtZW51TGlzdCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgaXRlbTogSUNvbnRleHRNZW51SXRlbSA9IGNvbnRleHRNZW51SXRlbXNbaV07XG4gICAgICAgICAgICBsZXQgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgICAgICAgICAgaWYgKGl0ZW0uZGl2aWRlcikge1xuICAgICAgICAgICAgICAgIGxpLmNsYXNzTmFtZSArPSAnIGlzLWRpdmlkZXInO1xuICAgICAgICAgICAgICAgIGxpLmlubmVySFRNTCA9ICc8aHI+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRpdGxlIGF0dHJpYnV0ZSBzZXQuIENoZWNrIHRoZSBzcGVsbGluZyBvZiB5b3VyIG9wdGlvbnMuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpLmNsYXNzTmFtZSArPSAnIGlzLWRpc2FibGVkJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmFjdGlvbiAmJiAhaXRlbS5zdWJtZW51KSB7XG4gICAgICAgICAgICAgICAgICAgIGxpLmNsYXNzTmFtZSArPSAnIGlzLWhlYWRlcic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc3VibWVudSkge1xuICAgICAgICAgICAgICAgICAgICBsaS5pbm5lckhUTUwgPSBgPHNwYW4+PHRleHQ+JHtpdGVtLnRpdGxlfTwvdGV4dD5gICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8dGV4dCBzdHlsZT1cIndpZHRoOiA1cHg7IGZsb2F0OiByaWdodDsgY29sb3I6ICMwMDAwMDBBMFwiPiYjOTY1ODwvdGV4dD48L3NwYW4+J1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpLmlubmVySFRNTCA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGkub25jbGljayA9IGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHJldHVybjsgLy8gZG8gbm90aGluZyBpZiBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uYWN0aW9uKSByZXR1cm47IC8vIGhlYWRlcnMgaGF2ZSBubyBcImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYWN0aW9uKGxpLCBkYXRhLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTWVudSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxpLm9ubW91c2VlbnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3VibWVudShjb250ZXh0TWVudUl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc3VibWVudSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlbGF0aXZlUmVjdCA9IGxpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiByZWxhdGl2ZVJlY3QudG9wICsgd2luZG93LnNjcm9sbFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiByZWxhdGl2ZVJlY3QuYm90dG9tICsgd2luZG93LnNjcm9sbFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogcmVsYXRpdmVSZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodDogcmVsYXRpdmVSZWN0LnJpZ2h0ICsgd2luZG93LnNjcm9sbFgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiByZWxhdGl2ZVJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiByZWxhdGl2ZVJlY3Qud2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3VibWVudURpdiA9IGNyZWF0ZU1lbnUoZXZlbnQsIGRhdGEsIGl0ZW0uc3VibWVudSwgcmVjdCwgcHJvcG9nYXRlRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtZW51TGlzdC5hcHBlbmRDaGlsZChsaSk7XG4gICAgICAgIH1cbiAgICAgICAgbWVudURpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgcG9zaXRpb25NZW51KG1lbnVEaXYsIHJlY3QpO1xuXG4gICAgICAgIGlmICghcHJvcG9nYXRlRXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZW51RGl2O1xufVxuXG5mdW5jdGlvbiByZW1vdmVNZW51SXRlbShpdGVtOiBJQ29udGV4dE1lbnVJdGVtKSB7XG4gICAgaWYgKGl0ZW0uc3VibWVudURpdikge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGl0ZW0uc3VibWVudURpdik7XG4gICAgICAgIGRlbGV0ZSBpdGVtLnN1Ym1lbnVEaXY7XG4gICAgfVxuICAgIGlmIChpdGVtLnN1Ym1lbnUpIHtcbiAgICAgICAgcmVtb3ZlU3VibWVudShpdGVtLnN1Ym1lbnUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3VibWVudShpdGVtczogSUNvbnRleHRNZW51SXRlbVtdKSB7XG4gICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbTogSUNvbnRleHRNZW51SXRlbSwgaW5kZXg6IG51bWJlcixcbiAgICAgICAgaXRlbXM6IElDb250ZXh0TWVudUl0ZW1bXSkge1xuICAgICAgICByZW1vdmVNZW51SXRlbShpdGVtKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVudSgpIHtcbiAgICByZW1vdmVTdWJtZW51KGxhc3RNZW51KTtcblxuICAgIGxldCBtZW51cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NvbnRleHQtbWVudScpO1xuICAgIHdoaWxlIChtZW51cy5sZW5ndGgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtZW51c1swXSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBrZXl1cExpc3RlbmVyKCkge1xuICAgIHdpbmRvdy5vbmtleXVwID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAgIHJlbW92ZU1lbnUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubGV0IGxhc3RNZW51OiBJQ29udGV4dE1lbnVJdGVtW10gPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBzaG93Q29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGE6IGFueSwgY29udGV4dE1lbnVJdGVtczogSUNvbnRleHRNZW51SXRlbVtdLFxuICAgIHByb3BvZ2F0ZUV2ZW50OiBib29sZWFuID0gZmFsc2UpIHtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgICBrZXl1cExpc3RlbmVyKCk7XG4gICAgICAgIHJlbW92ZU1lbnUoKTtcblxuICAgICAgICBsYXN0TWVudSA9IGNvbnRleHRNZW51SXRlbXM7XG4gICAgICAgIGNyZWF0ZU1lbnUoZXZlbnQsIGRhdGEsIGNvbnRleHRNZW51SXRlbXMsIHtcbiAgICAgICAgICAgIGxlZnQ6IGV2ZW50LnBhZ2VYLFxuICAgICAgICAgICAgdG9wOiBldmVudC5wYWdlWSxcbiAgICAgICAgICAgIHJpZ2h0OiBldmVudC5wYWdlWCxcbiAgICAgICAgICAgIGJvdHRvbTogZXZlbnQucGFnZVksXG4gICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICB3aWR0aDogMFxuICAgICAgICB9LCBwcm9wb2dhdGVFdmVudCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufSJdLCJtYXBwaW5ncyI6Ijs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/core/context-menu.ts\n");

/***/ }),

/***/ "./src/core/element-manager.ts":
/*!*************************************!*\
  !*** ./src/core/element-manager.ts ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./src/core/utilities.ts\");\nconst ui_base_1 = __webpack_require__(/*! ../interface/ui-base */ \"./src/interface/ui-base.ts\");\nvar GroupType;\n(function (GroupType) {\n    GroupType[GroupType[\"Tooltip\"] = 0] = \"Tooltip\";\n    GroupType[GroupType[\"Highlight\"] = 1] = \"Highlight\";\n    GroupType[GroupType[\"Render\"] = 2] = \"Render\";\n    GroupType[GroupType[\"Focus\"] = 3] = \"Focus\";\n    GroupType[GroupType[\"Select\"] = 4] = \"Select\";\n    GroupType[GroupType[\"None\"] = 5] = \"None\";\n})(GroupType || (GroupType = {}));\nclass GroupInfo {\n    constructor() {\n        this._nameMap = {};\n        this._objectMap = new Map();\n    }\n}\nexports.GroupInfo = GroupInfo;\nfunction addTooltipCallback(elem) {\n    if (!elem.getTooltip) {\n        elem.getTooltip = function (event) {\n            if (elem.renderer && elem.renderer.getTooltipData) {\n                return elem.renderer.getTooltipData(elem, event);\n            }\n            return [{ source: elem, group: '', metrics: {} }];\n        };\n    }\n}\nfunction addClickCallback(elem) {\n    if (!elem.api) {\n        elem.api = {};\n    }\n    if (!elem.api.select) {\n        elem.api.select = function (event) {\n            if (elem.renderer && elem.renderer.select) {\n                return elem.renderer.select(elem, event);\n            }\n        };\n    }\n}\nfunction addHoverCallback(elem) {\n    if (!elem.api) {\n        elem.api = {};\n    }\n    if (!elem.api.cursorChange) {\n        elem.api.cursorChange = function (event) {\n            if (elem.renderer && elem.renderer.cursorChange) {\n                return elem.renderer.cursorChange(elem, event);\n            }\n        };\n    }\n    if (!elem.api.focus) {\n        elem.api.focus = function (event) {\n            /** @deprecated ('Deprecated since 1.14.0 in favor of focus.  Will be removed in 2.x') */\n            if (elem.renderer && !elem.renderer.focus && elem.renderer.hover) {\n                return elem.renderer.hover(elem, event);\n            }\n            // end deprecated\n            if (elem.renderer && elem.renderer.focus) {\n                return elem.renderer.focus(elem, event);\n            }\n        };\n        elem.api.hover = elem.api.focus;\n    }\n    if (!elem.api.brush) {\n        elem.api.brush = function (event) {\n            if (elem.renderer && elem.renderer.brush) {\n                return elem.renderer.brush(elem, event);\n            }\n        };\n    }\n    if (!elem.api.zoom) {\n        elem.api.zoom = function (event) {\n            if (elem.renderer && elem.renderer.zoom) {\n                return elem.renderer.zoom(elem, event);\n            }\n        };\n    }\n}\nfunction addRenderCallback(elem) {\n    if (!elem.api) {\n        elem.api = {};\n    }\n    if (!elem.api.brush) {\n        elem.api.brush = function (event) {\n            if (elem.renderer && elem.renderer.brush) {\n                return elem.renderer.brush(elem, event);\n            }\n        };\n    }\n    if (!elem.api.render) {\n        elem.api.render = function (renderer, options) {\n            if (!renderer) {\n                renderer = elem.renderer;\n            }\n            else {\n                elem.renderer = renderer;\n            }\n            return new Promise(function (resolve, reject) {\n                if (renderer) {\n                    elem.renderer.render(elem, options);\n                    resolve('Ok');\n                }\n                reject('No renderer available');\n            });\n        };\n    }\n}\n/** adds some default callbacks to a given UI object */\nfunction addCallbacks(elem) {\n    addTooltipCallback(elem);\n    addHoverCallback(elem);\n    addClickCallback(elem);\n    addRenderCallback(elem);\n}\nexports.addCallbacks = addCallbacks;\n/** used to group UI elements together.  Can be used to sync\n * selection/tooltips\n */\nclass ElementManager {\n    constructor() {\n        /** the list of elements managed by this manager */\n        this._elems = [];\n        let self = this;\n        this._groupInfo = [];\n        for (let i = 0; i < 5 /* None */; ++i) {\n            this._groupInfo.push(new GroupInfo());\n        }\n        this._onHoverCallback = function (event) {\n            if (!event.caller) {\n                console.warn('Warning no caller specified for this event, cannot propoate changes', event);\n            }\n            let elems = self._groupInfo[3 /* Focus */]._objectMap.get(event.caller);\n            if (elems) {\n                if (self._hoverCallback) {\n                    self._hoverCallback(elems, event);\n                }\n                else {\n                    for (let i = 0; i < elems.length; ++i) {\n                        let elem = elems[i];\n                        /** @deprecated to remove in 2.x */\n                        if (event.caller !== elem && elem.api && !elem.api.focus && elem.api.hover) {\n                            elem.api.hover(event);\n                        }\n                        // end deprecated\n                        if (event.caller !== elem && elem.api && elem.api.focus) {\n                            elem.api.focus(event);\n                        }\n                    }\n                }\n            }\n        };\n        let dispatch = function (groupType, callback, apiName) {\n            return function (event) {\n                if (!event.caller) {\n                    console.warn('Warning no caller specified for this event, cannot propagate changes', event);\n                }\n                let elems = self._groupInfo[groupType]._objectMap.get(event.caller);\n                if (elems) {\n                    if (callback) {\n                        callback(elems, event);\n                    }\n                    else {\n                        for (let i = 0; i < elems.length; ++i) {\n                            let elem = elems[i];\n                            if (event.caller !== elem && elem.api && elem.api[apiName]) {\n                                elem.api[apiName](event);\n                            }\n                        }\n                    }\n                }\n            };\n        };\n        this._onZoomCallback = dispatch(1 /* Highlight */, this._zoomCallback, 'zoom');\n        this._onCursorChangeCallback = dispatch(1 /* Highlight */, this._cursorChangeCallback, 'cursorChange');\n        this._onBrushCallback = dispatch(1 /* Highlight */, this._brushCallback, 'brush');\n        this._onClickCallback = dispatch(4 /* Select */, this._clickCallback, 'select');\n        this._onTooltipCallback = function (event) {\n            if (!event.caller) {\n                console.warn('Warning no caller specified for this event, cannot propoate changes', event);\n            }\n            let ret = [];\n            let elems = self._groupInfo[0 /* Tooltip */]._objectMap.get(event.caller);\n            if (elems) {\n                if (self._tooltipCallback) {\n                    ret = ret.concat(self._tooltipCallback(elems, event));\n                }\n                else {\n                    for (let i = 0; i < elems.length; ++i) {\n                        let elem = elems[i];\n                        let data = elem.getTooltip(event);\n                        ret = ret.concat(data);\n                    }\n                }\n                if (event.data && event.data.tooltip) {\n                    event.data.tooltip.setData(event.data.tooltip.getTitle(), ret);\n                }\n                return ret;\n            }\n        };\n        this._onUpdateCallback = function (caller, options) {\n            if (!caller) {\n                console.warn('Warning no caller specified for this event, cannot propoate changes');\n            }\n            let elems = self._groupInfo[2 /* Render */]._objectMap.get(caller);\n            if (elems) {\n                for (let i = 0; i < elems.length; ++i) {\n                    let elem = elems[i];\n                    if (elem.renderer) {\n                        // use the previous renderer\n                        elem.renderer.render(elem, options);\n                    }\n                }\n            }\n        };\n    }\n    removeFromGroup(elem, type) {\n        let list = this._groupInfo[type]._objectMap.get(elem);\n        if (list) {\n            utilities_1.removeFromList(elem, list);\n        }\n    }\n    addToGroup(elem, groupName, type) {\n        if (!this._groupInfo[type]._nameMap.hasOwnProperty(groupName)) {\n            this._groupInfo[type]._nameMap[groupName] = [];\n        }\n        this._groupInfo[type]._nameMap[groupName].push(elem);\n        this._groupInfo[type]._objectMap.set(elem, this._groupInfo[type]._nameMap[groupName]);\n    }\n    /**\n     * add a elem to the manager\n     *\n     * @param elem - the elem that should should be added\n     * @param tooltipGroupName - Name of the group that this elem should be \"ganged\"\n     *   with when showing tooltips.  If not specified, this elem will not be \"ganged\" with any\n     *   other elem.\n     * @param highlightGroupName - Name of the group that this elem should be \"ganged\"\n     *   with when doing highlighting.  If not specified, this elem will not be \"ganged\" with any\n     *   other elem.\n     * @param renderGroupName - Name of the group that this elem should be \"ganged\"\n     *   with when rerendering.  If not specified, this elem will not be \"ganged\" with any\n     *   other elem.\n     * @return - The elem manager instance.\n     */\n    addElement(elem, tooltipGroupName, highlightGroupName, renderGroupName) {\n        if (!elem) {\n            return this;\n        }\n        let index = this._elems.indexOf(elem);\n        if (index === -1) {\n            addCallbacks(elem);\n            this._elems.push(elem);\n            let renderedElements;\n            if (!elem.getElements) {\n                elem.getElements = function () { return [elem]; };\n            }\n            renderedElements = elem.getElements();\n            for (let i = 0; i < renderedElements.length; ++i) {\n                let renderedElement = renderedElements[i];\n                if (tooltipGroupName) {\n                    this.addToTooltipGroup(renderedElement, tooltipGroupName);\n                }\n                if (highlightGroupName) {\n                    this.addToHighlightGroup(renderedElement, highlightGroupName);\n                }\n                if (renderGroupName) {\n                    this.addToRenderGroup(renderedElement, renderGroupName);\n                }\n            }\n        }\n        else {\n            throw 'Element already exists in this manager';\n        }\n        elem.manager = this;\n        return this;\n    }\n    /**\n     * remove a elem from the manager, removes it from all groups\n     *\n     * @param elem - the elem that should should be removed\n     *\n     * @return - The elem manager instance.\n     */\n    removeElement(elem) {\n        if (!elem) {\n            return this;\n        }\n        let renderedElements;\n        if (elem.getElements) {\n            renderedElements = elem.getElements();\n        }\n        else {\n            renderedElements = [elem];\n        }\n        for (let i = 0; i < renderedElements.length; ++i) {\n            let renderedElement = renderedElements[i];\n            this.removeFromTooltipGroup(renderedElement);\n            this.removeFromHighlightGroup(renderedElement);\n            this.removeFromRenderGroup(renderedElement);\n        }\n        utilities_1.removeFromList(elem, this._elems);\n        delete elem.manager;\n        return this;\n    }\n    /**\n     * Return all the elems in this list\n     * @return the list of elems\n     */\n    getElements() {\n        return this._elems;\n    }\n    /**\n     * user callback called when a tooltip is created\n     *\n     * @param the functiotn to be called\n     */\n    setZoomCallback(callback) {\n        this._zoomCallback = callback;\n        return this;\n    }\n    /**\n     * user callback called when a hover event happens\n     *\n     * @param the function to be called\n     */\n    setHoverCallback(callback) {\n        this._hoverCallback = callback;\n        return this;\n    }\n    /**\n     * user callback called when a hover event happens\n     *\n     * @param the function to be called\n     */\n    setClickCallback(callback) {\n        this._clickCallback = callback;\n        return this;\n    }\n    /**\n     * user callback called when a tooltip is created\n     *\n     * @param the functiotn to be called\n     */\n    setTooltipCallback(callback) {\n        this._tooltipCallback = callback;\n        return this;\n    }\n    /**\n     * user callback called when a selection event happens\n     *\n     * @param the function to be called\n     */\n    setBrushCallback(callback) {\n        this._brushCallback = callback;\n        return this;\n    }\n    /**\n     * set the group this tooltip is associated with\n     *\n     * @param elem - the elem that should should be \"ganged\"\n     * @param groupName - Name of the group that this elem should be \"ganged\"\n     *   with.\n     *\n     * @return - The elem manager instance.\n     */\n    addToTooltipGroup(elem, groupName) {\n        addTooltipCallback(elem);\n        this.removeFromTooltipGroup(elem);\n        this.addToGroup(elem, groupName, 0 /* Tooltip */);\n        let self = this;\n        if (elem.onTooltip) {\n            let func = elem.onTooltip;\n            elem.onTooltip = function (event) {\n                self._onTooltipCallback(event);\n                func(event);\n            };\n        }\n        else {\n            elem.onTooltip = this._onTooltipCallback;\n        }\n        return this;\n    }\n    /**\n     * remove the elem from the tooltip group it is in\n     *\n     * @param elem - the elem that should should be \"unganged\"\n     *\n     * @return - The elem manager instance.\n     */\n    removeFromTooltipGroup(elem) {\n        this.removeFromGroup(elem, 0 /* Tooltip */);\n        return this;\n    }\n    /**\n    * set the group to sync this elem with\n    *\n    * @param elem - the elem that should should be \"ganged\"\n    * @param groupName - Name of the group that this elem should be \"ganged\"\n    *   with.\n    *\n    * @return - The elem manager instance.\n    */\n    addToFocusGroup(elem, groupName) {\n        addHoverCallback(elem);\n        this.removeFromFocusGroup(elem);\n        let self = this;\n        if (elem.onHover) {\n            let func = elem.onHover;\n            elem.onHover = function (event) {\n                self._onHoverCallback(event);\n                func(event);\n            };\n        }\n        else {\n            elem.onHover = self._onHoverCallback;\n        }\n        this.addToGroup(elem, groupName, 3 /* Focus */);\n        return this;\n    }\n    /**\n     * remove the elem from the zoom group it is in\n     *\n     * @param elem - the elem that should should be \"unganged\"\n     *\n     * @return - The elem manager instance.\n     */\n    removeFromFocusGroup(elem) {\n        this.removeFromGroup(elem, 3 /* Focus */);\n        return this;\n    }\n    /**\n    * set the group to sync this elem with\n    *\n    * @param elem - the elem that should should be \"ganged\"\n    * @param groupName - Name of the group that this elem should be \"ganged\"\n    *   with.\n    *\n    * @return - The elem manager instance.\n    */\n    addToSelectGroup(elem, groupName) {\n        addClickCallback(elem);\n        this.removeFromSelectGroup(elem);\n        let self = this;\n        if (elem.onClick) {\n            let func = elem.onClick;\n            elem.onClick = function (event) {\n                self._onClickCallback(event);\n                func(event);\n            };\n        }\n        else {\n            elem.onClick = self._onClickCallback;\n        }\n        this.addToGroup(elem, groupName, 4 /* Select */);\n        return this;\n    }\n    /**\n     * remove the elem from the zoom group it is in\n     *\n     * @param elem - the elem that should should be \"unganged\"\n     *\n     * @return - The elem manager instance.\n     */\n    removeFromSelectGroup(elem) {\n        this.removeFromGroup(elem, 4 /* Select */);\n        return this;\n    }\n    /**\n     * set the group to sync this elem with\n     *\n     * @param elem - the elem that should should be \"ganged\"\n     * @param groupName - Name of the group that this elem should be \"ganged\"\n     *   with.\n     *\n     * @return - The elem manager instance.\n     */\n    addToHighlightGroup(elem, groupName) {\n        addHoverCallback(elem);\n        this.removeFromHighlightGroup(elem);\n        this.addToFocusGroup(elem, groupName);\n        this.addToSelectGroup(elem, groupName);\n        let self = this;\n        if (elem.onBrush) {\n            let func = elem.onBrush;\n            elem.onBrush = function (event) {\n                self._onBrushCallback(event);\n                func(event);\n            };\n        }\n        else {\n            elem.onBrush = self._onBrushCallback;\n        }\n        if (elem.onCursorChanged) {\n            let func = elem.onCursorChanged;\n            elem.onCursorChanged = function (event) {\n                self._onCursorChangeCallback(event);\n                func(event);\n            };\n        }\n        else {\n            elem.onCursorChanged = this._onCursorChangeCallback;\n        }\n        if (elem.onZoom) {\n            let func = elem.onZoom;\n            elem.onZoom = function (event) {\n                self._onZoomCallback(event);\n                func(event);\n            };\n        }\n        else {\n            elem.onZoom = this._onZoomCallback;\n        }\n        let elems = this._groupInfo[1 /* Highlight */]._nameMap[groupName];\n        if (elems && elems.length) {\n            let oldElem = elems[0];\n            if (oldElem.api.getOptions && elem.api && elem.api.zoom) {\n                let options = oldElem.api.getOptions();\n                let zoomEvent = utilities_1.copy(options);\n                zoomEvent.event = ui_base_1.EventType.Zoom;\n                setTimeout(() => {\n                    elem.api.zoom(zoomEvent);\n                });\n            }\n        }\n        this.addToGroup(elem, groupName, 1 /* Highlight */);\n        return this;\n    }\n    /**\n     * remove the elem from the zoom group it is in\n     *\n     * @param elem - the elem that should should be \"unganged\"\n     *\n     * @return - The elem manager instance.\n     */\n    removeFromHighlightGroup(elem) {\n        this.removeFromFocusGroup(elem);\n        this.removeFromSelectGroup(elem);\n        this.removeFromGroup(elem, 1 /* Highlight */);\n        return this;\n    }\n    /**\n     * set the group to select this elem with\n     *\n     * @param elem - the elem that should should be \"ganged\"\n     * @param groupName - Name of the group that this elem should be \"ganged\"\n     *   with.\n     *\n     * @return - The elem manager instance.\n     */\n    addToRenderGroup(elem, groupName) {\n        addRenderCallback(elem);\n        this.removeFromRenderGroup(elem);\n        this.addToGroup(elem, groupName, 2 /* Render */);\n        let self = this;\n        if (elem.handleUpdate) {\n            let func = elem.handleUpdate;\n            elem.handleUpdate = function (caller, options) {\n                self._onUpdateCallback(caller, options);\n                func(caller, options);\n            };\n        }\n        else {\n            elem.handleUpdate = this._onUpdateCallback;\n        }\n        return this;\n    }\n    /**\n     * remove the elem from the zoom group it is in\n     *\n     * @param elem - the elem that should should be \"unganged\"\n     *\n     * @return - The elem manager instance.\n     */\n    removeFromRenderGroup(elem) {\n        this.removeFromGroup(elem, 2 /* Render */);\n        return this;\n    }\n    /** clear all the elements in this list */\n    clear() {\n        this._elems.length = 0;\n        this._groupInfo.length = 0;\n        for (let i = 0; i < 5 /* None */; ++i) {\n            this._groupInfo.push(new GroupInfo());\n        }\n    }\n}\nexports.ElementManager = ElementManager;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9lbGVtZW50LW1hbmFnZXIudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9zcmMvY29yZS9lbGVtZW50LW1hbmFnZXIudHM/NjNiMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3B5LCByZW1vdmVGcm9tTGlzdCB9IGZyb20gJy4vdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gICAgVUlFbGVtZW50LCBVSUVsZW1lbnRNYW5hZ2VyLCBVSVJlbmRlcmVyLCBJRXZlbnQsIElPcHRpb25zLFxuICAgIElUb29sdGlwRGF0YSwgRXZlbnRUeXBlXG59IGZyb20gJy4uL2ludGVyZmFjZS91aS1iYXNlJztcblxuY29uc3QgZW51bSBHcm91cFR5cGUge1xuICAgIFRvb2x0aXAsXG4gICAgSGlnaGxpZ2h0LFxuICAgIFJlbmRlcixcbiAgICBGb2N1cyxcbiAgICBTZWxlY3QsXG4gICAgTm9uZVxufVxuXG5leHBvcnQgY2xhc3MgR3JvdXBJbmZvIHtcbiAgICBwdWJsaWMgX25hbWVNYXA6IHsgW2luZGV4OiBzdHJpbmddOiBVSUVsZW1lbnRbXSB9O1xuICAgIHB1YmxpYyBfb2JqZWN0TWFwOiBNYXA8VUlFbGVtZW50LCBVSUVsZW1lbnRbXT47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fbmFtZU1hcCA9IHt9O1xuICAgICAgICB0aGlzLl9vYmplY3RNYXAgPSBuZXcgTWFwPFVJRWxlbWVudCwgVUlFbGVtZW50W10+KCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRUb29sdGlwQ2FsbGJhY2soZWxlbTogVUlFbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtLmdldFRvb2x0aXApIHtcbiAgICAgICAgZWxlbS5nZXRUb29sdGlwID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpOiBJVG9vbHRpcERhdGFbXSB7XG4gICAgICAgICAgICBpZiAoZWxlbS5yZW5kZXJlciAmJiBlbGVtLnJlbmRlcmVyLmdldFRvb2x0aXBEYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucmVuZGVyZXIuZ2V0VG9vbHRpcERhdGEoZWxlbSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFt7IHNvdXJjZTogZWxlbSwgZ3JvdXA6ICcnLCBtZXRyaWNzOiB7fSB9XTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gYWRkQ2xpY2tDYWxsYmFjayhlbGVtOiBVSUVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW0uYXBpKSB7XG4gICAgICAgIGVsZW0uYXBpID0ge31cbiAgICB9XG4gICAgaWYgKCFlbGVtLmFwaS5zZWxlY3QpIHtcbiAgICAgICAgZWxlbS5hcGkuc2VsZWN0ID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChlbGVtLnJlbmRlcmVyICYmIGVsZW0ucmVuZGVyZXIuc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucmVuZGVyZXIuc2VsZWN0KGVsZW0sIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gYWRkSG92ZXJDYWxsYmFjayhlbGVtOiBVSUVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW0uYXBpKSB7XG4gICAgICAgIGVsZW0uYXBpID0ge31cbiAgICB9XG4gICAgaWYgKCFlbGVtLmFwaS5jdXJzb3JDaGFuZ2UpIHtcbiAgICAgICAgZWxlbS5hcGkuY3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChlbGVtLnJlbmRlcmVyICYmIGVsZW0ucmVuZGVyZXIuY3Vyc29yQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucmVuZGVyZXIuY3Vyc29yQ2hhbmdlKGVsZW0sIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZWxlbS5hcGkuZm9jdXMpIHtcbiAgICAgICAgZWxlbS5hcGkuZm9jdXMgPSBmdW5jdGlvbiAoZXZlbnQ6IElFdmVudCk6IHZvaWQge1xuICAgICAgICAgICAgLyoqIEBkZXByZWNhdGVkICgnRGVwcmVjYXRlZCBzaW5jZSAxLjE0LjAgaW4gZmF2b3Igb2YgZm9jdXMuICBXaWxsIGJlIHJlbW92ZWQgaW4gMi54JykgKi9cbiAgICAgICAgICAgIGlmIChlbGVtLnJlbmRlcmVyICYmICFlbGVtLnJlbmRlcmVyLmZvY3VzICYmIGVsZW0ucmVuZGVyZXIuaG92ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5yZW5kZXJlci5ob3ZlcihlbGVtLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbmQgZGVwcmVjYXRlZFxuXG4gICAgICAgICAgICBpZiAoZWxlbS5yZW5kZXJlciAmJiBlbGVtLnJlbmRlcmVyLmZvY3VzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucmVuZGVyZXIuZm9jdXMoZWxlbSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsZW0uYXBpLmhvdmVyID0gZWxlbS5hcGkuZm9jdXM7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtLmFwaS5icnVzaCkge1xuICAgICAgICBlbGVtLmFwaS5icnVzaCA9IGZ1bmN0aW9uIChldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoZWxlbS5yZW5kZXJlciAmJiBlbGVtLnJlbmRlcmVyLmJydXNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucmVuZGVyZXIuYnJ1c2goZWxlbSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtLmFwaS56b29tKSB7XG4gICAgICAgIGVsZW0uYXBpLnpvb20gPSBmdW5jdGlvbiAoZXZlbnQ6IElFdmVudCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKGVsZW0ucmVuZGVyZXIgJiYgZWxlbS5yZW5kZXJlci56b29tKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucmVuZGVyZXIuem9vbShlbGVtLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZFJlbmRlckNhbGxiYWNrKGVsZW06IFVJRWxlbWVudCkge1xuICAgIGlmICghZWxlbS5hcGkpIHtcbiAgICAgICAgZWxlbS5hcGkgPSB7fVxuICAgIH1cbiAgICBpZiAoIWVsZW0uYXBpLmJydXNoKSB7XG4gICAgICAgIGVsZW0uYXBpLmJydXNoID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChlbGVtLnJlbmRlcmVyICYmIGVsZW0ucmVuZGVyZXIuYnJ1c2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5yZW5kZXJlci5icnVzaChlbGVtLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFlbGVtLmFwaS5yZW5kZXIpIHtcbiAgICAgICAgZWxlbS5hcGkucmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyOiBVSVJlbmRlcmVyLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgICAgICBpZiAoIXJlbmRlcmVyKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBlbGVtLnJlbmRlcmVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW5kZXJlci5yZW5kZXIoZWxlbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoJ09rJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlamVjdCgnTm8gcmVuZGVyZXIgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIGFkZHMgc29tZSBkZWZhdWx0IGNhbGxiYWNrcyB0byBhIGdpdmVuIFVJIG9iamVjdCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZENhbGxiYWNrcyhlbGVtOiBVSUVsZW1lbnQpIHtcbiAgICBhZGRUb29sdGlwQ2FsbGJhY2soZWxlbSk7XG4gICAgYWRkSG92ZXJDYWxsYmFjayhlbGVtKTtcbiAgICBhZGRDbGlja0NhbGxiYWNrKGVsZW0pO1xuICAgIGFkZFJlbmRlckNhbGxiYWNrKGVsZW0pO1xufVxuXG4vKiogdXNlZCB0byBncm91cCBVSSBlbGVtZW50cyB0b2dldGhlci4gIENhbiBiZSB1c2VkIHRvIHN5bmNcbiAqIHNlbGVjdGlvbi90b29sdGlwc1xuICovXG5leHBvcnQgY2xhc3MgRWxlbWVudE1hbmFnZXIgaW1wbGVtZW50cyBVSUVsZW1lbnRNYW5hZ2VyIHtcbiAgICAvKiogdGhlIGxpc3Qgb2YgZWxlbWVudHMgbWFuYWdlZCBieSB0aGlzIG1hbmFnZXIgKi9cbiAgICBwcm90ZWN0ZWQgX2VsZW1zOiBVSUVsZW1lbnRbXSA9IFtdO1xuXG4gICAgLyoqIHRoZSBncm91cHMgb2YgZWxlbWVudHMgY3JlYXRlZCBieSB0aGlzIGdyb3VwICovXG4gICAgcHJvdGVjdGVkIF9ncm91cEluZm86IEdyb3VwSW5mb1tdO1xuXG4gICAgcHJvdGVjdGVkIF9ob3ZlckNhbGxiYWNrOiAoZ3JvdXA6IFVJRWxlbWVudFtdLCBldmVudDogSUV2ZW50KSA9PiB2b2lkO1xuICAgIHByb3RlY3RlZCBfY2xpY2tDYWxsYmFjazogKGdyb3VwOiBVSUVsZW1lbnRbXSwgZXZlbnQ6IElFdmVudCkgPT4gdm9pZDtcbiAgICBwcm90ZWN0ZWQgX3pvb21DYWxsYmFjazogKGdyb3VwOiBVSUVsZW1lbnRbXSwgZXZlbnQ6IElFdmVudCkgPT4gdm9pZDtcbiAgICBwcm90ZWN0ZWQgX3Rvb2x0aXBDYWxsYmFjazogKGdyb3VwOiBVSUVsZW1lbnRbXSwgZXZlbnQ6IElFdmVudCkgPT4gSVRvb2x0aXBEYXRhO1xuICAgIHByb3RlY3RlZCBfY3Vyc29yQ2hhbmdlQ2FsbGJhY2s6IChncm91cDogVUlFbGVtZW50W10sIGV2ZW50OiBJRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJvdGVjdGVkIF9icnVzaENhbGxiYWNrOiAoZ3JvdXA6IFVJRWxlbWVudFtdLCBldmVudDogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIF9vblRvb2x0aXBDYWxsYmFjazogKGV2ZW50OiBJRXZlbnQpID0+IElUb29sdGlwRGF0YVtdO1xuICAgIHByb3RlY3RlZCBfb25ab29tQ2FsbGJhY2s6IChldmVudDogSUV2ZW50KSA9PiB2b2lkO1xuICAgIHByb3RlY3RlZCBfb25Ib3ZlckNhbGxiYWNrOiAoZXZlbnQ6IElFdmVudCkgPT4gdm9pZDtcbiAgICBwcm90ZWN0ZWQgX29uQ2xpY2tDYWxsYmFjazogKGV2ZW50OiBJRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJvdGVjdGVkIF9vbkN1cnNvckNoYW5nZUNhbGxiYWNrOiAoZXZlbnQ6IElFdmVudCkgPT4gdm9pZDtcbiAgICBwcm90ZWN0ZWQgX29uQnJ1c2hDYWxsYmFjazogKGV2ZW50OiBJRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJvdGVjdGVkIF9vblVwZGF0ZUNhbGxiYWNrOiAoY2FsbGVyOiBVSUVsZW1lbnQsIG9wdGlvbnM6IElPcHRpb25zKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICB0aGlzLl9ncm91cEluZm8gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBHcm91cFR5cGUuTm9uZTsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9ncm91cEluZm8ucHVzaChuZXcgR3JvdXBJbmZvKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb25Ib3ZlckNhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQuY2FsbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nIG5vIGNhbGxlciBzcGVjaWZpZWQgZm9yIHRoaXMgZXZlbnQsIGNhbm5vdCBwcm9wb2F0ZSBjaGFuZ2VzJywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGVsZW1zID0gc2VsZi5fZ3JvdXBJbmZvW0dyb3VwVHlwZS5Gb2N1c10uX29iamVjdE1hcC5nZXQoZXZlbnQuY2FsbGVyKTtcbiAgICAgICAgICAgIGlmIChlbGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9ob3ZlckNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2hvdmVyQ2FsbGJhY2soZWxlbXMsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGVsZW1zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqIEBkZXByZWNhdGVkIHRvIHJlbW92ZSBpbiAyLnggKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5jYWxsZXIgIT09IGVsZW0gJiYgZWxlbS5hcGkgJiYgIWVsZW0uYXBpLmZvY3VzICYmIGVsZW0uYXBpLmhvdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hcGkuaG92ZXIoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGRlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5jYWxsZXIgIT09IGVsZW0gJiYgZWxlbS5hcGkgJiYgZWxlbS5hcGkuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFwaS5mb2N1cyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGlzcGF0Y2ggPSBmdW5jdGlvbiAoZ3JvdXBUeXBlOiBHcm91cFR5cGUsIGNhbGxiYWNrOiBhbnksIGFwaU5hbWU6IHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudDogSUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC5jYWxsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nIG5vIGNhbGxlciBzcGVjaWZpZWQgZm9yIHRoaXMgZXZlbnQsIGNhbm5vdCBwcm9wYWdhdGUgY2hhbmdlcycsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1zID0gc2VsZi5fZ3JvdXBJbmZvW2dyb3VwVHlwZV0uX29iamVjdE1hcC5nZXQoZXZlbnQuY2FsbGVyKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlbGVtcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbGVtID0gZWxlbXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNhbGxlciAhPT0gZWxlbSAmJiBlbGVtLmFwaSAmJiBlbGVtLmFwaVthcGlOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFwaVthcGlOYW1lXShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29uWm9vbUNhbGxiYWNrID0gZGlzcGF0Y2goR3JvdXBUeXBlLkhpZ2hsaWdodCwgdGhpcy5fem9vbUNhbGxiYWNrLCAnem9vbScpO1xuICAgICAgICB0aGlzLl9vbkN1cnNvckNoYW5nZUNhbGxiYWNrID0gZGlzcGF0Y2goR3JvdXBUeXBlLkhpZ2hsaWdodCwgdGhpcy5fY3Vyc29yQ2hhbmdlQ2FsbGJhY2ssICdjdXJzb3JDaGFuZ2UnKTtcbiAgICAgICAgdGhpcy5fb25CcnVzaENhbGxiYWNrID0gZGlzcGF0Y2goR3JvdXBUeXBlLkhpZ2hsaWdodCwgdGhpcy5fYnJ1c2hDYWxsYmFjaywgJ2JydXNoJyk7XG4gICAgICAgIHRoaXMuX29uQ2xpY2tDYWxsYmFjayA9IGRpc3BhdGNoKEdyb3VwVHlwZS5TZWxlY3QsIHRoaXMuX2NsaWNrQ2FsbGJhY2ssICdzZWxlY3QnKTtcblxuICAgICAgICB0aGlzLl9vblRvb2x0aXBDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudDogSUV2ZW50KTogSVRvb2x0aXBEYXRhW10ge1xuICAgICAgICAgICAgaWYgKCFldmVudC5jYWxsZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmcgbm8gY2FsbGVyIHNwZWNpZmllZCBmb3IgdGhpcyBldmVudCwgY2Fubm90IHByb3BvYXRlIGNoYW5nZXMnLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmV0OiBJVG9vbHRpcERhdGFbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IGVsZW1zID0gc2VsZi5fZ3JvdXBJbmZvW0dyb3VwVHlwZS5Ub29sdGlwXS5fb2JqZWN0TWFwLmdldChldmVudC5jYWxsZXIpO1xuICAgICAgICAgICAgaWYgKGVsZW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuX3Rvb2x0aXBDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KHNlbGYuX3Rvb2x0aXBDYWxsYmFjayhlbGVtcywgZXZlbnQpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGVsZW1zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBlbGVtLmdldFRvb2x0aXAoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNhdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLnRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS50b29sdGlwLnNldERhdGEoZXZlbnQuZGF0YS50b29sdGlwLmdldFRpdGxlKCksIHJldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25VcGRhdGVDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsZXI6IFVJRWxlbWVudCxcbiAgICAgICAgICAgIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoIWNhbGxlcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignV2FybmluZyBubyBjYWxsZXIgc3BlY2lmaWVkIGZvciB0aGlzIGV2ZW50LCBjYW5ub3QgcHJvcG9hdGUgY2hhbmdlcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGVsZW1zID0gc2VsZi5fZ3JvdXBJbmZvW0dyb3VwVHlwZS5SZW5kZXJdLl9vYmplY3RNYXAuZ2V0KGNhbGxlcik7XG4gICAgICAgICAgICBpZiAoZWxlbXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtID0gZWxlbXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0ucmVuZGVyZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgcHJldmlvdXMgcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVuZGVyZXIucmVuZGVyKGVsZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tR3JvdXAoZWxlbTogVUlFbGVtZW50LCB0eXBlOiBHcm91cFR5cGUpIHtcbiAgICAgICAgbGV0IGxpc3QgPSB0aGlzLl9ncm91cEluZm9bdHlwZV0uX29iamVjdE1hcC5nZXQoZWxlbSk7XG4gICAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgICAgICByZW1vdmVGcm9tTGlzdChlbGVtLCBsaXN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9Hcm91cChlbGVtOiBVSUVsZW1lbnQsIGdyb3VwTmFtZTogc3RyaW5nLCB0eXBlOiBHcm91cFR5cGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ncm91cEluZm9bdHlwZV0uX25hbWVNYXAuaGFzT3duUHJvcGVydHkoZ3JvdXBOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fZ3JvdXBJbmZvW3R5cGVdLl9uYW1lTWFwW2dyb3VwTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ncm91cEluZm9bdHlwZV0uX25hbWVNYXBbZ3JvdXBOYW1lXS5wdXNoKGVsZW0pO1xuICAgICAgICB0aGlzLl9ncm91cEluZm9bdHlwZV0uX29iamVjdE1hcC5zZXQoZWxlbSwgdGhpcy5fZ3JvdXBJbmZvW3R5cGVdLl9uYW1lTWFwW2dyb3VwTmFtZV0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZCBhIGVsZW0gdG8gdGhlIG1hbmFnZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIGFkZGVkXG4gICAgICogQHBhcmFtIHRvb2x0aXBHcm91cE5hbWUgLSBOYW1lIG9mIHRoZSBncm91cCB0aGF0IHRoaXMgZWxlbSBzaG91bGQgYmUgXCJnYW5nZWRcIlxuICAgICAqICAgd2l0aCB3aGVuIHNob3dpbmcgdG9vbHRpcHMuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGlzIGVsZW0gd2lsbCBub3QgYmUgXCJnYW5nZWRcIiB3aXRoIGFueVxuICAgICAqICAgb3RoZXIgZWxlbS5cbiAgICAgKiBAcGFyYW0gaGlnaGxpZ2h0R3JvdXBOYW1lIC0gTmFtZSBvZiB0aGUgZ3JvdXAgdGhhdCB0aGlzIGVsZW0gc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiAgIHdpdGggd2hlbiBkb2luZyBoaWdobGlnaHRpbmcuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGlzIGVsZW0gd2lsbCBub3QgYmUgXCJnYW5nZWRcIiB3aXRoIGFueVxuICAgICAqICAgb3RoZXIgZWxlbS5cbiAgICAgKiBAcGFyYW0gcmVuZGVyR3JvdXBOYW1lIC0gTmFtZSBvZiB0aGUgZ3JvdXAgdGhhdCB0aGlzIGVsZW0gc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiAgIHdpdGggd2hlbiByZXJlbmRlcmluZy4gIElmIG5vdCBzcGVjaWZpZWQsIHRoaXMgZWxlbSB3aWxsIG5vdCBiZSBcImdhbmdlZFwiIHdpdGggYW55XG4gICAgICogICBvdGhlciBlbGVtLlxuICAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRFbGVtZW50KGVsZW06IFVJRWxlbWVudCwgdG9vbHRpcEdyb3VwTmFtZT86IHN0cmluZyxcbiAgICAgICAgaGlnaGxpZ2h0R3JvdXBOYW1lPzogc3RyaW5nLCByZW5kZXJHcm91cE5hbWU/OiBzdHJpbmcpOiBFbGVtZW50TWFuYWdlciB7XG5cbiAgICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9lbGVtcy5pbmRleE9mKGVsZW0pO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBhZGRDYWxsYmFja3MoZWxlbSk7XG4gICAgICAgICAgICB0aGlzLl9lbGVtcy5wdXNoKGVsZW0pO1xuXG4gICAgICAgICAgICBsZXQgcmVuZGVyZWRFbGVtZW50czogVUlFbGVtZW50W107XG4gICAgICAgICAgICBpZiAoIWVsZW0uZ2V0RWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBlbGVtLmdldEVsZW1lbnRzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW2VsZW1dIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZWRFbGVtZW50cyA9IGVsZW0uZ2V0RWxlbWVudHMoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJlZEVsZW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlbmRlcmVkRWxlbWVudCA9IHJlbmRlcmVkRWxlbWVudHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRvb2x0aXBHcm91cE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb1Rvb2x0aXBHcm91cChyZW5kZXJlZEVsZW1lbnQsIHRvb2x0aXBHcm91cE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0R3JvdXBOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9IaWdobGlnaHRHcm91cChyZW5kZXJlZEVsZW1lbnQsIGhpZ2hsaWdodEdyb3VwTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJHcm91cE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb1JlbmRlckdyb3VwKHJlbmRlcmVkRWxlbWVudCwgcmVuZGVyR3JvdXBOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyAnRWxlbWVudCBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIG1hbmFnZXInO1xuICAgICAgICB9XG4gICAgICAgIGVsZW0ubWFuYWdlciA9IHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbW92ZSBhIGVsZW0gZnJvbSB0aGUgbWFuYWdlciwgcmVtb3ZlcyBpdCBmcm9tIGFsbCBncm91cHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICAgKlxuICAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW06IFVJRWxlbWVudCk6IEVsZW1lbnRNYW5hZ2VyIHtcbiAgICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZW5kZXJlZEVsZW1lbnRzOiBVSUVsZW1lbnRbXTtcbiAgICAgICAgaWYgKGVsZW0uZ2V0RWxlbWVudHMpIHtcbiAgICAgICAgICAgIHJlbmRlcmVkRWxlbWVudHMgPSBlbGVtLmdldEVsZW1lbnRzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJlZEVsZW1lbnRzID0gW2VsZW1dO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJlZEVsZW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgcmVuZGVyZWRFbGVtZW50ID0gcmVuZGVyZWRFbGVtZW50c1tpXTtcblxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tVG9vbHRpcEdyb3VwKHJlbmRlcmVkRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21IaWdobGlnaHRHcm91cChyZW5kZXJlZEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tUmVuZGVyR3JvdXAocmVuZGVyZWRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVGcm9tTGlzdChlbGVtLCB0aGlzLl9lbGVtcyk7XG5cbiAgICAgICAgZGVsZXRlIGVsZW0ubWFuYWdlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFsbCB0aGUgZWxlbXMgaW4gdGhpcyBsaXN0XG4gICAgICogQHJldHVybiB0aGUgbGlzdCBvZiBlbGVtc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRFbGVtZW50cygpOiBVSUVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1c2VyIGNhbGxiYWNrIGNhbGxlZCB3aGVuIGEgdG9vbHRpcCBpcyBjcmVhdGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGhlIGZ1bmN0aW90biB0byBiZSBjYWxsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Wm9vbUNhbGxiYWNrKGNhbGxiYWNrOiAoZ3JvdXA6IFVJRWxlbWVudFtdLFxuICAgICAgICBldmVudDogSUV2ZW50KSA9PiBJVG9vbHRpcERhdGEpOiBFbGVtZW50TWFuYWdlciB7XG4gICAgICAgIHRoaXMuX3pvb21DYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1c2VyIGNhbGxiYWNrIGNhbGxlZCB3aGVuIGEgaG92ZXIgZXZlbnQgaGFwcGVuc1xuICAgICAqXG4gICAgICogQHBhcmFtIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0SG92ZXJDYWxsYmFjayhjYWxsYmFjazogKGdyb3VwOiBVSUVsZW1lbnRbXSwgZXZlbnQ6IElFdmVudCkgPT4gdm9pZCk6IEVsZW1lbnRNYW5hZ2VyIHtcbiAgICAgICAgdGhpcy5faG92ZXJDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1c2VyIGNhbGxiYWNrIGNhbGxlZCB3aGVuIGEgaG92ZXIgZXZlbnQgaGFwcGVuc1xuICAgICAqXG4gICAgICogQHBhcmFtIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q2xpY2tDYWxsYmFjayhjYWxsYmFjazogKGdyb3VwOiBVSUVsZW1lbnRbXSwgZXZlbnQ6IElFdmVudCkgPT4gdm9pZCk6IEVsZW1lbnRNYW5hZ2VyIHtcbiAgICAgICAgdGhpcy5fY2xpY2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1c2VyIGNhbGxiYWNrIGNhbGxlZCB3aGVuIGEgdG9vbHRpcCBpcyBjcmVhdGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGhlIGZ1bmN0aW90biB0byBiZSBjYWxsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0VG9vbHRpcENhbGxiYWNrKGNhbGxiYWNrOiAoZ3JvdXA6IFVJRWxlbWVudFtdLFxuICAgICAgICBldmVudDogSUV2ZW50KSA9PiBJVG9vbHRpcERhdGEpOiBFbGVtZW50TWFuYWdlciB7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1c2VyIGNhbGxiYWNrIGNhbGxlZCB3aGVuIGEgc2VsZWN0aW9uIGV2ZW50IGhhcHBlbnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAgICovXG4gICAgcHVibGljIHNldEJydXNoQ2FsbGJhY2soY2FsbGJhY2s6IChncm91cDogVUlFbGVtZW50W10sIGV2ZW50OiBJRXZlbnQpID0+IHZvaWQpOiBFbGVtZW50TWFuYWdlciB7XG4gICAgICAgIHRoaXMuX2JydXNoQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0IHRoZSBncm91cCB0aGlzIHRvb2x0aXAgaXMgYXNzb2NpYXRlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbSAtIHRoZSBlbGVtIHRoYXQgc2hvdWxkIHNob3VsZCBiZSBcImdhbmdlZFwiXG4gICAgICogQHBhcmFtIGdyb3VwTmFtZSAtIE5hbWUgb2YgdGhlIGdyb3VwIHRoYXQgdGhpcyBlbGVtIHNob3VsZCBiZSBcImdhbmdlZFwiXG4gICAgICogICB3aXRoLlxuICAgICAqXG4gICAgICogQHJldHVybiAtIFRoZSBlbGVtIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZFRvVG9vbHRpcEdyb3VwKGVsZW06IFVJRWxlbWVudCwgZ3JvdXBOYW1lOiBzdHJpbmcpOiBFbGVtZW50TWFuYWdlciB7XG4gICAgICAgIGFkZFRvb2x0aXBDYWxsYmFjayhlbGVtKTtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tVG9vbHRpcEdyb3VwKGVsZW0pO1xuICAgICAgICB0aGlzLmFkZFRvR3JvdXAoZWxlbSwgZ3JvdXBOYW1lLCBHcm91cFR5cGUuVG9vbHRpcCk7XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoZWxlbS5vblRvb2x0aXApIHtcbiAgICAgICAgICAgIGxldCBmdW5jID0gZWxlbS5vblRvb2x0aXA7XG4gICAgICAgICAgICBlbGVtLm9uVG9vbHRpcCA9IGZ1bmN0aW9uIChldmVudDogSUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fb25Ub29sdGlwQ2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgIGZ1bmMoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5vblRvb2x0aXAgPSB0aGlzLl9vblRvb2x0aXBDYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbW92ZSB0aGUgZWxlbSBmcm9tIHRoZSB0b29sdGlwIGdyb3VwIGl0IGlzIGluXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbSAtIHRoZSBlbGVtIHRoYXQgc2hvdWxkIHNob3VsZCBiZSBcInVuZ2FuZ2VkXCJcbiAgICAgKlxuICAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVGcm9tVG9vbHRpcEdyb3VwKGVsZW06IFVJRWxlbWVudCk6IEVsZW1lbnRNYW5hZ2VyIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tR3JvdXAoZWxlbSwgR3JvdXBUeXBlLlRvb2x0aXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIHNldCB0aGUgZ3JvdXAgdG8gc3luYyB0aGlzIGVsZW0gd2l0aFxuICAgICpcbiAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAqIEBwYXJhbSBncm91cE5hbWUgLSBOYW1lIG9mIHRoZSBncm91cCB0aGF0IHRoaXMgZWxlbSBzaG91bGQgYmUgXCJnYW5nZWRcIlxuICAgICogICB3aXRoLlxuICAgICpcbiAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICovXG4gICAgcHVibGljIGFkZFRvRm9jdXNHcm91cChlbGVtOiBVSUVsZW1lbnQsIGdyb3VwTmFtZTogc3RyaW5nKTogRWxlbWVudE1hbmFnZXIge1xuICAgICAgICBhZGRIb3ZlckNhbGxiYWNrKGVsZW0pO1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21Gb2N1c0dyb3VwKGVsZW0pO1xuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKGVsZW0ub25Ib3Zlcikge1xuICAgICAgICAgICAgbGV0IGZ1bmMgPSBlbGVtLm9uSG92ZXI7XG4gICAgICAgICAgICBlbGVtLm9uSG92ZXIgPSBmdW5jdGlvbiAoZXZlbnQ6IElFdmVudCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX29uSG92ZXJDYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICAgICAgZnVuYyhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtLm9uSG92ZXIgPSBzZWxmLl9vbkhvdmVyQ2FsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZFRvR3JvdXAoZWxlbSwgZ3JvdXBOYW1lLCBHcm91cFR5cGUuRm9jdXMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbW92ZSB0aGUgZWxlbSBmcm9tIHRoZSB6b29tIGdyb3VwIGl0IGlzIGluXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbSAtIHRoZSBlbGVtIHRoYXQgc2hvdWxkIHNob3VsZCBiZSBcInVuZ2FuZ2VkXCJcbiAgICAgKlxuICAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVGcm9tRm9jdXNHcm91cChlbGVtOiBVSUVsZW1lbnQpOiBFbGVtZW50TWFuYWdlciB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUdyb3VwKGVsZW0sIEdyb3VwVHlwZS5Gb2N1cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogc2V0IHRoZSBncm91cCB0byBzeW5jIHRoaXMgZWxlbSB3aXRoXG4gICAgKlxuICAgICogQHBhcmFtIGVsZW0gLSB0aGUgZWxlbSB0aGF0IHNob3VsZCBzaG91bGQgYmUgXCJnYW5nZWRcIlxuICAgICogQHBhcmFtIGdyb3VwTmFtZSAtIE5hbWUgb2YgdGhlIGdyb3VwIHRoYXQgdGhpcyBlbGVtIHNob3VsZCBiZSBcImdhbmdlZFwiXG4gICAgKiAgIHdpdGguXG4gICAgKlxuICAgICogQHJldHVybiAtIFRoZSBlbGVtIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgKi9cbiAgICBwdWJsaWMgYWRkVG9TZWxlY3RHcm91cChlbGVtOiBVSUVsZW1lbnQsIGdyb3VwTmFtZTogc3RyaW5nKTogRWxlbWVudE1hbmFnZXIge1xuICAgICAgICBhZGRDbGlja0NhbGxiYWNrKGVsZW0pO1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21TZWxlY3RHcm91cChlbGVtKTtcblxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChlbGVtLm9uQ2xpY2spIHtcbiAgICAgICAgICAgIGxldCBmdW5jID0gZWxlbS5vbkNsaWNrO1xuICAgICAgICAgICAgZWxlbS5vbkNsaWNrID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9vbkNsaWNrQ2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgIGZ1bmMoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5vbkNsaWNrID0gc2VsZi5fb25DbGlja0NhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZGRUb0dyb3VwKGVsZW0sIGdyb3VwTmFtZSwgR3JvdXBUeXBlLlNlbGVjdCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIHRoZSBlbGVtIGZyb20gdGhlIHpvb20gZ3JvdXAgaXQgaXMgaW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIFwidW5nYW5nZWRcIlxuICAgICAqXG4gICAgICogQHJldHVybiAtIFRoZSBlbGVtIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZyb21TZWxlY3RHcm91cChlbGVtOiBVSUVsZW1lbnQpOiBFbGVtZW50TWFuYWdlciB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUdyb3VwKGVsZW0sIEdyb3VwVHlwZS5TZWxlY3QpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXQgdGhlIGdyb3VwIHRvIHN5bmMgdGhpcyBlbGVtIHdpdGhcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiBAcGFyYW0gZ3JvdXBOYW1lIC0gTmFtZSBvZiB0aGUgZ3JvdXAgdGhhdCB0aGlzIGVsZW0gc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiAgIHdpdGguXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIC0gVGhlIGVsZW0gbWFuYWdlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkVG9IaWdobGlnaHRHcm91cChlbGVtOiBVSUVsZW1lbnQsIGdyb3VwTmFtZTogc3RyaW5nKTogRWxlbWVudE1hbmFnZXIge1xuICAgICAgICBhZGRIb3ZlckNhbGxiYWNrKGVsZW0pO1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21IaWdobGlnaHRHcm91cChlbGVtKTtcblxuICAgICAgICB0aGlzLmFkZFRvRm9jdXNHcm91cChlbGVtLCBncm91cE5hbWUpO1xuICAgICAgICB0aGlzLmFkZFRvU2VsZWN0R3JvdXAoZWxlbSwgZ3JvdXBOYW1lKTtcblxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChlbGVtLm9uQnJ1c2gpIHtcbiAgICAgICAgICAgIGxldCBmdW5jID0gZWxlbS5vbkJydXNoO1xuICAgICAgICAgICAgZWxlbS5vbkJydXNoID0gZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9vbkJydXNoQ2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgIGZ1bmMoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5vbkJydXNoID0gc2VsZi5fb25CcnVzaENhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW0ub25DdXJzb3JDaGFuZ2VkKSB7XG4gICAgICAgICAgICBsZXQgZnVuYyA9IGVsZW0ub25DdXJzb3JDaGFuZ2VkO1xuICAgICAgICAgICAgZWxlbS5vbkN1cnNvckNoYW5nZWQgPSBmdW5jdGlvbiAoZXZlbnQ6IElFdmVudCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX29uQ3Vyc29yQ2hhbmdlQ2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgIGZ1bmMoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5vbkN1cnNvckNoYW5nZWQgPSB0aGlzLl9vbkN1cnNvckNoYW5nZUNhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW0ub25ab29tKSB7XG4gICAgICAgICAgICBsZXQgZnVuYyA9IGVsZW0ub25ab29tO1xuICAgICAgICAgICAgZWxlbS5vblpvb20gPSBmdW5jdGlvbiAoZXZlbnQ6IElFdmVudCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX29uWm9vbUNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBmdW5jKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW0ub25ab29tID0gdGhpcy5fb25ab29tQ2FsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWxlbXMgPSB0aGlzLl9ncm91cEluZm9bR3JvdXBUeXBlLkhpZ2hsaWdodF0uX25hbWVNYXBbZ3JvdXBOYW1lXTtcbiAgICAgICAgaWYgKGVsZW1zICYmIGVsZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IG9sZEVsZW0gPSBlbGVtc1swXTtcbiAgICAgICAgICAgIGlmIChvbGRFbGVtLmFwaS5nZXRPcHRpb25zICYmIGVsZW0uYXBpICYmIGVsZW0uYXBpLnpvb20pIHtcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uczogSU9wdGlvbnMgPSBvbGRFbGVtLmFwaS5nZXRPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgbGV0IHpvb21FdmVudDogSUV2ZW50ID0gY29weShvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB6b29tRXZlbnQuZXZlbnQgPSBFdmVudFR5cGUuWm9vbTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFwaS56b29tKHpvb21FdmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRUb0dyb3VwKGVsZW0sIGdyb3VwTmFtZSwgR3JvdXBUeXBlLkhpZ2hsaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIHRoZSBlbGVtIGZyb20gdGhlIHpvb20gZ3JvdXAgaXQgaXMgaW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIFwidW5nYW5nZWRcIlxuICAgICAqXG4gICAgICogQHJldHVybiAtIFRoZSBlbGVtIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZyb21IaWdobGlnaHRHcm91cChlbGVtOiBVSUVsZW1lbnQpOiBFbGVtZW50TWFuYWdlciB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUZvY3VzR3JvdXAoZWxlbSk7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVNlbGVjdEdyb3VwKGVsZW0pO1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21Hcm91cChlbGVtLCBHcm91cFR5cGUuSGlnaGxpZ2h0KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0IHRoZSBncm91cCB0byBzZWxlY3QgdGhpcyBlbGVtIHdpdGhcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiBAcGFyYW0gZ3JvdXBOYW1lIC0gTmFtZSBvZiB0aGUgZ3JvdXAgdGhhdCB0aGlzIGVsZW0gc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiAgIHdpdGguXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIC0gVGhlIGVsZW0gbWFuYWdlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkVG9SZW5kZXJHcm91cChlbGVtOiBVSUVsZW1lbnQsIGdyb3VwTmFtZTogc3RyaW5nKTogRWxlbWVudE1hbmFnZXIge1xuICAgICAgICBhZGRSZW5kZXJDYWxsYmFjayhlbGVtKTtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tUmVuZGVyR3JvdXAoZWxlbSk7XG4gICAgICAgIHRoaXMuYWRkVG9Hcm91cChlbGVtLCBncm91cE5hbWUsIEdyb3VwVHlwZS5SZW5kZXIpO1xuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKGVsZW0uaGFuZGxlVXBkYXRlKSB7XG4gICAgICAgICAgICBsZXQgZnVuYyA9IGVsZW0uaGFuZGxlVXBkYXRlO1xuICAgICAgICAgICAgZWxlbS5oYW5kbGVVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGVyOiBVSUVsZW1lbnQsIG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fb25VcGRhdGVDYWxsYmFjayhjYWxsZXIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGZ1bmMoY2FsbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW0uaGFuZGxlVXBkYXRlID0gdGhpcy5fb25VcGRhdGVDYWxsYmFja1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIHRoZSBlbGVtIGZyb20gdGhlIHpvb20gZ3JvdXAgaXQgaXMgaW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIFwidW5nYW5nZWRcIlxuICAgICAqXG4gICAgICogQHJldHVybiAtIFRoZSBlbGVtIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZyb21SZW5kZXJHcm91cChlbGVtOiBVSUVsZW1lbnQpOiBFbGVtZW50TWFuYWdlciB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUdyb3VwKGVsZW0sIEdyb3VwVHlwZS5SZW5kZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogY2xlYXIgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QgKi9cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX2VsZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX2dyb3VwSW5mby5sZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEdyb3VwVHlwZS5Ob25lOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2dyb3VwSW5mby5wdXNoKG5ldyBHcm91cEluZm8oKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BOztBQUVBO0FBQ0E7QUFzQkE7QUFyQkE7QUFDQTtBQXFCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoaEJBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/core/element-manager.ts\n");

/***/ }),

/***/ "./src/core/interaction-state.ts":
/*!***************************************!*\
  !*** ./src/core/interaction-state.ts ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./src/core/utilities.ts\");\nconst ui_base_1 = __webpack_require__(/*! ../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\nclass InteractionState {\n    constructor(focus, unfocus, doBlink = false, select = undefined, unselect = undefined) {\n        this._currFocus = [];\n        this._currSelection = [];\n        this._focus = focus;\n        this._unfocus = unfocus;\n        this._select = select;\n        this._unselect = unselect;\n        this._doBlink = doBlink;\n    }\n    static getFocusColor(input) {\n        let color = d3.color(input);\n        let hoverColor = d3.color(color).darker(2).toString();\n        if (hoverColor === color.toString()) {\n            color.opacity = color.opacity * .6;\n            hoverColor = color.toString();\n        }\n        return hoverColor;\n    }\n    /** add a selection from all of the elements */\n    _addFocusHelper(selection) {\n        let self = this;\n        this._focus(selection);\n        if (self._doBlink) {\n            clearTimeout(this._highlightTimer);\n            this._highlightTimer = setTimeout(function () {\n                self._unfocusHelper(selection, true);\n            }, 500);\n        }\n    }\n    /** remove a selection from all of the elements */\n    _unfocusHelper(selection, isFlashing = false) {\n        let self = this;\n        this._unfocus(selection);\n        if (this._doBlink) {\n            if (isFlashing) {\n                clearTimeout(this._highlightTimer);\n                this._highlightTimer = setTimeout(function () {\n                    self._addFocusHelper(selection);\n                }, 500);\n            }\n        }\n    }\n    /** add a selection from all of the elements */\n    _addSelectionHelper(selection) {\n        let self = this;\n        this._select(selection);\n        if (self._doBlink) {\n            clearTimeout(this._highlightTimer);\n            this._highlightTimer = setTimeout(function () {\n                self._removeSelectionHelper(selection, true);\n            }, 500);\n        }\n    }\n    /** remove a selection from all of the elements */\n    _removeSelectionHelper(selection, isFlashing = false) {\n        let self = this;\n        this._unselect(selection);\n        if (this._doBlink) {\n            if (isFlashing) {\n                clearTimeout(this._highlightTimer);\n                this._highlightTimer = setTimeout(function () {\n                    self._addSelectionHelper(selection);\n                }, 500);\n            }\n        }\n    }\n    focus(event) {\n        if (!isNaN(Number(event.selection))) {\n            if (event.selection === undefined) {\n                console.debug('Chart unable to fire focus event with undefined selection');\n            }\n            else if (event.selection.length === 0) {\n                console.debug('Chart unable to fire focus event with an empty string selection');\n            }\n            else {\n                console.debug('Chart unable to fire focus event using a number ' +\n                    'as the selection class due to CSS limitations');\n            }\n            return;\n        }\n        let selection = utilities_1.getSelectionName(event.selection);\n        let selectionIdx = this._currFocus.indexOf(selection);\n        switch (event.event) {\n            case ui_base_1.EventType.SelectAdd: // here for legacy reasons\n            case ui_base_1.EventType.HoverStart:\n            case ui_base_1.EventType.FocusStart:\n                if (selectionIdx === -1) {\n                    this._currFocus.push(selection);\n                    this._addFocusHelper(selection);\n                }\n                break;\n            case ui_base_1.EventType.SelectRemove: // here for legacy reasons\n            case ui_base_1.EventType.HoverEnd:\n            case ui_base_1.EventType.FocusEnd:\n                if (selectionIdx !== -1) {\n                    clearTimeout(this._highlightTimer);\n                    this._currFocus.splice(selectionIdx, 1);\n                    this._unfocusHelper(selection);\n                }\n                break;\n            case ui_base_1.EventType.SelectClear: // here for legacy reasons\n            case ui_base_1.EventType.HoverClear:\n            case ui_base_1.EventType.FocusClear:\n                clearTimeout(this._highlightTimer);\n                for (let i = 0; i < this._currFocus.length; ++i) {\n                    this._unfocusHelper(this._currFocus[i]);\n                }\n                this._currFocus = [];\n                break;\n        }\n    }\n    select(event) {\n        if (!isNaN(Number(event.selection))) {\n            if (event.selection === undefined) {\n                console.debug('Chart unable to fire focus event with undefined selection');\n            }\n            else if (event.selection.length === 0) {\n                console.debug('Chart unable to fire focus event with an empty string selection');\n            }\n            else {\n                console.debug('Chart unable to fire focus event using a number ' +\n                    'as the selection class due to CSS limitations');\n            }\n            return;\n        }\n        let selection = utilities_1.getSelectionName(event.selection);\n        let selectionIdx = this._currSelection.indexOf(selection);\n        switch (event.event) {\n            case ui_base_1.EventType.SelectAdd:\n                if (selectionIdx === -1) {\n                    this._currSelection.push(selection);\n                    this._addSelectionHelper(selection);\n                }\n                break;\n            case ui_base_1.EventType.SelectRemove:\n                if (selectionIdx !== -1) {\n                    clearTimeout(this._highlightTimer);\n                    this._currSelection.splice(selectionIdx, 1);\n                    this._removeSelectionHelper(selection);\n                }\n                break;\n            case ui_base_1.EventType.SelectClear:\n                clearTimeout(this._highlightTimer);\n                for (let i = 0; i < this._currSelection.length; ++i) {\n                    this._removeSelectionHelper(this._currSelection[i]);\n                }\n                this._currSelection = [];\n                break;\n        }\n    }\n    /** used to restore any selections on a redraw */\n    onRedraw() {\n        this._currFocus.forEach((selection) => {\n            // we have this code here because normally we don't\n            // allow reselecting the same event over and over for\n            // performance reasons\n            this._addFocusHelper(selection);\n        });\n        this._currSelection.forEach((selection) => {\n            // we have this code here because normally we don't\n            // allow reselecting the same event over and over for\n            // performance reasons\n            this._addSelectionHelper(selection);\n        });\n    }\n}\nexports.InteractionState = InteractionState;\n/** @deprecated to be renamed to StateHelper in 2.x */\nexports.SelectionHelper = InteractionState;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9pbnRlcmFjdGlvbi1zdGF0ZS50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL3NyYy9jb3JlL2ludGVyYWN0aW9uLXN0YXRlLnRzP2QzNGYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0U2VsZWN0aW9uTmFtZSB9IGZyb20gJy4vdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gICAgSUV2ZW50LCBFdmVudFR5cGVcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLWJhc2UnO1xuXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblN0YXRlIHtcbiAgICBwcm90ZWN0ZWQgX2RvQmxpbms6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9oaWdobGlnaHRUaW1lcjogYW55O1xuICAgIHByb3RlY3RlZCBfY3VyckZvY3VzOiBhbnlbXTtcbiAgICBwcm90ZWN0ZWQgX2N1cnJTZWxlY3Rpb246IGFueVtdO1xuICAgIHByb3RlY3RlZCBfZm9jdXM6IChkOiBhbnkpID0+IHZvaWQ7XG4gICAgcHJvdGVjdGVkIF91bmZvY3VzOiAoZDogYW55KSA9PiB2b2lkO1xuICAgIHByb3RlY3RlZCBfc2VsZWN0OiAoZDogYW55KSA9PiB2b2lkO1xuICAgIHByb3RlY3RlZCBfdW5zZWxlY3Q6IChkOiBhbnkpID0+IHZvaWRcblxuICAgIGNvbnN0cnVjdG9yKGZvY3VzOiAoZDogYW55KSA9PiB2b2lkLFxuICAgICAgICB1bmZvY3VzOiAoZDogYW55KSA9PiB2b2lkLFxuICAgICAgICBkb0JsaW5rID0gZmFsc2UsXG4gICAgICAgIHNlbGVjdDogKGQ6IGFueSkgPT4gdm9pZCA9IHVuZGVmaW5lZCxcbiAgICAgICAgdW5zZWxlY3Q6IChkOiBhbnkpID0+IHZvaWQgPSB1bmRlZmluZWQpIHtcblxuICAgICAgICB0aGlzLl9jdXJyRm9jdXMgPSBbXTtcbiAgICAgICAgdGhpcy5fY3VyclNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB0aGlzLl9mb2N1cyA9IGZvY3VzO1xuICAgICAgICB0aGlzLl91bmZvY3VzID0gdW5mb2N1cztcbiAgICAgICAgdGhpcy5fc2VsZWN0ID0gc2VsZWN0O1xuICAgICAgICB0aGlzLl91bnNlbGVjdCA9IHVuc2VsZWN0O1xuICAgICAgICB0aGlzLl9kb0JsaW5rID0gZG9CbGluaztcbiAgICB9XG4gICAgc3RhdGljIGdldEZvY3VzQ29sb3IoaW5wdXQ6IHN0cmluZykge1xuICAgICAgICBsZXQgY29sb3IgPSBkMy5jb2xvcihpbnB1dCk7XG4gICAgICAgIGxldCBob3ZlckNvbG9yID0gZDMuY29sb3IoY29sb3IpLmRhcmtlcigyKS50b1N0cmluZygpO1xuICAgICAgICBpZiAoaG92ZXJDb2xvciA9PT0gY29sb3IudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgY29sb3Iub3BhY2l0eSA9IGNvbG9yLm9wYWNpdHkgKiAuNjtcbiAgICAgICAgICAgIGhvdmVyQ29sb3IgPSBjb2xvci50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBob3ZlckNvbG9yO1xuICAgIH1cblxuICAgIC8qKiBhZGQgYSBzZWxlY3Rpb24gZnJvbSBhbGwgb2YgdGhlIGVsZW1lbnRzICovXG4gICAgcHJvdGVjdGVkIF9hZGRGb2N1c0hlbHBlcihzZWxlY3Rpb246IGFueSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5fZm9jdXMoc2VsZWN0aW9uKTtcblxuICAgICAgICBpZiAoc2VsZi5fZG9CbGluaykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2hpZ2hsaWdodFRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fdW5mb2N1c0hlbHBlcihzZWxlY3Rpb24sIHRydWUpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiByZW1vdmUgYSBzZWxlY3Rpb24gZnJvbSBhbGwgb2YgdGhlIGVsZW1lbnRzICovXG4gICAgcHJvdGVjdGVkIF91bmZvY3VzSGVscGVyKHNlbGVjdGlvbjogYW55LCBpc0ZsYXNoaW5nOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuX3VuZm9jdXMoc2VsZWN0aW9uKTtcblxuICAgICAgICBpZiAodGhpcy5fZG9CbGluaykge1xuICAgICAgICAgICAgaWYgKGlzRmxhc2hpbmcpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faGlnaGxpZ2h0VGltZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZEZvY3VzSGVscGVyKHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBhZGQgYSBzZWxlY3Rpb24gZnJvbSBhbGwgb2YgdGhlIGVsZW1lbnRzICovXG4gICAgcHJvdGVjdGVkIF9hZGRTZWxlY3Rpb25IZWxwZXIoc2VsZWN0aW9uOiBhbnkpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdChzZWxlY3Rpb24pO1xuXG4gICAgICAgIGlmIChzZWxmLl9kb0JsaW5rKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faGlnaGxpZ2h0VGltZXIpO1xuICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVTZWxlY3Rpb25IZWxwZXIoc2VsZWN0aW9uLCB0cnVlKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogcmVtb3ZlIGEgc2VsZWN0aW9uIGZyb20gYWxsIG9mIHRoZSBlbGVtZW50cyAqL1xuICAgIHByb3RlY3RlZCBfcmVtb3ZlU2VsZWN0aW9uSGVscGVyKHNlbGVjdGlvbjogYW55LCBpc0ZsYXNoaW5nOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuX3Vuc2VsZWN0KHNlbGVjdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMuX2RvQmxpbmspIHtcbiAgICAgICAgICAgIGlmIChpc0ZsYXNoaW5nKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2hpZ2hsaWdodFRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTZWxlY3Rpb25IZWxwZXIoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzKGV2ZW50OiBJRXZlbnQpIHtcbiAgICAgICAgaWYgKCFpc05hTihOdW1iZXIoZXZlbnQuc2VsZWN0aW9uKSkpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zZWxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0NoYXJ0IHVuYWJsZSB0byBmaXJlIGZvY3VzIGV2ZW50IHdpdGggdW5kZWZpbmVkIHNlbGVjdGlvbicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zZWxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnQ2hhcnQgdW5hYmxlIHRvIGZpcmUgZm9jdXMgZXZlbnQgd2l0aCBhbiBlbXB0eSBzdHJpbmcgc2VsZWN0aW9uJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0NoYXJ0IHVuYWJsZSB0byBmaXJlIGZvY3VzIGV2ZW50IHVzaW5nIGEgbnVtYmVyICcgK1xuICAgICAgICAgICAgICAgICAgICAnYXMgdGhlIHNlbGVjdGlvbiBjbGFzcyBkdWUgdG8gQ1NTIGxpbWl0YXRpb25zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbk5hbWUoZXZlbnQuc2VsZWN0aW9uKTtcbiAgICAgICAgbGV0IHNlbGVjdGlvbklkeCA9IHRoaXMuX2N1cnJGb2N1cy5pbmRleE9mKHNlbGVjdGlvbik7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZXZlbnQpIHtcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLlNlbGVjdEFkZDogLy8gaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkhvdmVyU3RhcnQ6XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5Gb2N1c1N0YXJ0OlxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJGb2N1cy5wdXNoKHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZEZvY3VzSGVscGVyKHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuU2VsZWN0UmVtb3ZlOiAvLyBoZXJlIGZvciBsZWdhY3kgcmVhc29uc1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuSG92ZXJFbmQ6XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5Gb2N1c0VuZDpcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSWR4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faGlnaGxpZ2h0VGltZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyRm9jdXMuc3BsaWNlKHNlbGVjdGlvbklkeCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZm9jdXNIZWxwZXIoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5TZWxlY3RDbGVhcjogLy8gaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkhvdmVyQ2xlYXI6XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5Gb2N1c0NsZWFyOlxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWdobGlnaHRUaW1lcik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9jdXJyRm9jdXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5mb2N1c0hlbHBlcih0aGlzLl9jdXJyRm9jdXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyRm9jdXMgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3QoZXZlbnQ6IElFdmVudCkge1xuICAgICAgICBpZiAoIWlzTmFOKE51bWJlcihldmVudC5zZWxlY3Rpb24pKSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNlbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnQ2hhcnQgdW5hYmxlIHRvIGZpcmUgZm9jdXMgZXZlbnQgd2l0aCB1bmRlZmluZWQgc2VsZWN0aW9uJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNlbGVjdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdDaGFydCB1bmFibGUgdG8gZmlyZSBmb2N1cyBldmVudCB3aXRoIGFuIGVtcHR5IHN0cmluZyBzZWxlY3Rpb24nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnQ2hhcnQgdW5hYmxlIHRvIGZpcmUgZm9jdXMgZXZlbnQgdXNpbmcgYSBudW1iZXIgJyArXG4gICAgICAgICAgICAgICAgICAgICdhcyB0aGUgc2VsZWN0aW9uIGNsYXNzIGR1ZSB0byBDU1MgbGltaXRhdGlvbnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uTmFtZShldmVudC5zZWxlY3Rpb24pO1xuICAgICAgICBsZXQgc2VsZWN0aW9uSWR4ID0gdGhpcy5fY3VyclNlbGVjdGlvbi5pbmRleE9mKHNlbGVjdGlvbik7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZXZlbnQpIHtcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLlNlbGVjdEFkZDpcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyU2VsZWN0aW9uLnB1c2goc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkU2VsZWN0aW9uSGVscGVyKHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuU2VsZWN0UmVtb3ZlOlxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JZHggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWdobGlnaHRUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJTZWxlY3Rpb24uc3BsaWNlKHNlbGVjdGlvbklkeCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNlbGVjdGlvbkhlbHBlcihzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLlNlbGVjdENsZWFyOlxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWdobGlnaHRUaW1lcik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9jdXJyU2VsZWN0aW9uLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNlbGVjdGlvbkhlbHBlcih0aGlzLl9jdXJyU2VsZWN0aW9uW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VyclNlbGVjdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIHVzZWQgdG8gcmVzdG9yZSBhbnkgc2VsZWN0aW9ucyBvbiBhIHJlZHJhdyAqL1xuICAgIHB1YmxpYyBvblJlZHJhdygpIHtcbiAgICAgICAgdGhpcy5fY3VyckZvY3VzLmZvckVhY2goKHNlbGVjdGlvbikgPT4ge1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0aGlzIGNvZGUgaGVyZSBiZWNhdXNlIG5vcm1hbGx5IHdlIGRvbid0XG4gICAgICAgICAgICAvLyBhbGxvdyByZXNlbGVjdGluZyB0aGUgc2FtZSBldmVudCBvdmVyIGFuZCBvdmVyIGZvclxuICAgICAgICAgICAgLy8gcGVyZm9ybWFuY2UgcmVhc29uc1xuICAgICAgICAgICAgdGhpcy5fYWRkRm9jdXNIZWxwZXIoc2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2N1cnJTZWxlY3Rpb24uZm9yRWFjaCgoc2VsZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRoaXMgY29kZSBoZXJlIGJlY2F1c2Ugbm9ybWFsbHkgd2UgZG9uJ3RcbiAgICAgICAgICAgIC8vIGFsbG93IHJlc2VsZWN0aW5nIHRoZSBzYW1lIGV2ZW50IG92ZXIgYW5kIG92ZXIgZm9yXG4gICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSByZWFzb25zXG4gICAgICAgICAgICB0aGlzLl9hZGRTZWxlY3Rpb25IZWxwZXIoc2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKiogQGRlcHJlY2F0ZWQgdG8gYmUgcmVuYW1lZCB0byBTdGF0ZUhlbHBlciBpbiAyLnggKi9cbmV4cG9ydCBsZXQgU2VsZWN0aW9uSGVscGVyID0gSW50ZXJhY3Rpb25TdGF0ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBSUE7QUFFQTtBQVVBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0xBO0FBaU1BO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/core/interaction-state.ts\n");

/***/ }),

/***/ "./src/core/pixi-helper.ts":
/*!*********************************!*\
  !*** ./src/core/pixi-helper.ts ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ui_base_1 = __webpack_require__(/*! ../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst svg_helper_1 = __webpack_require__(/*! ./svg-helper */ \"./src/core/svg-helper.ts\");\nconst context_menu_1 = __webpack_require__(/*! ./context-menu */ \"./src/core/context-menu.ts\");\nconst PIXI = __webpack_require__(/*! pixi.js */ \"pixi.js\");\nfunction getChromeVersion() {\n    let pieces = navigator.userAgent.match(/Chrom(?:e|ium)\\/([0-9]+)\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)/);\n    if (pieces == null || pieces.length != 5) {\n        return undefined;\n    }\n    let splitVersion = pieces.map(piece => parseInt(piece, 10));\n    return {\n        major: splitVersion[1],\n        minor: splitVersion[2],\n        build: splitVersion[3]\n    };\n}\nclass GraphicsManager {\n    constructor(renderer) {\n        this._graphicsMap = {};\n        this._renderer = renderer;\n    }\n    add(mainKey, altKey, scaleMode, resolution, create) {\n        // create a texture and save it for faster rendering\n        let sprite;\n        if (mainKey) {\n            if (!this._graphicsMap[mainKey]) {\n                this._graphicsMap[mainKey] = this._renderer.generateTexture(create(), scaleMode, resolution);\n            }\n            sprite = new PIXI.Sprite(this._graphicsMap[mainKey]);\n        }\n        else {\n            if (!this._graphicsMap[altKey]) {\n                this._graphicsMap[altKey] = this._renderer.generateTexture(create(), scaleMode, resolution);\n            }\n            sprite = new PIXI.Sprite(this._graphicsMap[altKey]);\n        }\n        return sprite;\n    }\n}\nexports.GraphicsManager = GraphicsManager;\nclass PIXIHelper {\n    constructor(useWebGLRenderer = true) {\n        this._selectionItems = {};\n        PIXI.utils.skipHello();\n        if (useWebGLRenderer) {\n            this._renderer = new PIXI.Renderer({ transparent: true, antialias: true });\n        }\n        else {\n            /** to use this you need to use the pixi.js-legacy script */\n            this._renderer = new PIXI.CanvasRenderer({ transparent: true, antialias: true });\n        }\n        let rect = new PIXI.Graphics();\n        rect.beginFill(0xFFFFFF);\n        rect.drawRect(0, 0, 1, 1); // draw rect)\n        rect.endFill();\n        this._rectTexture = this._renderer.generateTexture(rect, PIXI.SCALE_MODES.LINEAR, 128);\n    }\n    getRenderer() {\n        return this._renderer;\n    }\n    createGraphicsManager() {\n        return new GraphicsManager(this._renderer);\n    }\n    addPixiSvg(svg, classes, width, height) {\n        let oldNodes = svg.node().getElementsByClassName(classes);\n        for (let i = 0; i < oldNodes.length; ++i) {\n            let node = oldNodes[i];\n            node.parentNode.removeChild(node);\n        }\n        let foreignObject = svg\n            .append('foreignObject')\n            .attr('class', classes)\n            .attr('width', width)\n            .attr('height', height); // just for legend\n        let foreignObjectElem = foreignObject.node();\n        let canvas = foreignObjectElem\n            .appendChild(this._renderer.view);\n        let chromeVersion = getChromeVersion();\n        if (chromeVersion !== undefined && chromeVersion.major < 75) {\n            // this is a workaround to fix the fact that transforms aren't working\n            // in chrome resulting in the canvas being mis positioned\n            canvas.style.position = 'fixed';\n            canvas.style.top = -window.scrollY + 'px';\n            let top = -window.scrollY;\n            let oldY = window.scrollY;\n            document.addEventListener('scroll', function () {\n                top = top - (window.scrollY - oldY);\n                canvas.style.top = top + 'px';\n                oldY = window.scrollY;\n            });\n            // end workaround\n        }\n        this._renderer.resize(width, height);\n        return foreignObject;\n    }\n    createRectange(width, height, backgroundColor) {\n        var rect = new PIXI.Sprite(this._rectTexture);\n        rect.width = width;\n        rect.height = height;\n        rect.tint = backgroundColor;\n        return rect;\n    }\n    createRectangleContainer(x, y, width, height, backgroundColor) {\n        var box = new PIXI.Container();\n        let background = this.createRectange(width, height, backgroundColor);\n        box.addChild(background);\n        box.position.x = x;\n        box.position.y = y;\n        return box;\n    }\n    ;\n    renderText(name, parent, color = 0, resolution = 2, scaling = .5) {\n        if (!this._useWebGLRenderer) {\n            resolution = 1;\n            scaling = 1;\n        }\n        // double font resolution for sharpness\n        let fontSize = parent.style('font-size');\n        fontSize =\n            Number(fontSize.substring(0, fontSize.length - 2)) * resolution + 'px';\n        let text = new PIXI.Text(name, {\n            fill: color,\n            fontFamily: parent.style('font-family'),\n            fontSize: fontSize,\n            fontWeight: parent.style('font-weight')\n        });\n        // scale text down\n        text.scale = new PIXI.Point(scaling, scaling);\n        return text;\n    }\n    addInteractionHelper(target, options, onClick, onDoubleClick, contextMenuItems, hoverStart, hoverEnd, tooltip, caller, value, selectionValue) {\n        target.interactive = true;\n        let self = this;\n        let wait;\n        if (onClick || onDoubleClick) {\n            target.on('click', function (e) {\n                e.stopPropagation();\n                if (onDoubleClick) {\n                    if (wait) {\n                        window.clearTimeout(wait);\n                        wait = null;\n                        onDoubleClick({\n                            caller: caller, event: ui_base_1.EventType.DoubleClick, data: value\n                        });\n                    }\n                    else {\n                        wait = setTimeout(function () {\n                            if (wait) {\n                                if (!options.disableSelection) {\n                                    svg_helper_1.onSelectHelper(caller, value, selectionValue ? selectionValue : value);\n                                }\n                                onClick({\n                                    caller: caller, event: ui_base_1.EventType.Click, data: value\n                                });\n                                wait = null;\n                            }\n                        }, 300);\n                    }\n                }\n                else {\n                    if (!options.disableSelection) {\n                        svg_helper_1.onSelectHelper(caller, value, selectionValue ? selectionValue : value);\n                    }\n                    onClick({\n                        caller: caller, event: ui_base_1.EventType.Click, data: value\n                    });\n                }\n            });\n        }\n        function showMenu(e) {\n            e.stopPropagation();\n            if (tooltip) {\n                tooltip.onMouseLeave(e);\n            }\n            context_menu_1.showContextMenu(e.data.originalEvent, value, contextMenuItems);\n        }\n        if (contextMenuItems && contextMenuItems.length) {\n            target\n                .on('rightupoutside', showMenu)\n                .on('rightup', showMenu);\n        }\n        if (hoverStart) {\n            target\n                .on('mouseover', function (e) {\n                if (e.target) {\n                    this.__data__ = value;\n                    hoverStart.call(this);\n                    if (tooltip) {\n                        self._tooltipTarget = e.target;\n                        tooltip.onMouseEnter(value);\n                        tooltip.onMouseMove(value, e.data.originalEvent);\n                    }\n                }\n            });\n        }\n        if (hoverEnd) {\n            target.on('mouseout', function (e) {\n                hoverEnd.call(this);\n                if (tooltip && e.currentTarget === self._tooltipTarget) {\n                    tooltip.onMouseLeave(value);\n                }\n            });\n        }\n    }\n    clearSelections() {\n        this._selectionItems = {};\n    }\n    addSelection(key, item) {\n        if (!this._selectionItems.hasOwnProperty(key)) {\n            this._selectionItems[key] = [];\n        }\n        this._selectionItems[key].push(item);\n    }\n    getSelection(key) {\n        return this._selectionItems[key];\n    }\n    getStage() {\n        return this._stage;\n    }\n    render(stage) {\n        if (!stage) {\n            if (this._stage) {\n                this._renderer.render(this._stage);\n            }\n            return;\n        }\n        this._stage = stage;\n        this._renderer.render(stage);\n    }\n}\nexports.PIXIHelper = PIXIHelper;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9waXhpLWhlbHBlci50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL3NyYy9jb3JlL3BpeGktaGVscGVyLnRzPzllMDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBFdmVudFR5cGUsIElDb250ZXh0TWVudUl0ZW0sIElFdmVudCwgVUlFbGVtZW50LCBJT3B0aW9uc1xufSBmcm9tICcuLi9pbnRlcmZhY2UvdWktYmFzZSc7XG5pbXBvcnQgeyBvblNlbGVjdEhlbHBlciB9IGZyb20gJy4vc3ZnLWhlbHBlcic7XG5pbXBvcnQgeyBCYXNlVG9vbHRpcCB9IGZyb20gJy4vdG9vbHRpcCc7XG5pbXBvcnQgeyBzaG93Q29udGV4dE1lbnUgfSBmcm9tICcuL2NvbnRleHQtbWVudSc7XG5cbmltcG9ydCAqIGFzIFBJWEkgZnJvbSAncGl4aS5qcyc7XG5cbmZ1bmN0aW9uIGdldENocm9tZVZlcnNpb24oKSB7XG4gICAgbGV0IHBpZWNlczogYW55ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb20oPzplfGl1bSlcXC8oWzAtOV0rKVxcLihbMC05XSspXFwuKFswLTldKylcXC4oWzAtOV0rKS8pO1xuICAgIGlmIChwaWVjZXMgPT0gbnVsbCB8fCBwaWVjZXMubGVuZ3RoICE9IDUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHNwbGl0VmVyc2lvbiA9IHBpZWNlcy5tYXAocGllY2UgPT4gcGFyc2VJbnQocGllY2UsIDEwKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWFqb3I6IHNwbGl0VmVyc2lvblsxXSxcbiAgICAgICAgbWlub3I6IHNwbGl0VmVyc2lvblsyXSxcbiAgICAgICAgYnVpbGQ6IHNwbGl0VmVyc2lvblszXVxuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFwaGljc01hbmFnZXIge1xuICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFBJWEkuUmVuZGVyZXI7XG4gICAgcHJvdGVjdGVkIF9ncmFwaGljc01hcDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge31cblxuICAgIGNvbnN0cnVjdG9yKHJlbmRlcmVyOiBQSVhJLlJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZChtYWluS2V5OiBzdHJpbmcsIGFsdEtleTogc3RyaW5nLCBzY2FsZU1vZGU6IGFueSwgcmVzb2x1dGlvbjogbnVtYmVyLFxuICAgICAgICBjcmVhdGU6ICgpID0+IFBJWEkuRGlzcGxheU9iamVjdCk6IGFueSB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgYW5kIHNhdmUgaXQgZm9yIGZhc3RlciByZW5kZXJpbmdcbiAgICAgICAgbGV0IHNwcml0ZTogUElYSS5TcHJpdGU7XG4gICAgICAgIGlmIChtYWluS2V5KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2dyYXBoaWNzTWFwW21haW5LZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JhcGhpY3NNYXBbbWFpbktleV0gPSB0aGlzLl9yZW5kZXJlci5nZW5lcmF0ZVRleHR1cmUoY3JlYXRlKCksIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUodGhpcy5fZ3JhcGhpY3NNYXBbbWFpbktleV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9ncmFwaGljc01hcFthbHRLZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JhcGhpY3NNYXBbYWx0S2V5XSA9IHRoaXMuX3JlbmRlcmVyLmdlbmVyYXRlVGV4dHVyZShjcmVhdGUoKSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZSh0aGlzLl9ncmFwaGljc01hcFthbHRLZXldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3ByaXRlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBJWElIZWxwZXIge1xuICAgIHByb3RlY3RlZCBfc3RhZ2U6IFBJWEkuQ29udGFpbmVyO1xuICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFBJWEkuUmVuZGVyZXI7XG4gICAgcHJvdGVjdGVkIF9yZWN0VGV4dHVyZTogUElYSS5UZXh0dXJlO1xuICAgIHByb3RlY3RlZCBfc2VsZWN0aW9uSXRlbXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHByb3RlY3RlZCBfdXNlV2ViR0xSZW5kZXJlcjogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHVzZVdlYkdMUmVuZGVyZXIgPSB0cnVlKSB7XG4gICAgICAgIFBJWEkudXRpbHMuc2tpcEhlbGxvKCk7XG5cbiAgICAgICAgaWYgKHVzZVdlYkdMUmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyID0gbmV3IFBJWEkuUmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgeyB0cmFuc3BhcmVudDogdHJ1ZSwgYW50aWFsaWFzOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyoqIHRvIHVzZSB0aGlzIHlvdSBuZWVkIHRvIHVzZSB0aGUgcGl4aS5qcy1sZWdhY3kgc2NyaXB0ICovXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlciA9IG5ldyAoUElYSSBhcyBhbnkpLkNhbnZhc1JlbmRlcmVyKFxuICAgICAgICAgICAgICAgIHsgdHJhbnNwYXJlbnQ6IHRydWUsIGFudGlhbGlhczogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVjdCA9IG5ldyBQSVhJLkdyYXBoaWNzKCk7XG4gICAgICAgIHJlY3QuYmVnaW5GaWxsKDB4RkZGRkZGKTtcbiAgICAgICAgcmVjdC5kcmF3UmVjdCgwLCAwLCAxLCAxKTsgLy8gZHJhdyByZWN0KVxuICAgICAgICByZWN0LmVuZEZpbGwoKTtcblxuICAgICAgICB0aGlzLl9yZWN0VGV4dHVyZSA9IHRoaXMuX3JlbmRlcmVyLmdlbmVyYXRlVGV4dHVyZShyZWN0LCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUiwgMTI4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVuZGVyZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlR3JhcGhpY3NNYW5hZ2VyKCkge1xuICAgICAgICByZXR1cm4gbmV3IEdyYXBoaWNzTWFuYWdlcih0aGlzLl9yZW5kZXJlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFBpeGlTdmcoc3ZnOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGFueSwgYW55PixcbiAgICAgICAgY2xhc3Nlczogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6XG4gICAgICAgIGQzLlNlbGVjdGlvbjxhbnksIGFueSwgYW55LCBhbnk+IHtcblxuICAgICAgICBsZXQgb2xkTm9kZXMgPSAoc3ZnLm5vZGUoKSBhcyBhbnkpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3Nlcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2xkTm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBub2RlID0gb2xkTm9kZXNbaV07XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm9yZWlnbk9iamVjdCA9IHN2Z1xuICAgICAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCBjbGFzc2VzKVxuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXG4gICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0KTsgLy8ganVzdCBmb3IgbGVnZW5kXG5cbiAgICAgICAgbGV0IGZvcmVpZ25PYmplY3RFbGVtID0gKGZvcmVpZ25PYmplY3Qubm9kZSgpIGFzIGFueSk7XG4gICAgICAgIGxldCBjYW52YXMgPSBmb3JlaWduT2JqZWN0RWxlbVxuICAgICAgICAgICAgLmFwcGVuZENoaWxkKHRoaXMuX3JlbmRlcmVyLnZpZXcpO1xuXG4gICAgICAgIGxldCBjaHJvbWVWZXJzaW9uID0gZ2V0Q2hyb21lVmVyc2lvbigpO1xuICAgICAgICBpZiAoY2hyb21lVmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmIGNocm9tZVZlcnNpb24ubWFqb3IgPCA3NSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZml4IHRoZSBmYWN0IHRoYXQgdHJhbnNmb3JtcyBhcmVuJ3Qgd29ya2luZ1xuICAgICAgICAgICAgLy8gaW4gY2hyb21lIHJlc3VsdGluZyBpbiB0aGUgY2FudmFzIGJlaW5nIG1pcyBwb3NpdGlvbmVkXG4gICAgICAgICAgICBjYW52YXMuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgICAgICAgY2FudmFzLnN0eWxlLnRvcCA9IC13aW5kb3cuc2Nyb2xsWSArICdweCc7XG5cbiAgICAgICAgICAgIGxldCB0b3AgPSAtd2luZG93LnNjcm9sbFk7XG4gICAgICAgICAgICBsZXQgb2xkWSA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRvcCA9IHRvcCAtICh3aW5kb3cuc2Nyb2xsWSAtIG9sZFkpXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLnRvcCA9IHRvcCArICdweCc7XG4gICAgICAgICAgICAgICAgb2xkWSA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBlbmQgd29ya2Fyb3VuZFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIHJldHVybiBmb3JlaWduT2JqZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSZWN0YW5nZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgYmFja2dyb3VuZENvbG9yOiBudW1iZXIpIHtcbiAgICAgICAgdmFyIHJlY3QgPSBuZXcgUElYSS5TcHJpdGUodGhpcy5fcmVjdFRleHR1cmUpO1xuICAgICAgICByZWN0LndpZHRoID0gd2lkdGg7XG4gICAgICAgIHJlY3QuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICByZWN0LnRpbnQgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIHJldHVybiByZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSZWN0YW5nbGVDb250YWluZXIoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsXG4gICAgICAgIGhlaWdodDogbnVtYmVyLCBiYWNrZ3JvdW5kQ29sb3I6IG51bWJlcikge1xuXG4gICAgICAgIHZhciBib3ggPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAgICAgICAgbGV0IGJhY2tncm91bmQgPSB0aGlzLmNyZWF0ZVJlY3RhbmdlKHdpZHRoLCBoZWlnaHQsIGJhY2tncm91bmRDb2xvcik7XG5cbiAgICAgICAgYm94LmFkZENoaWxkKGJhY2tncm91bmQpO1xuICAgICAgICBib3gucG9zaXRpb24ueCA9IHg7XG4gICAgICAgIGJveC5wb3NpdGlvbi55ID0geTtcbiAgICAgICAgcmV0dXJuIGJveDtcbiAgICB9O1xuXG4gICAgcHVibGljIHJlbmRlclRleHQobmFtZTogc3RyaW5nLCBwYXJlbnQ6IGFueSwgY29sb3I6IG51bWJlciA9IDAsXG4gICAgICAgIHJlc29sdXRpb246IG51bWJlciA9IDIsIHNjYWxpbmc6IG51bWJlciA9IC41KSB7XG4gICAgICAgIGlmICghdGhpcy5fdXNlV2ViR0xSZW5kZXJlcikge1xuICAgICAgICAgICAgcmVzb2x1dGlvbiA9IDE7XG4gICAgICAgICAgICBzY2FsaW5nID0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb3VibGUgZm9udCByZXNvbHV0aW9uIGZvciBzaGFycG5lc3NcbiAgICAgICAgbGV0IGZvbnRTaXplID0gcGFyZW50LnN0eWxlKCdmb250LXNpemUnKTtcbiAgICAgICAgZm9udFNpemUgPVxuICAgICAgICAgICAgTnVtYmVyKGZvbnRTaXplLnN1YnN0cmluZygwLCBmb250U2l6ZS5sZW5ndGggLSAyKSkgKiByZXNvbHV0aW9uICsgJ3B4JztcbiAgICAgICAgbGV0IHRleHQgPSBuZXcgUElYSS5UZXh0KG5hbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsbDogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogcGFyZW50LnN0eWxlKCdmb250LWZhbWlseScpLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBwYXJlbnQuc3R5bGUoJ2ZvbnQtd2VpZ2h0JylcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHNjYWxlIHRleHQgZG93blxuICAgICAgICB0ZXh0LnNjYWxlID0gbmV3IFBJWEkuUG9pbnQoc2NhbGluZywgc2NhbGluZyk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Rvb2x0aXBUYXJnZXQ6IGFueTtcbiAgICBwdWJsaWMgYWRkSW50ZXJhY3Rpb25IZWxwZXIodGFyZ2V0OiBQSVhJLkRpc3BsYXlPYmplY3QsIG9wdGlvbnM6IElPcHRpb25zLFxuICAgICAgICBvbkNsaWNrOiAoZXZlbnQ6IElFdmVudCkgPT4gdm9pZCwgb25Eb3VibGVDbGljazogKGV2ZW50OiBJRXZlbnQpID0+IHZvaWQsXG4gICAgICAgIGNvbnRleHRNZW51SXRlbXM6IElDb250ZXh0TWVudUl0ZW1bXSwgaG92ZXJTdGFydDogKGV2ZW50OiBJRXZlbnQpID0+IHZvaWQsXG4gICAgICAgIGhvdmVyRW5kOiAoZXZlbnQ6IElFdmVudCkgPT4gdm9pZCwgdG9vbHRpcDogQmFzZVRvb2x0aXAsIGNhbGxlcjogVUlFbGVtZW50LFxuICAgICAgICB2YWx1ZTogYW55LCBzZWxlY3Rpb25WYWx1ZTogYW55KSB7XG5cbiAgICAgICAgdGFyZ2V0LmludGVyYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGxldCB3YWl0OiBhbnk7XG4gICAgICAgIGlmIChvbkNsaWNrIHx8IG9uRG91YmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHRhcmdldC5vbignY2xpY2snLCBmdW5jdGlvbiAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAob25Eb3VibGVDbGljaykge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2FpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh3YWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Eb3VibGVDbGljayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVyOiBjYWxsZXIsIGV2ZW50OiBFdmVudFR5cGUuRG91YmxlQ2xpY2ssIGRhdGE6IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGlzYWJsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RIZWxwZXIoY2FsbGVyLCB2YWx1ZSwgc2VsZWN0aW9uVmFsdWUgPyBzZWxlY3Rpb25WYWx1ZSA6IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlcjogY2FsbGVyLCBldmVudDogRXZlbnRUeXBlLkNsaWNrLCBkYXRhOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5kaXNhYmxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdEhlbHBlcihjYWxsZXIsIHZhbHVlLCBzZWxlY3Rpb25WYWx1ZSA/IHNlbGVjdGlvblZhbHVlIDogdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVyOiBjYWxsZXIsIGV2ZW50OiBFdmVudFR5cGUuQ2xpY2ssIGRhdGE6IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2hvd01lbnUoZTogYW55KSB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWYgKHRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwLm9uTW91c2VMZWF2ZShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3dDb250ZXh0TWVudShlLmRhdGEub3JpZ2luYWxFdmVudCwgdmFsdWUsIGNvbnRleHRNZW51SXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRhcmdldFxuICAgICAgICAgICAgICAgIC5vbigncmlnaHR1cG91dHNpZGUnLCBzaG93TWVudSlcbiAgICAgICAgICAgICAgICAub24oJ3JpZ2h0dXAnLCBzaG93TWVudSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaG92ZXJTdGFydCkge1xuICAgICAgICAgICAgdGFyZ2V0XG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX19kYXRhX18gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyU3RhcnQuY2FsbCh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90b29sdGlwVGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC5vbk1vdXNlRW50ZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXAub25Nb3VzZU1vdmUodmFsdWUsIGUuZGF0YS5vcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaG92ZXJFbmQpIHtcbiAgICAgICAgICAgIHRhcmdldC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGhvdmVyRW5kLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRvb2x0aXAgJiYgZS5jdXJyZW50VGFyZ2V0ID09PSBzZWxmLl90b29sdGlwVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAub25Nb3VzZUxlYXZlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkl0ZW1zID0ge307XG4gICAgfVxuICAgIHB1YmxpYyBhZGRTZWxlY3Rpb24oa2V5OiBzdHJpbmcsIGl0ZW06IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGlvbkl0ZW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbkl0ZW1zW2tleV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25JdGVtc1trZXldLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlbGVjdGlvbihrZXk6IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkl0ZW1zW2tleV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0YWdlKCk6IFBJWEkuQ29udGFpbmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoc3RhZ2U/OiBQSVhJLkNvbnRhaW5lcikge1xuICAgICAgICBpZiAoIXN0YWdlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc3RhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YWdlID0gc3RhZ2U7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBR0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUZBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQTJCQTtBQU9BO0FBSEE7QUFJQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhPQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/core/pixi-helper.ts\n");

/***/ }),

/***/ "./src/core/renderer.ts":
/*!******************************!*\
  !*** ./src/core/renderer.ts ***!
  \******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ui_base_1 = __webpack_require__(/*! ../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst color_manager_1 = __webpack_require__(/*! ./color-manager */ \"./src/core/color-manager.ts\");\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\nlet UIRendererMap = {};\nlet testContext;\nif (typeof document !== 'undefined') {\n    testContext = document.createElement('canvas').getContext('2d');\n}\nfunction getTextWidth(text, font, size) {\n    testContext.font = size + 'px ' + font;\n    return testContext.measureText(text).width;\n}\nexports.getTextWidth = getTextWidth;\n;\nclass UIElementRenderer {\n    /**\n     * get the options the renderer is using for the given element\n     *\n     * @param the element to invalidate\n     */\n    getOptions() { return this._options; }\n    /**\n     * get the colors the renderer is using for the given element\n     *\n     * @param the element to invalidate\n     */\n    getColorManager() { return this._colorMgr; }\n    setColorManager(colorMgr) { this._colorMgr = colorMgr; }\n}\nexports.UIElementRenderer = UIElementRenderer;\nclass D3Renderer {\n    constructor(parentId, colorMgr = new color_manager_1.ColorManager()) {\n        if (parentId) {\n            this._parentId = parentId;\n            this._parent = d3.select('body').select(parentId);\n        }\n        if (colorMgr) {\n            this._colorMgr = colorMgr;\n        }\n        this._rendererMap = new WeakMap();\n    }\n    static register(type, renderer) {\n        UIRendererMap[type] = renderer;\n    }\n    setOnRenderCallback(callback) {\n        this.onRender = callback;\n    }\n    clearDiv(parentDiv) {\n        if (parentDiv) {\n            while (parentDiv.firstChild) {\n                parentDiv.removeChild(parentDiv.firstChild);\n            }\n        }\n    }\n    setDiv(parentDiv) {\n        this._parent = d3.select(parentDiv);\n    }\n    /**\n     * Get the css actually rendered. This is useful for legend swatches\n     * and the like.\n     *\n     * @param the element to get the rendered CSS information for\n     *\n     * @return The css rendered, or undefined if called before the chart is\n     *   rendered\n     */\n    getRenderedCss(element) {\n        if (this._rendererMap.has(element)) {\n            return this._rendererMap.get(element).getRenderedCss();\n        }\n        return new ui_base_1.Css();\n    }\n    /**\n     * @deprecated ('Deprecated since 1.14.0 in favor of focus.  Will be removed in 2.x')\n     * hover event\n     *\n     * @param element to fire the hover event on\n     * @param event the event to pass to the renderer\n     */\n    hover(element, event) {\n        this.focus(element, event);\n    }\n    /**\n     * bring an item into focus\n     *\n     * @param element to fire the focus event on\n     * @param event the event to pass to the renderer\n     */\n    focus(element, event) {\n        if (this._rendererMap.has(element)) {\n            if (!this._rendererMap.get(element).focus) {\n                this._rendererMap.get(element).hover(event);\n            }\n            return this._rendererMap.get(element).focus(event);\n        }\n    }\n    /**\n     * select an item\n     *\n     * @param element to fire the select event on\n     * @param event the event to pass to the renderer\n     */\n    select(element, event) {\n        if (this._rendererMap.has(element)) {\n            this._rendererMap.get(element).select(event);\n        }\n    }\n    /**\n     * zoom event\n     *\n     * @param element to fire the zoom event on\n     * @param event the event to pass to the renderer\n     */\n    zoom(element, event) {\n        if (this._rendererMap.has(element)) {\n            this._rendererMap.get(element).zoom(event);\n        }\n    }\n    /**\n     * tooltip the element.\n     *\n     * @param renderer an IRenderer object that has the tooltip\n     * @param event the event to pass to the renderer\n     */\n    getTooltipData(element, event) {\n        if (this._rendererMap.has(element)) {\n            return this._rendererMap.get(element).getTooltipData(event);\n        }\n        return [{ source: element, group: '', metrics: {} }];\n    }\n    /**\n     * hover event\n     *\n     * @param element to fire the hover event on\n     * @param event the event to pass to the renderer\n     */\n    cursorChange(element, event) {\n        if (this._rendererMap.has(element)) {\n            return this._rendererMap.get(element).cursorChange(event);\n        }\n    }\n    /**\n     * brush event\n     *\n     * @param element to fire the brush event on\n     * @param event the event to pass to the renderer\n     */\n    brush(element, event) {\n        if (this._rendererMap.has(element)) {\n            return this._rendererMap.get(element).brush(event);\n        }\n    }\n    configureElement(element) {\n        let self = this;\n        element.renderer = this;\n        if (!this._rendererMap.has(element)) {\n            let node = this._parent.node();\n            if (!node) {\n                this._parent = d3.select(this._parentId);\n            }\n            let Renderer = UIRendererMap[element.type];\n            if (Renderer) {\n                let r = new Renderer(element, this, this._parent);\n                r.setColorManager(this._colorMgr);\n                this._rendererMap.set(element, r);\n            }\n        }\n    }\n    /**\n     * Render the given element\n     *\n     * @param the element to render\n     */\n    render(element, options = {}) {\n        let self = this;\n        element.renderer = this;\n        this.configureElement(element);\n        if (this._rendererMap.has(element)) {\n            this._rendererMap.get(element).render(options);\n            if (element.onRender) {\n                element.onRender(options);\n            }\n            if (this.onRender) {\n                this.onRender(element, options);\n            }\n        }\n    }\n    /**\n     * invalidate the given element\n     *\n     * @param the element to invalidate\n     */\n    invalidate(element, options = {}) {\n        let self = this;\n        element.renderer = this;\n        this.configureElement(element);\n        if (this._rendererMap.has(element)) {\n            this._rendererMap.get(element).invalidate(options);\n            if (element.onRender) {\n                element.onRender(options);\n            }\n            if (this.onRender) {\n                this.onRender(element, options);\n            }\n        }\n    }\n    setColorManager(colorManager) {\n        this._colorMgr = colorManager;\n    }\n    /**\n     * get color manager for this renderer\n     */\n    getColorManager() {\n        return this._colorMgr;\n    }\n    /**\n     * free the resources used by the renderer for this element\n     */\n    destroy(element) {\n        this._rendererMap.delete(element);\n    }\n    /**\n     * get the options the renderer is using for the given element\n     *\n     * @param the element to invalidate\n     */\n    getOptions(element) {\n        if (this._rendererMap.has(element)) {\n            return this._rendererMap.get(element).getOptions();\n        }\n    }\n}\nexports.D3Renderer = D3Renderer;\nexports.D3ChartRenderer = D3Renderer;\nexports.D3GraphRenderer = D3Renderer;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9yZW5kZXJlci50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL3NyYy9jb3JlL3JlbmRlcmVyLnRzP2I3ZWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJRXZlbnQsIElPcHRpb25zLCBVSUVsZW1lbnQsIFVJUmVuZGVyZXIsIENzcywgSVRvb2x0aXBEYXRhLCBVSVR5cGVcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLWJhc2UnO1xuaW1wb3J0IHsgQ29sb3JNYW5hZ2VyIH0gZnJvbSAnLi9jb2xvci1tYW5hZ2VyJztcbmltcG9ydCB7IFNWR1JlbmRlcmVyIH0gZnJvbSAnLi9zdmctaGVscGVyJztcblxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuXG5sZXQgVUlSZW5kZXJlck1hcDogeyBbaW5kZXg6IG51bWJlcl06IE9iamVjdCB9ID0ge307XG5cbmxldCB0ZXN0Q29udGV4dDogYW55O1xuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0ZXN0Q29udGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dFdpZHRoKHRleHQ6IHN0cmluZywgZm9udDogc3RyaW5nLCBzaXplOiBzdHJpbmcpIHtcbiAgICB0ZXN0Q29udGV4dC5mb250ID0gc2l6ZSArICdweCAnICsgZm9udDtcbiAgICByZXR1cm4gdGVzdENvbnRleHQubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XG59O1xuXG5leHBvcnQgY2xhc3MgVUlFbGVtZW50UmVuZGVyZXIge1xuICAgIHByb3RlY3RlZCBfb3B0aW9uczogSU9wdGlvbnM7XG4gICAgcHJvdGVjdGVkIF9jb2xvck1ncjogQ29sb3JNYW5hZ2VyO1xuICAgIC8qKiB0aGUgb3JpZ2luYWwgdXNlciBkZWZpbmVkIGVsZW1lbnQgKi9cbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnQ6IFVJRWxlbWVudDtcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgb3B0aW9ucyB0aGUgcmVuZGVyZXIgaXMgdXNpbmcgZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGhlIGVsZW1lbnQgdG8gaW52YWxpZGF0ZVxuICAgICAqL1xuICAgIGdldE9wdGlvbnMoKTogSU9wdGlvbnMgeyByZXR1cm4gdGhpcy5fb3B0aW9uczsgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSBjb2xvcnMgdGhlIHJlbmRlcmVyIGlzIHVzaW5nIGZvciB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHRoZSBlbGVtZW50IHRvIGludmFsaWRhdGVcbiAgICAgKi9cbiAgICBnZXRDb2xvck1hbmFnZXIoKTogQ29sb3JNYW5hZ2VyIHsgcmV0dXJuIHRoaXMuX2NvbG9yTWdyOyB9XG4gICAgc2V0Q29sb3JNYW5hZ2VyKGNvbG9yTWdyOiBDb2xvck1hbmFnZXIpIHsgdGhpcy5fY29sb3JNZ3IgPSBjb2xvck1nciB9XG59XG5cbmV4cG9ydCBjbGFzcyBEM1JlbmRlcmVyIGltcGxlbWVudHMgVUlSZW5kZXJlciB7XG4gICAgcHVibGljIHN0YXRpYyByZWdpc3Rlcih0eXBlOiBVSVR5cGUsIHJlbmRlcmVyOiBPYmplY3QpIHtcbiAgICAgICAgVUlSZW5kZXJlck1hcFt0eXBlXSA9IHJlbmRlcmVyO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcGFyZW50IGlkIG9mIHRoZSBkaXYgKi9cbiAgICBwcm90ZWN0ZWQgX3BhcmVudDogZDMuU2VsZWN0aW9uPGQzLkJhc2VUeXBlLCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+O1xuICAgIHByb3RlY3RlZCBfcGFyZW50SWQ6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2NvbG9yTWdyOiBDb2xvck1hbmFnZXI7XG5cbiAgICAvKiogbWFwcyB0byByZW5kZXIgZWxlbWVudHMgaWYgbXVsdGlwbGUgcmVuZGVycyBhcmUgdXNlZFxuICAgICAqICB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlICovXG4gICAgcHJvdGVjdGVkIF9yZW5kZXJlck1hcDogV2Vha01hcDxVSUVsZW1lbnQsIFNWR1JlbmRlcmVyPjtcblxuICAgIC8vIGZyb20gVUlSZW5kZXJlclxuICAgIHB1YmxpYyBvblJlbmRlcjogKGVsZW06IFVJRWxlbWVudCwgb3B0aW9uczogSU9wdGlvbnMpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnRJZD86IHN0cmluZywgY29sb3JNZ3I6IENvbG9yTWFuYWdlciA9IG5ldyBDb2xvck1hbmFnZXIoKSkge1xuICAgICAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudElkID0gcGFyZW50SWQ7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnQgPSBkMy5zZWxlY3QoJ2JvZHknKS5zZWxlY3QocGFyZW50SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xvck1ncikge1xuICAgICAgICAgICAgdGhpcy5fY29sb3JNZ3IgPSBjb2xvck1ncjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyTWFwID0gbmV3IFdlYWtNYXA8VUlFbGVtZW50LCBTVkdSZW5kZXJlcj4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T25SZW5kZXJDYWxsYmFjayhjYWxsYmFjazogKGVsZW06IFVJRWxlbWVudCwgb3B0aW9uczogSU9wdGlvbnMpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5vblJlbmRlciA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckRpdihwYXJlbnREaXY6IEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudERpdikge1xuICAgICAgICAgICAgd2hpbGUgKHBhcmVudERpdi5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50RGl2LnJlbW92ZUNoaWxkKHBhcmVudERpdi5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXYocGFyZW50RGl2OiBFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IGQzLnNlbGVjdChwYXJlbnREaXYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3NzIGFjdHVhbGx5IHJlbmRlcmVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgbGVnZW5kIHN3YXRjaGVzXG4gICAgICogYW5kIHRoZSBsaWtlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRoZSBlbGVtZW50IHRvIGdldCB0aGUgcmVuZGVyZWQgQ1NTIGluZm9ybWF0aW9uIGZvclxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgY3NzIHJlbmRlcmVkLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhcnQgaXNcbiAgICAgKiAgIHJlbmRlcmVkXG4gICAgICovXG4gICAgcHVibGljIGdldFJlbmRlcmVkQ3NzKGVsZW1lbnQ6IFVJRWxlbWVudCk6IENzcyB7XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJlck1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJlck1hcC5nZXQoZWxlbWVudCkuZ2V0UmVuZGVyZWRDc3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENzcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkICgnRGVwcmVjYXRlZCBzaW5jZSAxLjE0LjAgaW4gZmF2b3Igb2YgZm9jdXMuICBXaWxsIGJlIHJlbW92ZWQgaW4gMi54JylcbiAgICAgKiBob3ZlciBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgdG8gZmlyZSB0aGUgaG92ZXIgZXZlbnQgb25cbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIHBhc3MgdG8gdGhlIHJlbmRlcmVyXG4gICAgICovXG4gICAgcHVibGljIGhvdmVyKGVsZW1lbnQ6IFVJRWxlbWVudCwgZXZlbnQ6IElFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzKGVsZW1lbnQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBicmluZyBhbiBpdGVtIGludG8gZm9jdXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IHRvIGZpcmUgdGhlIGZvY3VzIGV2ZW50IG9uXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1cyhlbGVtZW50OiBVSUVsZW1lbnQsIGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVyTWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9yZW5kZXJlck1hcC5nZXQoZWxlbWVudCkuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlck1hcC5nZXQoZWxlbWVudCkuaG92ZXIoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVyTWFwLmdldChlbGVtZW50KS5mb2N1cyhldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZWxlY3QgYW4gaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgdG8gZmlyZSB0aGUgc2VsZWN0IGV2ZW50IG9uXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QoZWxlbWVudDogVUlFbGVtZW50LCBldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJlck1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyTWFwLmdldChlbGVtZW50KS5zZWxlY3QoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogem9vbSBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgdG8gZmlyZSB0aGUgem9vbSBldmVudCBvblxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgem9vbShlbGVtZW50OiBVSUVsZW1lbnQsIGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVyTWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXJNYXAuZ2V0KGVsZW1lbnQpLnpvb20oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdG9vbHRpcCB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW5kZXJlciBhbiBJUmVuZGVyZXIgb2JqZWN0IHRoYXQgaGFzIHRoZSB0b29sdGlwXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUb29sdGlwRGF0YShlbGVtZW50OiBVSUVsZW1lbnQsIGV2ZW50OiBJRXZlbnQpOiBJVG9vbHRpcERhdGFbXSB7XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJlck1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJlck1hcC5nZXQoZWxlbWVudCkuZ2V0VG9vbHRpcERhdGEoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbeyBzb3VyY2U6IGVsZW1lbnQsIGdyb3VwOiAnJywgbWV0cmljczoge30gfV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaG92ZXIgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IHRvIGZpcmUgdGhlIGhvdmVyIGV2ZW50IG9uXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJzb3JDaGFuZ2UoZWxlbWVudDogVUlFbGVtZW50LCBldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJlck1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJlck1hcC5nZXQoZWxlbWVudCkuY3Vyc29yQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGJydXNoIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCB0byBmaXJlIHRoZSBicnVzaCBldmVudCBvblxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgYnJ1c2goZWxlbWVudDogVUlFbGVtZW50LCBldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJlck1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJlck1hcC5nZXQoZWxlbWVudCkuYnJ1c2goZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbmZpZ3VyZUVsZW1lbnQoZWxlbWVudDogVUlFbGVtZW50KSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgZWxlbWVudC5yZW5kZXJlciA9IHRoaXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9yZW5kZXJlck1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGxldCBub2RlOiBhbnkgPSB0aGlzLl9wYXJlbnQubm9kZSgpO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50ID0gZDMuc2VsZWN0KHRoaXMuX3BhcmVudElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IFJlbmRlcmVyOiBhbnkgPSBVSVJlbmRlcmVyTWFwW2VsZW1lbnQudHlwZV07XG4gICAgICAgICAgICBpZiAoUmVuZGVyZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgciA9IG5ldyBSZW5kZXJlcihlbGVtZW50LCB0aGlzLCB0aGlzLl9wYXJlbnQpO1xuICAgICAgICAgICAgICAgIHIuc2V0Q29sb3JNYW5hZ2VyKHRoaXMuX2NvbG9yTWdyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlck1hcC5zZXQoZWxlbWVudCwgcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZWxlbWVudCB0byByZW5kZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVuZGVyKGVsZW1lbnQ6IFVJRWxlbWVudCwgb3B0aW9uczogSU9wdGlvbnMgPSB7fSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGVsZW1lbnQucmVuZGVyZXIgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY29uZmlndXJlRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVyTWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXJNYXAuZ2V0KGVsZW1lbnQpLnJlbmRlcihvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm9uUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5vblJlbmRlcihvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9uUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlbmRlcihlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGludmFsaWRhdGUgdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZWxlbWVudCB0byBpbnZhbGlkYXRlXG4gICAgICovXG4gICAgcHVibGljIGludmFsaWRhdGUoZWxlbWVudDogVUlFbGVtZW50LCBvcHRpb25zOiBJT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgZWxlbWVudC5yZW5kZXJlciA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBpZiAodGhpcy5fcmVuZGVyZXJNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlck1hcC5nZXQoZWxlbWVudCkuaW52YWxpZGF0ZShvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm9uUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5vblJlbmRlcihvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9uUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlbmRlcihlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb2xvck1hbmFnZXIoY29sb3JNYW5hZ2VyOiBDb2xvck1hbmFnZXIpIHtcbiAgICAgICAgdGhpcy5fY29sb3JNZ3IgPSBjb2xvck1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IGNvbG9yIG1hbmFnZXIgZm9yIHRoaXMgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29sb3JNYW5hZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JNZ3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZnJlZSB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIHJlbmRlcmVyIGZvciB0aGlzIGVsZW1lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzdHJveShlbGVtZW50OiBVSUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXJNYXAuZGVsZXRlKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgb3B0aW9ucyB0aGUgcmVuZGVyZXIgaXMgdXNpbmcgZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGhlIGVsZW1lbnQgdG8gaW52YWxpZGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRPcHRpb25zKGVsZW1lbnQ6IFVJRWxlbWVudCk6IElPcHRpb25zIHtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVyTWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVyTWFwLmdldChlbGVtZW50KS5nZXRPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBsZXQgRDNDaGFydFJlbmRlcmVyID0gRDNSZW5kZXJlcjtcbmV4cG9ydCBsZXQgRDNHcmFwaFJlbmRlcmVyID0gRDNSZW5kZXJlcjsiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFHQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFHQTtBQUVBO0FBTUE7Ozs7QUFJQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQXBCQTtBQXNCQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQTFCQTtBQUNBO0FBQ0E7QUEwQkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3T0E7QUErT0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/core/renderer.ts\n");

/***/ }),

/***/ "./src/core/svg-helper.ts":
/*!********************************!*\
  !*** ./src/core/svg-helper.ts ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./src/core/utilities.ts\");\nconst ui_base_1 = __webpack_require__(/*! ../interface/ui-base */ \"./src/interface/ui-base.ts\");\nconst context_menu_1 = __webpack_require__(/*! ./context-menu */ \"./src/core/context-menu.ts\");\nconst interaction_state_1 = __webpack_require__(/*! ./interaction-state */ \"./src/core/interaction-state.ts\");\nconst d3_legend_master_1 = __webpack_require__(/*! ../../third-party/d3-legend-master */ \"./third-party/d3-legend-master/indexRollupNext.js\");\nconst renderer_1 = __webpack_require__(/*! ./renderer */ \"./src/core/renderer.ts\");\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\nfunction getStyle(target) {\n    let node = target.node();\n    let style = window.getComputedStyle(node);\n    return style;\n}\nexports.getStyle = getStyle;\n/**\n* take two lists of strings and merge them into one list with only unique values\n* note this changes the original list\n*/\nfunction mergeKeys(arr1, arr2) {\n    let keys = {};\n    for (let i = 0; i < arr1.length; ++i) {\n        keys[arr1[i]] = true;\n    }\n    for (let i = 0; i < arr2.length; ++i) {\n        if (!keys.hasOwnProperty(arr2[i])) {\n            arr1.push(arr2[i]);\n        }\n    }\n}\nexports.mergeKeys = mergeKeys;\nfunction getKeys(data, accessor) {\n    let keyMap = {};\n    let keyList = [];\n    for (let i = 0; i < data.length; ++i) {\n        let keys = accessor(data[i]);\n        for (let i = 0; i < keys.length; ++i) {\n            if ((typeof keys[i] === 'string' || typeof keys[i] === 'number') &&\n                !keyMap.hasOwnProperty(keys[i])) {\n                keyMap[keys[i]] = true;\n                keyList.push(keys[i]);\n            }\n        }\n    }\n    return keyList;\n}\nexports.getKeys = getKeys;\nfunction getColor(d3Obj, map, color = undefined) {\n    color = color && color !== 'none' ? color : undefined;\n    if (!map.has(d3Obj.node())) {\n        map.set(d3Obj.node(), color);\n    }\n    return map.get(d3Obj.node());\n}\nfunction focus(d3Obj, fillColors, strokeColors) {\n    // if you don't own the style then when you save the\n    // colors save null so we restore this DOM object to\n    // the same state (aka it removes the style)\n    let fillColor = d3Obj.style('fill');\n    fillColor = getColor(d3Obj, fillColors, fillColor);\n    // always save the color even if it's not defined so we have the original later\n    if (fillColor) {\n        let hoverColor = interaction_state_1.InteractionState.getFocusColor(fillColor);\n        d3Obj.style('fill', hoverColor);\n    }\n    if (!d3Obj.classed('selected')) {\n        let strokeColor = d3Obj.style('stroke');\n        strokeColor = getColor(d3Obj, strokeColors, strokeColor);\n        if (strokeColor) {\n            let hoverColor = interaction_state_1.InteractionState.getFocusColor(strokeColor);\n            d3Obj.style('stroke', hoverColor);\n        }\n    }\n    d3Obj.classed('hover', true);\n}\nexports.focus = focus;\nfunction unfocus(d3Obj, fillColors, strokeColors) {\n    let fillColor = getColor(d3Obj, fillColors);\n    if (fillColor) {\n        d3Obj.style('fill', fillColor);\n    }\n    if (!d3Obj.classed('selected')) {\n        let strokeColor = d3Obj.style('stroke');\n        if (strokeColor) {\n            strokeColor = getColor(d3Obj, strokeColors);\n            if (strokeColor) {\n                d3Obj.style('stroke', strokeColor);\n            }\n        }\n    }\n    d3Obj.classed('hover', false);\n}\nexports.unfocus = unfocus;\nfunction select(d3Obj, fillColors, strokeColors) {\n    /** if no fill then we only have strokes to deal with we change the color of the stroke */\n    let fillColor = d3Obj.style('fill');\n    fillColor = getColor(d3Obj, fillColors, fillColor);\n    let isStrokeOnly = !fillColor || fillColor === 'none';\n    let strokeColor = d3Obj.style('stroke');\n    strokeColor = getColor(d3Obj, strokeColors, strokeColor);\n    if (strokeColor || isStrokeOnly) {\n        // use the CSS value for selected stroke\n        d3Obj.style('stroke', null);\n    }\n    d3Obj.classed('selected', true);\n}\nexports.select = select;\nfunction unselect(d3Obj, fillColors, strokeColors) {\n    let color = getColor(d3Obj, strokeColors);\n    if (color) {\n        d3Obj.style('stroke', color);\n    }\n    d3Obj.classed('selected', false);\n}\nexports.unselect = unselect;\nfunction onSelectHelper(caller, value, selectionValue) {\n    let clearEvent = { caller: caller, data: value, event: ui_base_1.EventType.SelectClear };\n    let selectEvent = {\n        caller: caller, event: ui_base_1.EventType.SelectAdd, data: value, selection: selectionValue\n    };\n    caller.api.select(clearEvent);\n    caller.api.select(selectEvent);\n    if (caller.onClick) {\n        caller.onClick(clearEvent);\n        caller.onClick(selectEvent);\n    }\n}\nexports.onSelectHelper = onSelectHelper;\nfunction addClickHelper(target, options, onClick, onDoubleClick, contextMenuItems, tooltip, caller, value, selectionValue) {\n    let wait;\n    target.on('click', function (d) {\n        if (value !== undefined) {\n            d = value;\n        }\n        if (onDoubleClick) {\n            wait = setTimeout(function () {\n                if (wait) {\n                    if (!options.disableSelection) {\n                        onSelectHelper(caller, value, selectionValue);\n                    }\n                    if (onClick) {\n                        onClick({ caller: caller, event: ui_base_1.EventType.Click, data: d });\n                    }\n                    wait = null;\n                }\n            }, 300);\n        }\n        else {\n            if (!options.disableSelection) {\n                onSelectHelper(caller, value, selectionValue);\n            }\n            if (onClick) {\n                onClick({ caller: caller, event: ui_base_1.EventType.Click, data: d });\n            }\n        }\n    });\n    if (onDoubleClick) {\n        target.on('dblclick', function (d) {\n            if (value !== undefined) {\n                d = value;\n            }\n            window.clearTimeout(wait);\n            wait = null;\n            onDoubleClick({ caller: caller, event: ui_base_1.EventType.DoubleClick, data: d });\n        });\n    }\n    if (contextMenuItems && contextMenuItems.length) {\n        target.on('contextmenu', function (d) {\n            if (!event) {\n                event = d3.event;\n            }\n            context_menu_1.showContextMenu(d3.event, value, contextMenuItems);\n        });\n    }\n}\nexports.addClickHelper = addClickHelper;\nfunction getSVGPoint(svg, elem, point) {\n    if (svg.getScreenCTM && svg.getScreenCTM()) {\n        // if getScreenCTM is not working right (aka Firefox...?)\n        let matrix = svg.getScreenCTM().inverse();\n        let svgPoint = point.matrixTransform(matrix);\n        return svgPoint;\n    }\n    return { x: point.x, y: point.y };\n}\n/** Note this is very expensive due to the getBoudingClientRect() call so\n * you should cache this result if possible\n */\nfunction convertToSVGCoords(svg, element) {\n    let clientRect = element.node().getBoundingClientRect();\n    let svgNode = svg.node();\n    let elemNode = element.node();\n    let p = svgNode.createSVGPoint();\n    p.x = clientRect.left;\n    p.y = clientRect.top;\n    let topLeft = getSVGPoint(svgNode, elemNode, p);\n    p.x = clientRect.right;\n    p.y = clientRect.bottom;\n    let bottomRight = getSVGPoint(svgNode, elemNode, p);\n    return {\n        x: topLeft.x,\n        y: topLeft.y,\n        width: bottomRight.x - topLeft.x,\n        height: bottomRight.y - topLeft.y,\n        right: bottomRight.x,\n        bottom: bottomRight.y\n    };\n}\nexports.convertToSVGCoords = convertToSVGCoords;\nfunction getTextRect(svg, text) {\n    // temporarily append to DOM to get text size\n    let textRenderer = svg\n        .append('text')\n        .text(text);\n    let ret = convertToSVGCoords(svg, textRenderer);\n    textRenderer.remove();\n    return ret;\n}\nexports.getTextRect = getTextRect;\nfunction animatePath(path, duration) {\n    let pathLength = path.node().getTotalLength();\n    path\n        .attr('stroke-dasharray', pathLength)\n        .attr('stroke-dashoffset', pathLength)\n        .transition('add')\n        .duration(duration)\n        .attr('stroke-dashoffset', 0);\n}\nexports.animatePath = animatePath;\nclass Arrow {\n    static getAngle(start, end) {\n        return Math.atan2(end.y - start.y, end.x - start.x) * 180 / Math.PI;\n    }\n    // Returns an attrTween for translating along the specified path element.\n    static translateArrow(path) {\n        // Approximate tangent\n        return function (d, i, a) {\n            return function (t) {\n                var l = path.getTotalLength();\n                var pos = path.getPointAtLength(t * l);\n                var start = path.getPointAtLength(Math.max(l - 0.01, 0) * t);\n                var end = path.getPointAtLength((l + 0.01) * t);\n                return 'translate(' + pos.x + ', ' + pos.y + ') rotate( ' +\n                    Arrow.getAngle(start, end) + ')';\n            };\n        };\n    }\n    static createArrow(group, size = 4) {\n        let doubleSize = size * 2;\n        return group.append('path')\n            .attr('d', `M -${doubleSize}, -${size} L0,0 L-${doubleSize},${size} z`);\n    }\n    static animateArrow(path, arrow, duration) {\n        arrow.transition()\n            .duration(duration)\n            .attrTween('transform', Arrow.translateArrow(path.node()));\n    }\n}\nexports.Arrow = Arrow;\nclass Spinner {\n    constructor(svg, rect) {\n        let self = this;\n        let radius = Math.min(rect.width, rect.height) / 2;\n        let tau = 2 * Math.PI;\n        self._svg = svg;\n        let arc = d3.arc()\n            .innerRadius(radius * 0.5)\n            .outerRadius(radius * 0.9)\n            .startAngle(0);\n        let background = self._svg.append('path')\n            .classed('spinner', true)\n            .datum({ endAngle: 0.66 * tau })\n            .style('fill', 'rgb(0,113,197)')\n            .attr('d', arc)\n            .call(spin, 1500);\n        function spin(selection, duration) {\n            selection.transition()\n                .ease(d3.easeLinear)\n                .duration(duration)\n                .attrTween('transform', function () {\n                return d3.interpolateString('rotate(0)', 'rotate(360)');\n            });\n            setTimeout(function () {\n                if (self._svg) {\n                    spin(selection, duration);\n                }\n            }, duration);\n        }\n    }\n}\nexports.Spinner = Spinner;\n/**\n * The Brush class uses D3's brush behavior to implement zooming\n * for Configuration Analyzer graphs where the X axis is time.\n *\n */\nclass Brush {\n    /**\n    * Construct a Brush instance.\n    */\n    constructor() {\n        // Put 'this' into a variable that will be visible in the callbacks\n        let self = this;\n        self._isXY = false;\n        // BrushMove function - called when an 'on mousemove' event occurs\n        this.onBrushStart = function (d) {\n            if (self._onStartCallback) {\n                let dataBounds = d3.brushSelection(this);\n                self._onStartCallback.call(this, dataBounds);\n            }\n        }; // BrushMove\n        // BrushMove function - called when an 'on mousemove' event occurs\n        this.onBrushMove = function (d) {\n            if (self._onMoveCallback) {\n                let dataBounds = d3.brushSelection(this);\n                self._onMoveCallback.call(this, dataBounds);\n            }\n        }; // BrushMove\n        // BrushEnd - Called an 'on mouseup' event\n        this.onBrushEnd = function (d) {\n            // Call the brush call-back function with the selected domain\n            // (most commonly, the graph will be 'zoomed' to the extent)\n            if (self._onEndCallback) {\n                let dataBounds = d3.brushSelection(this);\n                self._onEndCallback.call(this, dataBounds);\n            }\n        }; // BrushEnd\n    } // constructor\n    moveToFront() {\n        this._brushTargetGraph.each(function () {\n            this.parentNode.appendChild(this);\n        });\n    }\n    moveToBack() {\n        this._brushTargetGraph.each(function () {\n            let firstChild = this.parentNode.firstChild;\n            if (firstChild) {\n                this.parentNode.insertBefore(this, firstChild);\n            }\n        });\n    }\n    enableCallbacks() {\n        let self = this;\n        this._brush\n            .on('start', self.onBrushStart)\n            .on('brush', self.onBrushMove)\n            .on('end', self.onBrushEnd);\n        return this;\n    }\n    disableCallbacks() {\n        this._brush\n            .on('start', undefined)\n            .on('brush', undefined)\n            .on('end', undefined);\n        return this;\n    }\n    brushStart(domain) {\n        this._brushTargetGraph.call(this._brush.move, null);\n    }\n    brushMove(domain) {\n        this._brushTargetGraph.call(this._brush.move, domain);\n    }\n    brushEnd() {\n        // clear brush from graph\n        this._brushTargetGraph.call(this._brush.move, null);\n    }\n    setXY(isXY) {\n        this._isXY = isXY;\n        return this;\n    }\n    setTarget(graphSVG) {\n        this._brushTargetGraph = graphSVG;\n        return this;\n    }\n    setStartCallback(startFunc) {\n        this._onStartCallback = startFunc;\n        return this;\n    }\n    setMoveCallback(moveFunc) {\n        this._onMoveCallback = moveFunc;\n        return this;\n    }\n    setEndCallback(endFunc) {\n        this._onEndCallback = endFunc;\n        return this;\n    }\n    setRect(rect) {\n        this._rect = rect;\n        return this;\n    }\n    ready() {\n        if (this._isXY) {\n            this._brush = d3.brush()\n                .on('start', this.onBrushStart)\n                .on('brush', this.onBrushMove)\n                .on('end', this.onBrushEnd);\n        }\n        else {\n            this._brush = d3.brushX()\n                .extent([[0, 0], [this._rect.width, this._rect.height]])\n                .on('start', this.onBrushStart)\n                .on('brush', this.onBrushMove)\n                .on('end', this.onBrushEnd);\n        }\n        // append brush to graph SVG\n        this._brushTargetGraph\n            .call(this._brush);\n        return this;\n    }\n    /**\n     * Release all brush listeners on the target. Failure to release the\n     * listeners can prevent the target from being freed.\n     *\n     * @param target - The object to have any tooltip listeners reset.\n     */\n    static releaseListeners(target) {\n        target\n            .on('brush', null)\n            .on('brushend', null)\n            .on('brushstart', null);\n    } // ReleaseListeners\n} // class Brush\nexports.Brush = Brush;\nclass D3Legend {\n    constructor(svg, legend, title, rect) {\n        this._title = title ? title : '';\n        this._legend = legend;\n        this._itemMap = {};\n        this._items = [];\n        if (legend.definition) {\n            let items = [];\n            for (let i = 0; i < legend.definition.items.length; ++i) {\n                let defItem = legend.definition.items[i];\n                items.push({\n                    key: defItem.key,\n                    name: defItem.name ? defItem.name : defItem.key,\n                    color: defItem.color,\n                    shape: this.getShapeString(defItem.shape),\n                    opacity: ''\n                });\n            }\n            this.addItems(items);\n        }\n        let type = 'ordinal';\n        if (this._legend.definition &&\n            this._legend.definition.type === ui_base_1.LegendType.Gradient) {\n            type = 'gradient';\n        }\n        this._classes = `legend ${type} ${this._title} align-${this._legend.alignment}`;\n        this._legendSvg = svg.append('g')\n            .classed(this._classes, true);\n        this.setPosition(rect);\n    }\n    getShapeString(shape) {\n        if (typeof (shape) === 'string') {\n            return shape;\n        }\n        switch (shape) {\n            case ui_base_1.LegendItemShape.Rectangle:\n                return 'rect';\n            case ui_base_1.LegendItemShape.Line:\n                return 'line';\n            case ui_base_1.LegendItemShape.Circle:\n                return 'circle';\n        }\n    }\n    setPosition(rect) {\n        this._position = rect;\n    }\n    getPosition() {\n        return this._position;\n    }\n    setItems(items) {\n        this._items = [];\n        this._itemMap = {};\n        this.addItems(items);\n    }\n    addItems(items) {\n        for (let i = 0; i < items.length; ++i) {\n            let item = items[i];\n            if (!this._itemMap.hasOwnProperty(item.key)) {\n                if (!item.name) {\n                    item.name = item.key;\n                    if (this._legend.showValue) {\n                        if (item.value !== undefined) {\n                            item.name += ': ' + item.value;\n                            if (item.units !== undefined) {\n                                item.name += item.units;\n                            }\n                        }\n                    }\n                }\n                this._itemMap[item.key] = item;\n                this._items.push(item);\n            }\n            else {\n                this._itemMap[item.key].color = item.color;\n                this._itemMap[item.key].opacity = item.opacity;\n            }\n        }\n    }\n    getAlignment() {\n        return this._legend.alignment;\n    }\n    getRenderedRect() {\n        return this._renderedRect;\n    }\n    getRows() {\n        if (this._legend.orientation === ui_base_1.LegendOrientation.Vertical) {\n            return this._items.length;\n        }\n        else {\n            return this._legendSvg.selectAll('.legendCells').size();\n        }\n    }\n    renderDiscreteLegend(orientation) {\n        let names = [];\n        let colors = [];\n        for (let i = 0; i < this._items.length; ++i) {\n            let name = this._items[i].name;\n            let color = this._items[i].color;\n            let opacity = this._items[i].opacity;\n            if (opacity) {\n                if (color.startsWith('rgb')) {\n                    color = 'rgba' + color.substr(3, color.length - 4) + ' , ' + opacity + ')';\n                }\n            }\n            names.push(this._items[i].name);\n            colors.push(color);\n        }\n        let itemPadding = 2;\n        let itemSize = 0;\n        let self = this;\n        let addLegend = function (group, names, colors) {\n            let ordinal = d3.scaleOrdinal()\n                .domain(names)\n                .range(colors);\n            // any cast is just to make typescript happy as there are no\n            // typescript definitions for the legend component\n            let legendOrdinal = d3_legend_master_1.legendColor();\n            legendOrdinal\n                .on('cellover', function (d) {\n                this.setAttribute('title', d);\n            })\n                .orient(orientation)\n                .labelPosition('right')\n                .shape('rect')\n                .shapeWidth(10)\n                .shapeHeight(10)\n                .shapePadding(itemPadding)\n                .scale(ordinal);\n            if (self._legend.onClick) {\n                legendOrdinal.on('cellclick', function (d) {\n                    self._legend.onClick({\n                        event: ui_base_1.EventType.Click,\n                        data: d\n                    });\n                });\n            }\n            if (self._legend.contextMenuItems) {\n                legendOrdinal.on('cellcontextmenu', function (d) {\n                    context_menu_1.showContextMenu(d3.event, d, self._legend.contextMenuItems);\n                });\n            }\n            group.call(legendOrdinal);\n        };\n        addLegend(this._legendSvg, names, colors);\n        let xPixelOffset = this._position.x;\n        if ((this._legend.alignment === ui_base_1.Alignment.Top ||\n            this._legend.alignment === ui_base_1.Alignment.Bottom) &&\n            this._legend.orientation !== ui_base_1.LegendOrientation.Vertical) {\n            itemPadding = 0;\n            let cells = this._legendSvg.select('.legendCells').selectAll('.cell').each(function () {\n                let rect = this.getBBox();\n                itemPadding = Math.max(itemPadding, rect.width);\n            });\n            itemSize = itemPadding + 10;\n            this._legendSvg.selectAll('*').remove();\n            let itemsPerRow = Math.max(1, Math.min(names.length, Math.floor(this._position.width / itemSize)));\n            Math.ceil(names.length / itemsPerRow);\n            xPixelOffset = this._position.x + this._position.width / 2 -\n                itemSize * itemsPerRow / 2;\n            let nextRowYOffset = 0;\n            for (let i = 0; i < names.length; i += itemsPerRow) {\n                let rowSvg = this._legendSvg.append('g').classed(this._classes, true);\n                addLegend(rowSvg, names.slice(i, i + itemsPerRow), colors.slice(i, i + itemsPerRow));\n                if (nextRowYOffset) {\n                    rowSvg.attr('transform', 'translate(' + 0 + ',' + nextRowYOffset + ')');\n                }\n                let node = rowSvg.node();\n                nextRowYOffset += node.getBoundingClientRect().height;\n            }\n        }\n        xPixelOffset = Math.max(0, xPixelOffset);\n        this._legendSvg\n            .attr('transform', 'translate(' + xPixelOffset + ',' + this._position.y + ')');\n    }\n    renderGradientLegend() {\n        this._legendSvg.selectAll('*').remove();\n        let items = this._legend.definition.items;\n        let id = utilities_1.getSelectionName(`${this._title}align-${this._legend.alignment}`);\n        let gradient = this._legendSvg\n            .append('linearGradient')\n            .attr('id', id)\n            .attr('x1', '0%')\n            .attr('y1', '0%');\n        items.forEach((item) => {\n            gradient.append('stop')\n                .attr('offset', `${item.key}%`)\n                .attr('style', `stop-color:${item.color};stop-opacity:${item.opacity}`);\n        });\n        let scale = d3.scaleLinear()\n            .domain(d3.extent(items, (datum) => {\n            return Number(datum.key);\n        }));\n        let rect = this._legendSvg.append('rect');\n        let axisSVG = this._legendSvg.append('g');\n        let legend;\n        let barWidth = 40;\n        let barPadding = 5;\n        switch (this._legend.alignment) {\n            case ui_base_1.Alignment.Left:\n                gradient.attr('x2', '0%')\n                    .attr('y2', '100%');\n                rect.attr('x', 30)\n                    .attr('width', barWidth)\n                    .attr('y', 0)\n                    .attr('height', this._position.height);\n                scale.range([0, this._position.height]);\n                axisSVG.attr('transform', `translate(30, 0)`);\n                legend = d3.axisLeft(scale);\n                break;\n            case ui_base_1.Alignment.Right:\n                gradient.attr('x2', '0%')\n                    .attr('y2', '100%');\n                rect.attr('x', barPadding)\n                    .attr('width', barWidth)\n                    .attr('y', 0)\n                    .attr('height', this._position.height);\n                scale.range([0, this._position.height]);\n                axisSVG.attr('transform', `translate(${barWidth + barPadding}, 0)`);\n                legend = d3.axisRight(scale);\n                break;\n            case ui_base_1.Alignment.Top:\n                gradient.attr('x2', '100%')\n                    .attr('y2', '0%');\n                rect.attr('x', 0)\n                    .attr('width', this._position.width)\n                    .attr('y', 10)\n                    .attr('height', barWidth);\n                scale.range([0, this._position.width]);\n                axisSVG.attr('transform', 'translate(0, 10)');\n                legend = d3.axisTop(scale);\n                break;\n            case ui_base_1.Alignment.Bottom:\n                gradient.attr('x2', '100%')\n                    .attr('y2', '0%');\n                rect.attr('x', 0)\n                    .attr('width', this._position.width)\n                    .attr('y', 5)\n                    .attr('height', barWidth);\n                scale.range([0, this._position.width]);\n                axisSVG.attr('transform', `translate(0, ${barWidth + barPadding})`);\n                legend = d3.axisBottom(scale);\n                break;\n        }\n        rect.attr('fill', `url(#${id})`);\n        axisSVG.call(legend);\n        this._legendSvg\n            .attr('transform', 'translate(' + this._position.x + ',' + this._position.y + ')');\n    }\n    render() {\n        let orientation;\n        if (this._legend.orientation === ui_base_1.LegendOrientation.Vertical) {\n            orientation = 'vertical';\n        }\n        else if (this._legend.orientation === ui_base_1.LegendOrientation.Horizontal) {\n            orientation = 'horizontal';\n        }\n        else if (this._legend.alignment === ui_base_1.Alignment.Left ||\n            this._legend.alignment === ui_base_1.Alignment.Right) {\n            orientation = 'vertical';\n        }\n        else {\n            orientation = 'horizontal';\n        }\n        this._legendSvg.selectAll('*').remove();\n        if (this._legend.definition && this._legend.definition.type &&\n            this._legend.definition.type === ui_base_1.LegendType.Gradient) {\n            this.renderGradientLegend();\n            // this is here duplicated because it's not seeing\n            // the rect when it measures so we add 40\n            let node = this._legendSvg.node();\n            let svgRect = node.getBoundingClientRect();\n            this._renderedRect = new ui_base_1.Rect(svgRect.left, svgRect.top, svgRect.right - svgRect.left + 40, svgRect.bottom - svgRect.top);\n        }\n        else {\n            this.renderDiscreteLegend(orientation);\n            let node = this._legendSvg.node();\n            let svgRect = node.getBoundingClientRect();\n            this._renderedRect = new ui_base_1.Rect(svgRect.left, svgRect.top, svgRect.right - svgRect.left, svgRect.bottom - svgRect.top);\n        }\n    }\n}\nexports.D3Legend = D3Legend;\nclass SVGRenderer extends renderer_1.UIElementRenderer {\n    constructor() {\n        super();\n        this.MIN_MARGIN = { TOP: 0, BOTTOM: 10, LEFT: 0, RIGHT: 10 };\n        this.LEGEND_PADDING = { X: 10, Y: { TOP: 10, BOTTOM: 10 } };\n        this.AXIS_PADDING = { X: 10, Y: { TOP: 10, BOTTOM: 10 } };\n        /** stores the original fill colors for an series */\n        this._fillColors = new WeakMap();\n        /** stores the original stroke colors for an series */\n        this._strokeColors = new WeakMap();\n        let self = this;\n        this._options = {};\n        this._minSvgWidth = 0;\n        this._maxGraphWidth = Number.MAX_VALUE;\n        this._maxSvgWidth = Number.MAX_VALUE;\n        this._interactionState = new interaction_state_1.InteractionState(function (selection) {\n            self._focus(selection);\n        }, function (selection) {\n            self._unfocus(selection);\n        }, false, function (selection) {\n            self._select(selection);\n        }, function (selection) {\n            self._unselect(selection);\n        });\n    }\n    cursorChange(event) { }\n    zoom(event) { }\n    brush(event) { }\n    render(options) { }\n    configureTooltip() { }\n    createLayout() { }\n    setColorManager(colorManager) {\n        this._colorMgr = colorManager;\n    }\n    initialize(element, renderer, parent) {\n        this._element = element;\n        this._renderer = renderer;\n        this._tooltipId = 'd3-tooltip';\n        this._tooltipAnalyticsName = 'd3-ui-widget-toolkit';\n        this._parent = parent;\n        let node = parent.node();\n        if (node) {\n            if (!this._options.width) {\n                this._options.width = node.getBoundingClientRect().width;\n            }\n            this._svgRect = new ui_base_1.Rect(0, 0, this._options.width, 0);\n            this._svg = parent.append('svg');\n            //.attr('preserveAspectRatio', 'xMidYMid meet');\n        }\n        this._handleWidth = 10;\n        this._graphRect = new ui_base_1.Rect(0, 0, 0, this.DEFAULT_GRAPH_HEIGHT);\n        this._requiresRelayout = true;\n    }\n    loadOptions(options) {\n        if (options === undefined) {\n            return;\n        }\n        if (options.width && options.width !== this._options.width) {\n            this._requiresRelayout = true;\n        }\n        if (options.height && options.height !== this._options.height) {\n            this._requiresRelayout = true;\n        }\n        if (options.topMargin && options.topMargin !== this._options.topMargin) {\n            this._requiresRelayout = true;\n        }\n        if (options.bottomMargin && options.bottomMargin !== this._options.bottomMargin) {\n            this._requiresRelayout = true;\n        }\n        if (options.leftMargin && options.leftMargin !== this._options.leftMargin) {\n            this._requiresRelayout = true;\n        }\n        if (options.rightMargin && options.rightMargin !== this._options.rightMargin) {\n            this._requiresRelayout = true;\n        }\n        utilities_1.merge(this._options, options);\n    }\n    getElement() {\n        return this._element;\n    }\n    getOptions() {\n        return this._options;\n    }\n    getAnimateDuration() {\n        return this._options.animateDuration !== undefined ? this._options.animateDuration : 1000;\n    }\n    /**\n     * Get the css actually rendered. This is useful for legend swatches\n     * and the like.\n     *\n     * @param the element to get the rendered CSS information for\n     *\n     * @return The css rendered, or undefined if called before the chart is\n     *   rendered\n     */\n    getRenderedCss() {\n        return new ui_base_1.Css();\n    }\n    /**\n     * tooltip the element.\n     *\n     * @param renderer an IRenderer object that has the tooltip\n     * @param event the event to pass to the renderer\n     */\n    getTooltipData(event) {\n        return [{ source: this._element, group: '', metrics: {} }];\n    }\n    /**\n     * @deprecated ('Deprecated since 1.14.0 in favor of focus.  Will be removed in 2.x')\n     * hover event\n     *\n     * @param event the event to pass to the renderer\n     */\n    hover(event) {\n        this.focus(event);\n    }\n    /**\n     * bring an item into focus\n     *\n     * @param event the event to focus on\n     */\n    focus(event) {\n        this._interactionState.focus(event);\n    }\n    /**\n     * select an item\n     *\n     * @param event the event to focus on\n     */\n    select(event) {\n        this._interactionState.select(event);\n    }\n    _focus(selection) {\n        let self = this;\n        if (selection) {\n            self._svg.selectAll('.' + selection)\n                .each(function () {\n                let d3Obj = d3.select(this);\n                focus(d3Obj, self._fillColors, self._strokeColors);\n            });\n        }\n    }\n    _unfocus(selection) {\n        let self = this;\n        if (selection.length > 0) {\n            self._svg.selectAll('.' + selection)\n                .each(function () {\n                let d3Obj = d3.select(this);\n                unfocus(d3Obj, self._fillColors, self._strokeColors);\n            });\n            ;\n        }\n    }\n    _select(selection) {\n        let self = this;\n        if (selection) {\n            self._svg.selectAll('.' + selection)\n                .each(function () {\n                let d3Obj = d3.select(this);\n                select(d3Obj, self._fillColors, self._strokeColors);\n            });\n        }\n    }\n    _unselect(selection) {\n        let self = this;\n        if (selection.length > 0) {\n            self._svg.selectAll('.' + selection)\n                .each(function () {\n                let d3Obj = d3.select(this);\n                unselect(d3Obj, self._fillColors, self._strokeColors);\n            });\n            ;\n        }\n    }\n    invalidate(options) {\n        // clear the SVG\n        this.loadOptions(options);\n        this.createLayout();\n        if (!options.disableResize) {\n            this.createHandles();\n        }\n        this.configureTooltip();\n        this.render(options);\n    }\n    updateHandles() {\n        let self = this;\n        // update handle positions\n        self._svg.select('.chart-handle.bottom')\n            .attr('x', self._graphRect.x)\n            .attr('y', self._graphRect.y + self._graphRect.height)\n            .attr('width', self._graphRect.width);\n        self._svg.select('.chart-handle.left')\n            .attr('x', self._graphRect.x - this._handleWidth - 1)\n            .attr('y', self._graphRect.y)\n            .attr('height', self._graphRect.height);\n        // update handle positions\n        self._svg.select('.chart-handle.right')\n            .attr('x', self._graphRect.x + self._graphRect.width + 1)\n            .attr('y', self._graphRect.y)\n            .attr('height', self._graphRect.height);\n    }\n    createHandles() {\n        let self = this;\n        if (!self._options.disableResizeLeft) {\n            self._svg.append('rect')\n                .attr('opacity', 0)\n                .attr('width', self._handleWidth)\n                .attr('cursor', 'ew-resize')\n                .classed('chart-handle vertical left', true)\n                .call(d3.drag()\n                .on('start', function () {\n                SVGRenderer.IS_RESIZING = true;\n            })\n                .on('drag', function () {\n                if (d3.event.dx === 0) {\n                    return;\n                }\n                let leftMargin = Math.min(self._options.leftMargin + self._graphRect.width, Math.max(self.MIN_MARGIN.LEFT, self._options.leftMargin + d3.event.dx));\n                let node = self._svg.node(); // this is just to make typescript happy\n                let options = {\n                    width: node.getBoundingClientRect().width,\n                    leftMargin: leftMargin,\n                    xStart: self._options.xStart,\n                    xEnd: self._options.xEnd,\n                    animateDuration: 0\n                };\n                // rerender the graph\n                if (self._element.handleUpdate) {\n                    self._element.handleUpdate(self._element, options);\n                }\n                else {\n                    self.render(options);\n                }\n            })\n                .on('end', function () {\n                SVGRenderer.IS_RESIZING = false;\n            }));\n        }\n        if (!self._options.disableResizeRight) {\n            self._svg.append('rect')\n                .attr('opacity', 0)\n                .attr('width', self._handleWidth)\n                .attr('cursor', 'ew-resize')\n                .classed('chart-handle vertical right', true)\n                .call(d3.drag()\n                .on('start', function () {\n                SVGRenderer.IS_RESIZING = true;\n            })\n                .on('drag', function () {\n                if (d3.event.dx === 0) {\n                    return;\n                }\n                let node = self._svg.node(); // this is just to make typescript happy\n                let width = self._options.width + d3.event.dx;\n                width = Math.max(self._minSvgWidth, width);\n                width = Math.min(self._maxSvgWidth, width);\n                let options = {\n                    width: width,\n                    xStart: self._options.xStart,\n                    xEnd: self._options.xEnd,\n                    animateDuration: 0\n                };\n                // rerender the graph\n                if (self._element.handleUpdate) {\n                    self._element.handleUpdate(self._element, options);\n                }\n                else {\n                    self.render(options);\n                }\n            })\n                .on('end', function () {\n                SVGRenderer.IS_RESIZING = false;\n            }));\n        }\n    }\n    // pulled and modified from http://bl.ocks.org/Rokotyan/0556f8facbaf344507cdc45dc3622177\n    createImage() {\n        let self = this;\n        return new Promise(function (resolve, reject) {\n            // Below are the functions that handle actual exporting:\n            // getSVGString ( svgNode ) and svgString2Image( svgString, width, height, format, callback )\n            function getSVGString(svgNode) {\n                svgNode.setAttribute('xlink', 'http://www.w3.org/1999/xlink');\n                let cssStyleText = getCSSStyles(svgNode);\n                appendCSS(cssStyleText, svgNode);\n                let serializer = new XMLSerializer();\n                let svgString = serializer.serializeToString(svgNode);\n                svgString = svgString.replace(/(\\w+)?:?xlink=/g, 'xmlns:xlink='); // Fix root xlink without namespace\n                svgString = svgString.replace(/NS\\d+:href/g, 'xlink:href'); // Safari NS namespace fix\n                return svgString;\n                function getCSSStyles(parentElement) {\n                    let selectorTextArr = [];\n                    // Add Parent element Id and Classes to the list\n                    selectorTextArr.push('#' + parentElement.id);\n                    for (let c = 0; c < parentElement.classList.length; c++)\n                        if (!contains('.' + parentElement.classList[c], selectorTextArr))\n                            selectorTextArr.push('.' + parentElement.classList[c]);\n                    // Add Children element Ids and Classes to the list\n                    let nodes = parentElement.getElementsByTagName('*');\n                    for (let i = 0; i < nodes.length; i++) {\n                        let id = nodes[i].id;\n                        if (!contains('#' + id, selectorTextArr))\n                            selectorTextArr.push('#' + id);\n                        let classes = nodes[i].classList;\n                        for (let c = 0; c < classes.length; c++)\n                            if (!contains('.' + classes[c], selectorTextArr))\n                                selectorTextArr.push('.' + classes[c]);\n                    }\n                    // Extract CSS Rules\n                    let extractedCSSText = '';\n                    for (let i = 0; i < document.styleSheets.length; i++) {\n                        let s = document.styleSheets[i];\n                        try {\n                            if (!s.cssRules)\n                                continue;\n                        }\n                        catch (e) {\n                            if (e.name !== 'SecurityError')\n                                throw e; // for Firefox\n                            continue;\n                        }\n                        let cssRules = s.cssRules;\n                        for (let r = 0; r < cssRules.length; r++) {\n                            if (contains(cssRules[r].selectorText, selectorTextArr))\n                                extractedCSSText += cssRules[r].cssText;\n                        }\n                    }\n                    return extractedCSSText;\n                    function contains(str, arr) {\n                        return arr.indexOf(str) === -1 ? false : true;\n                    }\n                }\n                function appendCSS(cssText, element) {\n                    let styleElement = document.createElement('style');\n                    styleElement.setAttribute('type', 'text/css');\n                    styleElement.innerHTML = cssText;\n                    let refNode = element.hasChildNodes() ? element.children[0] : null;\n                    element.insertBefore(styleElement, refNode);\n                }\n            }\n            let svg = self._svg;\n            let width = Number(svg.attr('width'));\n            let height = Number(svg.attr('height'));\n            let html = getSVGString(svg.node());\n            //console.log(html);\n            let imgsrc = 'data:image/svg+xml;base64,' + btoa(html);\n            let image = new Image;\n            image.src = imgsrc;\n            image.onload = function () {\n                let canvas = document.createElement('canvas');\n                canvas.height = height;\n                canvas.width = width;\n                let context = canvas.getContext('2d');\n                context.drawImage(image, 0, 0, width, height);\n                let canvasdata = canvas.toDataURL('image/png');\n                resolve({\n                    image: canvasdata,\n                    type: 'image/png',\n                    height: height,\n                    width: width\n                });\n            };\n        });\n    }\n    saveImage() {\n        this.createImage().then(function (imageData) {\n            let pngimg = `<img src=\"${imageData.image}\" height=\"${imageData.height}\" width=\"${imageData.width}\">`;\n            d3.select('#pngdataurl').html(pngimg);\n            let a = document.createElement('a');\n            a.download = 'chart.png';\n            a.href = imageData.image;\n            a.click();\n        });\n    }\n}\nexports.SVGRenderer = SVGRenderer;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS9zdmctaGVscGVyLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2NvcmUvc3ZnLWhlbHBlci50cz9kNGRmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lcmdlLCBnZXRTZWxlY3Rpb25OYW1lIH0gZnJvbSAnLi91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgICBJRXZlbnQsIElMZWdlbmQsIElMZWdlbmRJdGVtLCBJT3B0aW9ucywgQWxpZ25tZW50LCBDc3MsIEV2ZW50VHlwZSxcbiAgICBJUmVjdCwgUmVjdCwgVUlFbGVtZW50LCBMZWdlbmRJdGVtU2hhcGUsIExlZ2VuZE9yaWVudGF0aW9uLFxuICAgIElDb250ZXh0TWVudUl0ZW0sIFVJUmVuZGVyZXIsIExlZ2VuZFR5cGVcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLWJhc2UnO1xuaW1wb3J0IHsgSVhZVmFsdWUgfSBmcm9tICcuLi9pbnRlcmZhY2UvY2hhcnQvc2VyaWVzLWRhdGEnO1xuaW1wb3J0IHsgc2hvd0NvbnRleHRNZW51IH0gZnJvbSAnLi9jb250ZXh0LW1lbnUnO1xuaW1wb3J0IHsgQmFzZVRvb2x0aXAsIEN1c3RvbURpdlRvb2x0aXAgfSBmcm9tICcuL3Rvb2x0aXAnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25TdGF0ZSB9IGZyb20gJy4vaW50ZXJhY3Rpb24tc3RhdGUnO1xuaW1wb3J0IHsgQ29sb3JNYW5hZ2VyIH0gZnJvbSAnLi9jb2xvci1tYW5hZ2VyJztcbmltcG9ydCB7IGxlZ2VuZENvbG9yIH0gZnJvbSAnLi4vLi4vdGhpcmQtcGFydHkvZDMtbGVnZW5kLW1hc3Rlcic7XG5pbXBvcnQgeyBVSUVsZW1lbnRSZW5kZXJlciB9IGZyb20gJy4vcmVuZGVyZXInO1xuXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHlsZSh0YXJnZXQ6IGQzLlNlbGVjdGlvbjxkMy5CYXNlVHlwZSwgYW55LCBkMy5CYXNlVHlwZSwgYW55Pik6IGFueSB7XG4gICAgbGV0IG5vZGU6IGFueSA9IHRhcmdldC5ub2RlKCk7XG4gICAgbGV0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgcmV0dXJuIHN0eWxlO1xufVxuXG4vKipcbiogdGFrZSB0d28gbGlzdHMgb2Ygc3RyaW5ncyBhbmQgbWVyZ2UgdGhlbSBpbnRvIG9uZSBsaXN0IHdpdGggb25seSB1bmlxdWUgdmFsdWVzXG4qIG5vdGUgdGhpcyBjaGFuZ2VzIHRoZSBvcmlnaW5hbCBsaXN0XG4qL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlS2V5cyhhcnIxOiBzdHJpbmdbXSwgYXJyMjogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBsZXQga2V5czogeyBbaW5kZXg6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7ICsraSkge1xuICAgICAgICBrZXlzW2FycjFbaV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycjIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKCFrZXlzLmhhc093blByb3BlcnR5KGFycjJbaV0pKSB7XG4gICAgICAgICAgICBhcnIxLnB1c2goYXJyMltpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlzKGRhdGE6IGFueVtdLCBhY2Nlc3NvcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZ1tdKSB7XG4gICAgbGV0IGtleU1hcDogeyBbaW5kZXg6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgIGxldCBrZXlMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICBsZXQga2V5cyA9IGFjY2Vzc29yKGRhdGFbaV0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICgodHlwZW9mIGtleXNbaV0gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBrZXlzW2ldID09PSAnbnVtYmVyJykgJiZcbiAgICAgICAgICAgICAgICAha2V5TWFwLmhhc093blByb3BlcnR5KGtleXNbaV0pKSB7XG4gICAgICAgICAgICAgICAga2V5TWFwW2tleXNbaV1dID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBrZXlMaXN0LnB1c2goa2V5c1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGtleUxpc3Q7XG59XG5cbmZ1bmN0aW9uIGdldENvbG9yKGQzT2JqOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+LFxuICAgIG1hcDogV2Vha01hcDxPYmplY3QsIHN0cmluZz4sIGNvbG9yOiBzdHJpbmcgPSB1bmRlZmluZWQpIHtcblxuICAgIGNvbG9yID0gY29sb3IgJiYgY29sb3IgIT09ICdub25lJyA/IGNvbG9yIDogdW5kZWZpbmVkO1xuICAgIGlmICghbWFwLmhhcyhkM09iai5ub2RlKCkpKSB7XG4gICAgICAgIG1hcC5zZXQoZDNPYmoubm9kZSgpLCBjb2xvcik7XG4gICAgfVxuICAgIHJldHVybiBtYXAuZ2V0KGQzT2JqLm5vZGUoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1cyhkM09iajogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PixcbiAgICBmaWxsQ29sb3JzOiBXZWFrTWFwPE9iamVjdCwgc3RyaW5nPiwgc3Ryb2tlQ29sb3JzOiBXZWFrTWFwPE9iamVjdCwgc3RyaW5nPikge1xuICAgIC8vIGlmIHlvdSBkb24ndCBvd24gdGhlIHN0eWxlIHRoZW4gd2hlbiB5b3Ugc2F2ZSB0aGVcbiAgICAvLyBjb2xvcnMgc2F2ZSBudWxsIHNvIHdlIHJlc3RvcmUgdGhpcyBET00gb2JqZWN0IHRvXG4gICAgLy8gdGhlIHNhbWUgc3RhdGUgKGFrYSBpdCByZW1vdmVzIHRoZSBzdHlsZSlcbiAgICBsZXQgZmlsbENvbG9yID0gZDNPYmouc3R5bGUoJ2ZpbGwnKTtcbiAgICBmaWxsQ29sb3IgPSBnZXRDb2xvcihkM09iaiwgZmlsbENvbG9ycywgZmlsbENvbG9yKTtcblxuICAgIC8vIGFsd2F5cyBzYXZlIHRoZSBjb2xvciBldmVuIGlmIGl0J3Mgbm90IGRlZmluZWQgc28gd2UgaGF2ZSB0aGUgb3JpZ2luYWwgbGF0ZXJcbiAgICBpZiAoZmlsbENvbG9yKSB7XG4gICAgICAgIGxldCBob3ZlckNvbG9yID0gSW50ZXJhY3Rpb25TdGF0ZS5nZXRGb2N1c0NvbG9yKGZpbGxDb2xvcik7XG4gICAgICAgIGQzT2JqLnN0eWxlKCdmaWxsJywgaG92ZXJDb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKCFkM09iai5jbGFzc2VkKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgIGxldCBzdHJva2VDb2xvciA9IGQzT2JqLnN0eWxlKCdzdHJva2UnKTtcbiAgICAgICAgc3Ryb2tlQ29sb3IgPSBnZXRDb2xvcihkM09iaiwgc3Ryb2tlQ29sb3JzLCBzdHJva2VDb2xvcik7XG5cbiAgICAgICAgaWYgKHN0cm9rZUNvbG9yKSB7XG4gICAgICAgICAgICBsZXQgaG92ZXJDb2xvciA9IEludGVyYWN0aW9uU3RhdGUuZ2V0Rm9jdXNDb2xvcihzdHJva2VDb2xvcik7XG4gICAgICAgICAgICBkM09iai5zdHlsZSgnc3Ryb2tlJywgaG92ZXJDb2xvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZDNPYmouY2xhc3NlZCgnaG92ZXInLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuZm9jdXMoZDNPYmo6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4sXG4gICAgZmlsbENvbG9yczogV2Vha01hcDxPYmplY3QsIHN0cmluZz4sIHN0cm9rZUNvbG9yczogV2Vha01hcDxPYmplY3QsIHN0cmluZz4pIHtcbiAgICBsZXQgZmlsbENvbG9yID0gZ2V0Q29sb3IoZDNPYmosIGZpbGxDb2xvcnMpO1xuICAgIGlmIChmaWxsQ29sb3IpIHtcbiAgICAgICAgZDNPYmouc3R5bGUoJ2ZpbGwnLCBmaWxsQ29sb3IpO1xuICAgIH1cblxuICAgIGlmICghZDNPYmouY2xhc3NlZCgnc2VsZWN0ZWQnKSkge1xuICAgICAgICBsZXQgc3Ryb2tlQ29sb3IgPSBkM09iai5zdHlsZSgnc3Ryb2tlJyk7XG4gICAgICAgIGlmIChzdHJva2VDb2xvcikge1xuICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSBnZXRDb2xvcihkM09iaiwgc3Ryb2tlQ29sb3JzKTtcbiAgICAgICAgICAgIGlmIChzdHJva2VDb2xvcikge1xuICAgICAgICAgICAgICAgIGQzT2JqLnN0eWxlKCdzdHJva2UnLCBzdHJva2VDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZDNPYmouY2xhc3NlZCgnaG92ZXInLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3QoZDNPYmo6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4sXG4gICAgZmlsbENvbG9yczogV2Vha01hcDxPYmplY3QsIHN0cmluZz4sIHN0cm9rZUNvbG9yczogV2Vha01hcDxPYmplY3QsIHN0cmluZz4pIHtcblxuICAgIC8qKiBpZiBubyBmaWxsIHRoZW4gd2Ugb25seSBoYXZlIHN0cm9rZXMgdG8gZGVhbCB3aXRoIHdlIGNoYW5nZSB0aGUgY29sb3Igb2YgdGhlIHN0cm9rZSAqL1xuICAgIGxldCBmaWxsQ29sb3IgPSBkM09iai5zdHlsZSgnZmlsbCcpO1xuICAgIGZpbGxDb2xvciA9IGdldENvbG9yKGQzT2JqLCBmaWxsQ29sb3JzLCBmaWxsQ29sb3IpO1xuXG4gICAgbGV0IGlzU3Ryb2tlT25seSA9ICFmaWxsQ29sb3IgfHwgZmlsbENvbG9yID09PSAnbm9uZSc7XG5cbiAgICBsZXQgc3Ryb2tlQ29sb3IgPSBkM09iai5zdHlsZSgnc3Ryb2tlJyk7XG4gICAgc3Ryb2tlQ29sb3IgPSBnZXRDb2xvcihkM09iaiwgc3Ryb2tlQ29sb3JzLCBzdHJva2VDb2xvcik7XG5cbiAgICBpZiAoc3Ryb2tlQ29sb3IgfHwgaXNTdHJva2VPbmx5KSB7XG4gICAgICAgIC8vIHVzZSB0aGUgQ1NTIHZhbHVlIGZvciBzZWxlY3RlZCBzdHJva2VcbiAgICAgICAgZDNPYmouc3R5bGUoJ3N0cm9rZScsIG51bGwpO1xuICAgIH1cblxuICAgIGQzT2JqLmNsYXNzZWQoJ3NlbGVjdGVkJywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNlbGVjdChkM09iajogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55PixcbiAgICBmaWxsQ29sb3JzOiBXZWFrTWFwPE9iamVjdCwgc3RyaW5nPiwgc3Ryb2tlQ29sb3JzOiBXZWFrTWFwPE9iamVjdCwgc3RyaW5nPikge1xuICAgIGxldCBjb2xvciA9IGdldENvbG9yKGQzT2JqLCBzdHJva2VDb2xvcnMpO1xuICAgIGlmIChjb2xvcikge1xuICAgICAgICBkM09iai5zdHlsZSgnc3Ryb2tlJywgY29sb3IpO1xuICAgIH1cbiAgICBkM09iai5jbGFzc2VkKCdzZWxlY3RlZCcsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uU2VsZWN0SGVscGVyKGNhbGxlcjogVUlFbGVtZW50LCB2YWx1ZTogYW55LCBzZWxlY3Rpb25WYWx1ZTogc3RyaW5nKSB7XG4gICAgbGV0IGNsZWFyRXZlbnQgPSB7IGNhbGxlcjogY2FsbGVyLCBkYXRhOiB2YWx1ZSwgZXZlbnQ6IEV2ZW50VHlwZS5TZWxlY3RDbGVhciB9O1xuICAgIGxldCBzZWxlY3RFdmVudCA9IHtcbiAgICAgICAgY2FsbGVyOiBjYWxsZXIsIGV2ZW50OiBFdmVudFR5cGUuU2VsZWN0QWRkLCBkYXRhOiB2YWx1ZSwgc2VsZWN0aW9uOiBzZWxlY3Rpb25WYWx1ZVxuICAgIH1cblxuICAgIGNhbGxlci5hcGkuc2VsZWN0KGNsZWFyRXZlbnQpO1xuICAgIGNhbGxlci5hcGkuc2VsZWN0KHNlbGVjdEV2ZW50KTtcblxuICAgIGlmIChjYWxsZXIub25DbGljaykge1xuICAgICAgICBjYWxsZXIub25DbGljayhjbGVhckV2ZW50KTtcbiAgICAgICAgY2FsbGVyLm9uQ2xpY2soc2VsZWN0RXZlbnQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZENsaWNrSGVscGVyKHRhcmdldDogZDMuU2VsZWN0aW9uPGQzLkJhc2VUeXBlLCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+LFxuICAgIG9wdGlvbnM6IElPcHRpb25zLCBvbkNsaWNrOiAoZXZlbnQ6IElFdmVudCkgPT4gdm9pZCwgb25Eb3VibGVDbGljazogKGV2ZW50OiBJRXZlbnQpID0+IHZvaWQsXG4gICAgY29udGV4dE1lbnVJdGVtczogSUNvbnRleHRNZW51SXRlbVtdLCB0b29sdGlwOiBCYXNlVG9vbHRpcCwgY2FsbGVyOiBVSUVsZW1lbnQsIHZhbHVlPzogYW55LFxuICAgIHNlbGVjdGlvblZhbHVlPzogc3RyaW5nKSB7XG4gICAgbGV0IHdhaXQ6IGFueTtcblxuICAgIHRhcmdldC5vbignY2xpY2snLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uRG91YmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHdhaXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAod2FpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGlzYWJsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RIZWxwZXIoY2FsbGVyLCB2YWx1ZSwgc2VsZWN0aW9uVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrKHsgY2FsbGVyOiBjYWxsZXIsIGV2ZW50OiBFdmVudFR5cGUuQ2xpY2ssIGRhdGE6IGQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd2FpdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5kaXNhYmxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgb25TZWxlY3RIZWxwZXIoY2FsbGVyLCB2YWx1ZSwgc2VsZWN0aW9uVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrKHsgY2FsbGVyOiBjYWxsZXIsIGV2ZW50OiBFdmVudFR5cGUuQ2xpY2ssIGRhdGE6IGQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChvbkRvdWJsZUNsaWNrKSB7XG4gICAgICAgIHRhcmdldC5vbignZGJsY2xpY2snLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGQgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQod2FpdCk7XG4gICAgICAgICAgICB3YWl0ID0gbnVsbDtcbiAgICAgICAgICAgIG9uRG91YmxlQ2xpY2soeyBjYWxsZXI6IGNhbGxlciwgZXZlbnQ6IEV2ZW50VHlwZS5Eb3VibGVDbGljaywgZGF0YTogZCB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHRhcmdldC5vbignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBkMy5ldmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3dDb250ZXh0TWVudShkMy5ldmVudCwgdmFsdWUsIGNvbnRleHRNZW51SXRlbXMpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFNWR1BvaW50KHN2ZzogYW55LCBlbGVtOiBhbnksIHBvaW50OiBhbnkpIHtcbiAgICBpZiAoc3ZnLmdldFNjcmVlbkNUTSAmJiBzdmcuZ2V0U2NyZWVuQ1RNKCkpIHtcbiAgICAgICAgLy8gaWYgZ2V0U2NyZWVuQ1RNIGlzIG5vdCB3b3JraW5nIHJpZ2h0IChha2EgRmlyZWZveC4uLj8pXG4gICAgICAgIGxldCBtYXRyaXggPSBzdmcuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpO1xuICAgICAgICBsZXQgc3ZnUG9pbnQgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obWF0cml4KTtcbiAgICAgICAgcmV0dXJuIHN2Z1BvaW50O1xuICAgIH1cbiAgICByZXR1cm4geyB4OiBwb2ludC54LCB5OiBwb2ludC55IH07XG59XG5cbi8qKiBOb3RlIHRoaXMgaXMgdmVyeSBleHBlbnNpdmUgZHVlIHRvIHRoZSBnZXRCb3VkaW5nQ2xpZW50UmVjdCgpIGNhbGwgc29cbiAqIHlvdSBzaG91bGQgY2FjaGUgdGhpcyByZXN1bHQgaWYgcG9zc2libGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb1NWR0Nvb3Jkcyhzdmc6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4sXG4gICAgZWxlbWVudDogZDMuU2VsZWN0aW9uPGFueSwgYW55LCBkMy5CYXNlVHlwZSwgYW55Pik6IElSZWN0IHtcbiAgICBsZXQgY2xpZW50UmVjdCA9IGVsZW1lbnQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBzdmdOb2RlID0gc3ZnLm5vZGUoKTtcbiAgICBsZXQgZWxlbU5vZGUgPSBlbGVtZW50Lm5vZGUoKTtcblxuICAgIGxldCBwID0gc3ZnTm9kZS5jcmVhdGVTVkdQb2ludCgpO1xuXG4gICAgcC54ID0gY2xpZW50UmVjdC5sZWZ0O1xuICAgIHAueSA9IGNsaWVudFJlY3QudG9wO1xuICAgIGxldCB0b3BMZWZ0ID0gZ2V0U1ZHUG9pbnQoc3ZnTm9kZSwgZWxlbU5vZGUsIHApO1xuXG4gICAgcC54ID0gY2xpZW50UmVjdC5yaWdodDtcbiAgICBwLnkgPSBjbGllbnRSZWN0LmJvdHRvbTtcbiAgICBsZXQgYm90dG9tUmlnaHQgPSBnZXRTVkdQb2ludChzdmdOb2RlLCBlbGVtTm9kZSwgcCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogdG9wTGVmdC54LFxuICAgICAgICB5OiB0b3BMZWZ0LnksXG4gICAgICAgIHdpZHRoOiBib3R0b21SaWdodC54IC0gdG9wTGVmdC54LFxuICAgICAgICBoZWlnaHQ6IGJvdHRvbVJpZ2h0LnkgLSB0b3BMZWZ0LnksXG4gICAgICAgIHJpZ2h0OiBib3R0b21SaWdodC54LFxuICAgICAgICBib3R0b206IGJvdHRvbVJpZ2h0LnlcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dFJlY3Qoc3ZnOiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+LFxuICAgIHRleHQ6IHN0cmluZyk6IElSZWN0IHtcbiAgICAvLyB0ZW1wb3JhcmlseSBhcHBlbmQgdG8gRE9NIHRvIGdldCB0ZXh0IHNpemVcbiAgICBsZXQgdGV4dFJlbmRlcmVyID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAudGV4dCh0ZXh0KTtcblxuICAgIGxldCByZXQ6IElSZWN0ID0gY29udmVydFRvU1ZHQ29vcmRzKHN2ZywgdGV4dFJlbmRlcmVyKTtcbiAgICB0ZXh0UmVuZGVyZXIucmVtb3ZlKCk7XG4gICAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFuaW1hdGVQYXRoKHBhdGg6IGQzLlNlbGVjdGlvbjxkMy5CYXNlVHlwZSwge30sIGFueSwgYW55PixcbiAgICBkdXJhdGlvbjogbnVtYmVyKSB7XG4gICAgbGV0IHBhdGhMZW5ndGggPSAocGF0aC5ub2RlKCkgYXMgYW55KS5nZXRUb3RhbExlbmd0aCgpO1xuICAgIHBhdGhcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCBwYXRoTGVuZ3RoKVxuICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hvZmZzZXQnLCBwYXRoTGVuZ3RoKVxuICAgICAgICAudHJhbnNpdGlvbignYWRkJylcbiAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxuICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hvZmZzZXQnLCAwKVxufVxuXG5leHBvcnQgY2xhc3MgQXJyb3cge1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QW5nbGUoc3RhcnQ6IElYWVZhbHVlLCBlbmQ6IElYWVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKGVuZC55IC0gc3RhcnQueSwgZW5kLnggLSBzdGFydC54KSAqIDE4MCAvIE1hdGguUEk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhbiBhdHRyVHdlZW4gZm9yIHRyYW5zbGF0aW5nIGFsb25nIHRoZSBzcGVjaWZpZWQgcGF0aCBlbGVtZW50LlxuICAgIHByaXZhdGUgc3RhdGljIHRyYW5zbGF0ZUFycm93KHBhdGg6IGFueSkge1xuICAgICAgICAvLyBBcHByb3hpbWF0ZSB0YW5nZW50XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZDogYW55LCBpOiBudW1iZXIsIGE6IGFueVtdKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHQ6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHZhciBsID0gcGF0aC5nZXRUb3RhbExlbmd0aCgpO1xuICAgICAgICAgICAgICAgIHZhciBwb3MgPSBwYXRoLmdldFBvaW50QXRMZW5ndGgodCAqIGwpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcGF0aC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWF4KGwgLSAwLjAxLCAwKSAqIHQpO1xuICAgICAgICAgICAgICAgIHZhciBlbmQgPSBwYXRoLmdldFBvaW50QXRMZW5ndGgoKGwgKyAwLjAxKSAqIHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyBwb3MueCArICcsICcgKyBwb3MueSArICcpIHJvdGF0ZSggJyArXG4gICAgICAgICAgICAgICAgICAgIEFycm93LmdldEFuZ2xlKHN0YXJ0LCBlbmQpICsgJyknO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlQXJyb3coZ3JvdXA6IGQzLlNlbGVjdGlvbjxkMy5CYXNlVHlwZSwge30sIGFueSwgYW55PixcbiAgICAgICAgc2l6ZSA9IDQpIHtcbiAgICAgICAgbGV0IGRvdWJsZVNpemUgPSBzaXplICogMjtcbiAgICAgICAgcmV0dXJuIGdyb3VwLmFwcGVuZCgncGF0aCcpXG4gICAgICAgICAgICAuYXR0cignZCcsIGBNIC0ke2RvdWJsZVNpemV9LCAtJHtzaXplfSBMMCwwIEwtJHtkb3VibGVTaXplfSwke3NpemV9IHpgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYW5pbWF0ZUFycm93KHBhdGg6IGQzLlNlbGVjdGlvbjxkMy5CYXNlVHlwZSwge30sIGFueSwgYW55PixcbiAgICAgICAgYXJyb3c6IGQzLlNlbGVjdGlvbjxkMy5CYXNlVHlwZSwge30sIGFueSwgYW55PiwgZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICBhcnJvdy50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbilcbiAgICAgICAgICAgIC5hdHRyVHdlZW4oJ3RyYW5zZm9ybScsIEFycm93LnRyYW5zbGF0ZUFycm93KHBhdGgubm9kZSgpKSlcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGlubmVyIHtcbiAgICBwcml2YXRlIF9zdmc6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHN2ZzogYW55LCByZWN0OiBSZWN0KSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5taW4ocmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpIC8gMjtcbiAgICAgICAgbGV0IHRhdSA9IDIgKiBNYXRoLlBJO1xuXG4gICAgICAgIHNlbGYuX3N2ZyA9IHN2ZztcbiAgICAgICAgbGV0IGFyYyA9IGQzLmFyYygpXG4gICAgICAgICAgICAuaW5uZXJSYWRpdXMocmFkaXVzICogMC41KVxuICAgICAgICAgICAgLm91dGVyUmFkaXVzKHJhZGl1cyAqIDAuOSlcbiAgICAgICAgICAgIC5zdGFydEFuZ2xlKDApO1xuXG4gICAgICAgIGxldCBiYWNrZ3JvdW5kID0gc2VsZi5fc3ZnLmFwcGVuZCgncGF0aCcpXG4gICAgICAgICAgICAuY2xhc3NlZCgnc3Bpbm5lcicsIHRydWUpXG4gICAgICAgICAgICAuZGF0dW0oeyBlbmRBbmdsZTogMC42NiAqIHRhdSB9KVxuICAgICAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3JnYigwLDExMywxOTcpJylcbiAgICAgICAgICAgIC5hdHRyKCdkJywgYXJjKVxuICAgICAgICAgICAgLmNhbGwoc3BpbiwgMTUwMClcblxuICAgICAgICBmdW5jdGlvbiBzcGluKHNlbGVjdGlvbjogYW55LCBkdXJhdGlvbjogbnVtYmVyKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24udHJhbnNpdGlvbigpXG4gICAgICAgICAgICAgICAgLmVhc2UoZDMuZWFzZUxpbmVhcilcbiAgICAgICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAgICAgLmF0dHJUd2VlbigndHJhbnNmb3JtJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVTdHJpbmcoJ3JvdGF0ZSgwKScsICdyb3RhdGUoMzYwKScpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fc3ZnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwaW4oc2VsZWN0aW9uLCBkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSB6b29tIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHRpbWVCb3VuZHMgLSBUaGUgbWluIGFuZCBtYXggZm9yIHRoZSB6b29tICh0aGUgZG9tYWluKVxuICpcbiAqIEByZXR1cm5zIFNob3VsZCBhbHdheXMgcmV0dXJuIHRydWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJydXNoQ2FsbGJhY2sge1xuICAgIChcbiAgICAgICAgYnJ1c2hCb3VuZHM6IG51bWJlcltdXG4gICAgKTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEJydXNoRGF0dW0ge1xuICAgIGV4dGVudDogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dO1xuICAgIGZpbHRlclpvb21FdmVudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgQnJ1c2ggY2xhc3MgdXNlcyBEMydzIGJydXNoIGJlaGF2aW9yIHRvIGltcGxlbWVudCB6b29taW5nXG4gKiBmb3IgQ29uZmlndXJhdGlvbiBBbmFseXplciBncmFwaHMgd2hlcmUgdGhlIFggYXhpcyBpcyB0aW1lLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEJydXNoIHtcbiAgICAvKiogSW50ZXJuYWwgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0ICdvbiBtb3VzZWRvd24nICovXG4gICAgcHVibGljIG9uQnJ1c2hTdGFydDogYW55XG5cbiAgICAvKiogSW50ZXJuYWwgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0ICdvbiBtb3VzZW1vdmUnICovXG4gICAgcHVibGljIG9uQnJ1c2hNb3ZlOiBhbnk7XG5cbiAgICAvKiogSW50ZXJuYWwgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0ICdvbiBtb3VzZXVwJyAqL1xuICAgIHB1YmxpYyBvbkJydXNoRW5kOiBhbnk7XG5cbiAgICAvKiogVGhlIEQzIGJlaGF2aW9yIHRvIGltcGxlbWVudCB6b29taW5nICovXG4gICAgcHJpdmF0ZSBfYnJ1c2g6IGQzLkJydXNoQmVoYXZpb3I8e30+O1xuXG4gICAgLyoqIFRoZSBEMyBzZWxlY3Rpb24gZm9yIHRoZSBlbnRpdHkgdGhhdCBpcyB0byBiZSB6b29tZWQgKi9cbiAgICBwcml2YXRlIF9icnVzaFRhcmdldEdyYXBoOiBkMy5TZWxlY3Rpb248ZDMuQmFzZVR5cGUsIHt9LCBhbnksIGFueT47XG5cbiAgICAvKiogdGhlIHJlY3RhbmdsZXQgaGlzIGJydXNoIGxpdmVzIGluICovXG4gICAgcHJpdmF0ZSBfcmVjdDogUmVjdDtcblxuICAgIC8qKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBzdGFydCBldmVudCBvY2N1cnMuICovXG4gICAgcHJpdmF0ZSBfb25TdGFydENhbGxiYWNrOiBJQnJ1c2hDYWxsYmFjaztcblxuICAgIC8qKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBtb3ZlIGV2ZW50IG9jY3Vycy4gICovXG4gICAgcHJpdmF0ZSBfb25Nb3ZlQ2FsbGJhY2s6IElCcnVzaENhbGxiYWNrO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIGVuZCBldmVudCBvY2N1cnMuICAqL1xuICAgIHByaXZhdGUgX29uRW5kQ2FsbGJhY2s6IElCcnVzaENhbGxiYWNrO1xuXG4gICAgcHJpdmF0ZSBfaXNYWTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICogQ29uc3RydWN0IGEgQnJ1c2ggaW5zdGFuY2UuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gUHV0ICd0aGlzJyBpbnRvIGEgdmFyaWFibGUgdGhhdCB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGNhbGxiYWNrc1xuICAgICAgICBsZXQgc2VsZjogQnJ1c2ggPSB0aGlzO1xuICAgICAgICBzZWxmLl9pc1hZID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQnJ1c2hNb3ZlIGZ1bmN0aW9uIC0gY2FsbGVkIHdoZW4gYW4gJ29uIG1vdXNlbW92ZScgZXZlbnQgb2NjdXJzXG4gICAgICAgIHRoaXMub25CcnVzaFN0YXJ0ID0gZnVuY3Rpb24gKGQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoc2VsZi5fb25TdGFydENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFCb3VuZHMgPSBkMy5icnVzaFNlbGVjdGlvbih0aGlzKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9vblN0YXJ0Q2FsbGJhY2suY2FsbCh0aGlzLCBkYXRhQm91bmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAgIC8vIEJydXNoTW92ZVxuXG4gICAgICAgIC8vIEJydXNoTW92ZSBmdW5jdGlvbiAtIGNhbGxlZCB3aGVuIGFuICdvbiBtb3VzZW1vdmUnIGV2ZW50IG9jY3Vyc1xuICAgICAgICB0aGlzLm9uQnJ1c2hNb3ZlID0gZnVuY3Rpb24gKGQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoc2VsZi5fb25Nb3ZlQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YUJvdW5kcyA9IGQzLmJydXNoU2VsZWN0aW9uKHRoaXMpO1xuICAgICAgICAgICAgICAgIHNlbGYuX29uTW92ZUNhbGxiYWNrLmNhbGwodGhpcywgZGF0YUJvdW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gICAvLyBCcnVzaE1vdmVcblxuICAgICAgICAvLyBCcnVzaEVuZCAtIENhbGxlZCBhbiAnb24gbW91c2V1cCcgZXZlbnRcbiAgICAgICAgdGhpcy5vbkJydXNoRW5kID0gZnVuY3Rpb24gKGQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBicnVzaCBjYWxsLWJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgc2VsZWN0ZWQgZG9tYWluXG4gICAgICAgICAgICAvLyAobW9zdCBjb21tb25seSwgdGhlIGdyYXBoIHdpbGwgYmUgJ3pvb21lZCcgdG8gdGhlIGV4dGVudClcbiAgICAgICAgICAgIGlmIChzZWxmLl9vbkVuZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFCb3VuZHMgPSBkMy5icnVzaFNlbGVjdGlvbih0aGlzKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9vbkVuZENhbGxiYWNrLmNhbGwodGhpcywgZGF0YUJvdW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gICAvLyBCcnVzaEVuZFxuICAgIH0gICAvLyBjb25zdHJ1Y3RvclxuXG4gICAgcHVibGljIG1vdmVUb0Zyb250KCkge1xuICAgICAgICB0aGlzLl9icnVzaFRhcmdldEdyYXBoLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgKHRoaXMgYXMgYW55KS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbW92ZVRvQmFjaygpIHtcbiAgICAgICAgdGhpcy5fYnJ1c2hUYXJnZXRHcmFwaC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBmaXJzdENoaWxkID0gKHRoaXMgYXMgYW55KS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICh0aGlzIGFzIGFueSkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgZW5hYmxlQ2FsbGJhY2tzKCk6IEJydXNoIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLl9icnVzaFxuICAgICAgICAgICAgLm9uKCdzdGFydCcsIHNlbGYub25CcnVzaFN0YXJ0KVxuICAgICAgICAgICAgLm9uKCdicnVzaCcsIHNlbGYub25CcnVzaE1vdmUpXG4gICAgICAgICAgICAub24oJ2VuZCcsIHNlbGYub25CcnVzaEVuZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlQ2FsbGJhY2tzKCk6IEJydXNoIHtcbiAgICAgICAgdGhpcy5fYnJ1c2hcbiAgICAgICAgICAgIC5vbignc3RhcnQnLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAub24oJ2JydXNoJywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgLm9uKCdlbmQnLCB1bmRlZmluZWQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBicnVzaFN0YXJ0KGRvbWFpbjogZDMuQnJ1c2hTZWxlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fYnJ1c2hUYXJnZXRHcmFwaC5jYWxsKHRoaXMuX2JydXNoLm1vdmUsIG51bGwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBicnVzaE1vdmUoZG9tYWluOiBkMy5CcnVzaFNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLl9icnVzaFRhcmdldEdyYXBoLmNhbGwodGhpcy5fYnJ1c2gubW92ZSwgZG9tYWluKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnJ1c2hFbmQoKSB7XG4gICAgICAgIC8vIGNsZWFyIGJydXNoIGZyb20gZ3JhcGhcbiAgICAgICAgdGhpcy5fYnJ1c2hUYXJnZXRHcmFwaC5jYWxsKHRoaXMuX2JydXNoLm1vdmUsIG51bGwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRYWShpc1hZOiBib29sZWFuKTogQnJ1c2gge1xuICAgICAgICB0aGlzLl9pc1hZID0gaXNYWTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFRhcmdldChncmFwaFNWRzogZDMuU2VsZWN0aW9uPGQzLkJhc2VUeXBlLCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+KTogQnJ1c2gge1xuICAgICAgICB0aGlzLl9icnVzaFRhcmdldEdyYXBoID0gZ3JhcGhTVkc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTdGFydENhbGxiYWNrKHN0YXJ0RnVuYzogSUJydXNoQ2FsbGJhY2spOiBCcnVzaCB7XG4gICAgICAgIHRoaXMuX29uU3RhcnRDYWxsYmFjayA9IHN0YXJ0RnVuYztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1vdmVDYWxsYmFjayhtb3ZlRnVuYzogSUJydXNoQ2FsbGJhY2spOiBCcnVzaCB7XG4gICAgICAgIHRoaXMuX29uTW92ZUNhbGxiYWNrID0gbW92ZUZ1bmM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFbmRDYWxsYmFjayhlbmRGdW5jOiBJQnJ1c2hDYWxsYmFjayk6IEJydXNoIHtcbiAgICAgICAgdGhpcy5fb25FbmRDYWxsYmFjayA9IGVuZEZ1bmM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRSZWN0KHJlY3Q6IFJlY3QpOiBCcnVzaCB7XG4gICAgICAgIHRoaXMuX3JlY3QgPSByZWN0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZHkoKTogQnJ1c2gge1xuICAgICAgICBpZiAodGhpcy5faXNYWSkge1xuICAgICAgICAgICAgdGhpcy5fYnJ1c2ggPSBkMy5icnVzaCgpXG4gICAgICAgICAgICAgICAgLm9uKCdzdGFydCcsIHRoaXMub25CcnVzaFN0YXJ0KVxuICAgICAgICAgICAgICAgIC5vbignYnJ1c2gnLCB0aGlzLm9uQnJ1c2hNb3ZlKVxuICAgICAgICAgICAgICAgIC5vbignZW5kJywgdGhpcy5vbkJydXNoRW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2JydXNoID0gZDMuYnJ1c2hYKClcbiAgICAgICAgICAgICAgICAuZXh0ZW50KFtbMCwgMF0sIFt0aGlzLl9yZWN0LndpZHRoLCB0aGlzLl9yZWN0LmhlaWdodF1dKVxuICAgICAgICAgICAgICAgIC5vbignc3RhcnQnLCB0aGlzLm9uQnJ1c2hTdGFydClcbiAgICAgICAgICAgICAgICAub24oJ2JydXNoJywgdGhpcy5vbkJydXNoTW92ZSlcbiAgICAgICAgICAgICAgICAub24oJ2VuZCcsIHRoaXMub25CcnVzaEVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwZW5kIGJydXNoIHRvIGdyYXBoIFNWR1xuICAgICAgICB0aGlzLl9icnVzaFRhcmdldEdyYXBoXG4gICAgICAgICAgICAuY2FsbCh0aGlzLl9icnVzaCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZSBhbGwgYnJ1c2ggbGlzdGVuZXJzIG9uIHRoZSB0YXJnZXQuIEZhaWx1cmUgdG8gcmVsZWFzZSB0aGVcbiAgICAgKiBsaXN0ZW5lcnMgY2FuIHByZXZlbnQgdGhlIHRhcmdldCBmcm9tIGJlaW5nIGZyZWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBvYmplY3QgdG8gaGF2ZSBhbnkgdG9vbHRpcCBsaXN0ZW5lcnMgcmVzZXQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZWxlYXNlTGlzdGVuZXJzKHRhcmdldDogZDMuU2VsZWN0aW9uPGQzLkJhc2VUeXBlLCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+KTogdm9pZCB7XG4gICAgICAgIHRhcmdldFxuICAgICAgICAgICAgLm9uKCdicnVzaCcsIG51bGwpXG4gICAgICAgICAgICAub24oJ2JydXNoZW5kJywgbnVsbClcbiAgICAgICAgICAgIC5vbignYnJ1c2hzdGFydCcsIG51bGwpO1xuICAgIH0gLy8gUmVsZWFzZUxpc3RlbmVyc1xufSAgIC8vIGNsYXNzIEJydXNoXG5cbmV4cG9ydCBjbGFzcyBEM0xlZ2VuZCB7XG4gICAgLyoqIHRoZSBkM3N2ZyAqL1xuICAgIHByaXZhdGUgX2xlZ2VuZFN2ZzogZDMuU2VsZWN0aW9uPGQzLkJhc2VUeXBlLCB7fSwgZDMuQmFzZVR5cGUsIGFueT47XG5cbiAgICAvKiogdGhlIG9yaWdpbmFsIGxlZ2VuZCBkZWZpbmVkIGJ5IHRoZSB1c2VyICovXG4gICAgcHJpdmF0ZSBfbGVnZW5kOiBJTGVnZW5kO1xuXG4gICAgLyoqIHRoZSByZWN0IGZyb20gdGhlIHkgb3JpZ2luIG9mIHRoZSBkaXYgKi9cbiAgICBwcml2YXRlIF9wb3NpdGlvbjogUmVjdDtcblxuICAgIC8qKiB0aGUgbGFuZSB0aXRsZSBvZmZzZXQgZnJvbSB0aGUgeSBvcmlnaW4gb2YgdGhlIGRpdiAqL1xuICAgIHByaXZhdGUgX3RpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogdGhlIGNzcyBjbGFzc2VzIGRlZmluZWQgZm9yIHRoaXMgbGVnZW5kICovXG4gICAgcHJpdmF0ZSBfY2xhc3Nlczogc3RyaW5nO1xuXG4gICAgLyoqIHRoZSByZW5kZXJlZCByZWN0IGZvciB0aGUgYXhpcyAqL1xuICAgIHByaXZhdGUgX3JlbmRlcmVkUmVjdDogUmVjdDtcblxuICAgIC8qKiBsaXN0IG9mIGxlZ2VuZCBpdGVtcyAqL1xuICAgIHByaXZhdGUgX2l0ZW1zOiBJTGVnZW5kSXRlbVtdO1xuXG4gICAgLyoqIG1hcCBvZiBsZWdlbmQgaXRlbXMgKi9cbiAgICBwcml2YXRlIF9pdGVtTWFwOiB7IFtpbmRleDogc3RyaW5nXTogSUxlZ2VuZEl0ZW0gfTtcblxuICAgIGNvbnN0cnVjdG9yKHN2ZzogZDMuU2VsZWN0aW9uPGQzLkJhc2VUeXBlLCB7fSwgZDMuQmFzZVR5cGUsIGFueT4sXG4gICAgICAgIGxlZ2VuZDogSUxlZ2VuZCwgdGl0bGU6IHN0cmluZywgcmVjdD86IFJlY3QpIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZSA/IHRpdGxlIDogJyc7XG4gICAgICAgIHRoaXMuX2xlZ2VuZCA9IGxlZ2VuZDtcblxuICAgICAgICB0aGlzLl9pdGVtTWFwID0ge307XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gW107XG5cbiAgICAgICAgaWYgKGxlZ2VuZC5kZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVnZW5kLmRlZmluaXRpb24uaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVmSXRlbSA9IGxlZ2VuZC5kZWZpbml0aW9uLml0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGRlZkl0ZW0ua2V5LFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBkZWZJdGVtLm5hbWUgPyBkZWZJdGVtLm5hbWUgOiBkZWZJdGVtLmtleSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGRlZkl0ZW0uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlOiB0aGlzLmdldFNoYXBlU3RyaW5nKGRlZkl0ZW0uc2hhcGUpLFxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAnJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRJdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdHlwZSA9ICdvcmRpbmFsJztcbiAgICAgICAgaWYgKHRoaXMuX2xlZ2VuZC5kZWZpbml0aW9uICYmXG4gICAgICAgICAgICB0aGlzLl9sZWdlbmQuZGVmaW5pdGlvbi50eXBlID09PSBMZWdlbmRUeXBlLkdyYWRpZW50KSB7XG4gICAgICAgICAgICB0eXBlID0gJ2dyYWRpZW50JztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbGFzc2VzID0gYGxlZ2VuZCAke3R5cGV9ICR7dGhpcy5fdGl0bGV9IGFsaWduLSR7dGhpcy5fbGVnZW5kLmFsaWdubWVudH1gO1xuICAgICAgICB0aGlzLl9sZWdlbmRTdmcgPSBzdmcuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5jbGFzc2VkKHRoaXMuX2NsYXNzZXMsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocmVjdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaGFwZVN0cmluZyhzaGFwZTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgKHNoYXBlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBzaGFwZTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHNoYXBlKSB7XG4gICAgICAgICAgICBjYXNlIExlZ2VuZEl0ZW1TaGFwZS5SZWN0YW5nbGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyZWN0JztcbiAgICAgICAgICAgIGNhc2UgTGVnZW5kSXRlbVNoYXBlLkxpbmU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdsaW5lJztcbiAgICAgICAgICAgIGNhc2UgTGVnZW5kSXRlbVNoYXBlLkNpcmNsZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NpcmNsZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UG9zaXRpb24ocmVjdDogUmVjdCkge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHJlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBvc2l0aW9uKCk6IFJlY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIHNldEl0ZW1zKGl0ZW1zOiBJTGVnZW5kSXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX2l0ZW1NYXAgPSB7fTtcbiAgICAgICAgdGhpcy5hZGRJdGVtcyhpdGVtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEl0ZW1zKGl0ZW1zOiBJTGVnZW5kSXRlbVtdKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2l0ZW1NYXAuaGFzT3duUHJvcGVydHkoaXRlbS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lID0gaXRlbS5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sZWdlbmQuc2hvd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lICs9ICc6ICcgKyBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnVuaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lICs9IGl0ZW0udW5pdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1NYXBbaXRlbS5rZXldID0gaXRlbTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtTWFwW2l0ZW0ua2V5XS5jb2xvciA9IGl0ZW0uY29sb3I7XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbU1hcFtpdGVtLmtleV0ub3BhY2l0eSA9IGl0ZW0ub3BhY2l0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGlnbm1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWdlbmQuYWxpZ25tZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW5kZXJlZFJlY3QoKTogUmVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJlZFJlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd3MoKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZWdlbmQub3JpZW50YXRpb24gPT09IExlZ2VuZE9yaWVudGF0aW9uLlZlcnRpY2FsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbXMubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlZ2VuZFN2Zy5zZWxlY3RBbGwoJy5sZWdlbmRDZWxscycpLnNpemUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW5kZXJEaXNjcmV0ZUxlZ2VuZChvcmllbnRhdGlvbjogYW55KSB7XG4gICAgICAgIGxldCBuYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgbGV0IGNvbG9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9pdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgbGV0IG5hbWUgPSB0aGlzLl9pdGVtc1tpXS5uYW1lO1xuICAgICAgICAgICAgbGV0IGNvbG9yID0gdGhpcy5faXRlbXNbaV0uY29sb3I7XG4gICAgICAgICAgICBsZXQgb3BhY2l0eSA9IHRoaXMuX2l0ZW1zW2ldLm9wYWNpdHk7XG5cbiAgICAgICAgICAgIGlmIChvcGFjaXR5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbG9yLnN0YXJ0c1dpdGgoJ3JnYicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yID0gJ3JnYmEnICsgY29sb3Iuc3Vic3RyKDMsIGNvbG9yLmxlbmd0aCAtIDQpICsgJyAsICcgKyBvcGFjaXR5ICsgJyknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFtZXMucHVzaCh0aGlzLl9pdGVtc1tpXS5uYW1lKTtcbiAgICAgICAgICAgIGNvbG9ycy5wdXNoKGNvbG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpdGVtUGFkZGluZyA9IDI7XG4gICAgICAgIGxldCBpdGVtU2l6ZSA9IDA7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGFkZExlZ2VuZCA9IGZ1bmN0aW9uIChncm91cDogYW55LCBuYW1lczogc3RyaW5nW10sIGNvbG9yczogc3RyaW5nW10pIHtcbiAgICAgICAgICAgIGxldCBvcmRpbmFsID0gZDMuc2NhbGVPcmRpbmFsKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKG5hbWVzKVxuICAgICAgICAgICAgICAgIC5yYW5nZShjb2xvcnMpO1xuXG4gICAgICAgICAgICAvLyBhbnkgY2FzdCBpcyBqdXN0IHRvIG1ha2UgdHlwZXNjcmlwdCBoYXBweSBhcyB0aGVyZSBhcmUgbm9cbiAgICAgICAgICAgIC8vIHR5cGVzY3JpcHQgZGVmaW5pdGlvbnMgZm9yIHRoZSBsZWdlbmQgY29tcG9uZW50XG4gICAgICAgICAgICBsZXQgbGVnZW5kT3JkaW5hbCA9IGxlZ2VuZENvbG9yKCk7XG4gICAgICAgICAgICBsZWdlbmRPcmRpbmFsXG4gICAgICAgICAgICAgICAgLm9uKCdjZWxsb3ZlcicsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgZCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAub3JpZW50KG9yaWVudGF0aW9uKVxuICAgICAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uKCdyaWdodCcpXG4gICAgICAgICAgICAgICAgLnNoYXBlKCdyZWN0JylcbiAgICAgICAgICAgICAgICAuc2hhcGVXaWR0aCgxMClcbiAgICAgICAgICAgICAgICAuc2hhcGVIZWlnaHQoMTApXG4gICAgICAgICAgICAgICAgLnNoYXBlUGFkZGluZyhpdGVtUGFkZGluZylcbiAgICAgICAgICAgICAgICAuc2NhbGUob3JkaW5hbCk7XG5cbiAgICAgICAgICAgIGlmIChzZWxmLl9sZWdlbmQub25DbGljaykge1xuICAgICAgICAgICAgICAgIGxlZ2VuZE9yZGluYWwub24oJ2NlbGxjbGljaycsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGVnZW5kLm9uQ2xpY2soXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IEV2ZW50VHlwZS5DbGljayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5fbGVnZW5kLmNvbnRleHRNZW51SXRlbXMpIHtcbiAgICAgICAgICAgICAgICBsZWdlbmRPcmRpbmFsLm9uKCdjZWxsY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3dDb250ZXh0TWVudShkMy5ldmVudCwgZCwgc2VsZi5fbGVnZW5kLmNvbnRleHRNZW51SXRlbXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyb3VwLmNhbGwobGVnZW5kT3JkaW5hbCk7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRMZWdlbmQodGhpcy5fbGVnZW5kU3ZnLCBuYW1lcywgY29sb3JzKTtcbiAgICAgICAgbGV0IHhQaXhlbE9mZnNldCA9IHRoaXMuX3Bvc2l0aW9uLng7XG5cbiAgICAgICAgaWYgKCh0aGlzLl9sZWdlbmQuYWxpZ25tZW50ID09PSBBbGlnbm1lbnQuVG9wIHx8XG4gICAgICAgICAgICB0aGlzLl9sZWdlbmQuYWxpZ25tZW50ID09PSBBbGlnbm1lbnQuQm90dG9tKSAmJlxuICAgICAgICAgICAgdGhpcy5fbGVnZW5kLm9yaWVudGF0aW9uICE9PSBMZWdlbmRPcmllbnRhdGlvbi5WZXJ0aWNhbCkge1xuXG4gICAgICAgICAgICBpdGVtUGFkZGluZyA9IDA7XG4gICAgICAgICAgICBsZXQgY2VsbHMgPSB0aGlzLl9sZWdlbmRTdmcuc2VsZWN0KCcubGVnZW5kQ2VsbHMnKS5zZWxlY3RBbGwoJy5jZWxsJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlY3QgPSAodGhpcyBhcyBhbnkpLmdldEJCb3goKTtcbiAgICAgICAgICAgICAgICBpdGVtUGFkZGluZyA9IE1hdGgubWF4KGl0ZW1QYWRkaW5nLCByZWN0LndpZHRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlbVNpemUgPSBpdGVtUGFkZGluZyArIDEwO1xuICAgICAgICAgICAgdGhpcy5fbGVnZW5kU3ZnLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICBsZXQgaXRlbXNQZXJSb3cgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihuYW1lcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzLl9wb3NpdGlvbi53aWR0aCAvIGl0ZW1TaXplKSkpO1xuICAgICAgICAgICAgTWF0aC5jZWlsKG5hbWVzLmxlbmd0aCAvIGl0ZW1zUGVyUm93KTtcbiAgICAgICAgICAgIHhQaXhlbE9mZnNldCA9IHRoaXMuX3Bvc2l0aW9uLnggKyB0aGlzLl9wb3NpdGlvbi53aWR0aCAvIDIgLVxuICAgICAgICAgICAgICAgIGl0ZW1TaXplICogaXRlbXNQZXJSb3cgLyAyO1xuXG4gICAgICAgICAgICBsZXQgbmV4dFJvd1lPZmZzZXQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkgKz0gaXRlbXNQZXJSb3cpIHtcbiAgICAgICAgICAgICAgICBsZXQgcm93U3ZnID0gdGhpcy5fbGVnZW5kU3ZnLmFwcGVuZCgnZycpLmNsYXNzZWQodGhpcy5fY2xhc3NlcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYWRkTGVnZW5kKHJvd1N2ZywgbmFtZXMuc2xpY2UoaSwgaSArIGl0ZW1zUGVyUm93KSwgY29sb3JzLnNsaWNlKGksIGkgKyBpdGVtc1BlclJvdykpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5leHRSb3dZT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N2Zy5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgbmV4dFJvd1lPZmZzZXQgKyAnKScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBub2RlOiBhbnkgPSByb3dTdmcubm9kZSgpO1xuICAgICAgICAgICAgICAgIG5leHRSb3dZT2Zmc2V0ICs9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgeFBpeGVsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgeFBpeGVsT2Zmc2V0KTtcblxuICAgICAgICB0aGlzLl9sZWdlbmRTdmdcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyB4UGl4ZWxPZmZzZXQgKyAnLCcgKyB0aGlzLl9wb3NpdGlvbi55ICsgJyknKVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW5kZXJHcmFkaWVudExlZ2VuZCgpIHtcbiAgICAgICAgdGhpcy5fbGVnZW5kU3ZnLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO1xuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLl9sZWdlbmQuZGVmaW5pdGlvbi5pdGVtcztcblxuICAgICAgICBsZXQgaWQ6IHN0cmluZyA9IGdldFNlbGVjdGlvbk5hbWUoYCR7dGhpcy5fdGl0bGV9YWxpZ24tJHt0aGlzLl9sZWdlbmQuYWxpZ25tZW50fWApO1xuICAgICAgICBsZXQgZ3JhZGllbnQgPSB0aGlzLl9sZWdlbmRTdmdcbiAgICAgICAgICAgIC5hcHBlbmQoJ2xpbmVhckdyYWRpZW50JylcbiAgICAgICAgICAgIC5hdHRyKCdpZCcsIGlkKVxuICAgICAgICAgICAgLmF0dHIoJ3gxJywgJzAlJylcbiAgICAgICAgICAgIC5hdHRyKCd5MScsICcwJScpO1xuXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGdyYWRpZW50LmFwcGVuZCgnc3RvcCcpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ29mZnNldCcsIGAke2l0ZW0ua2V5fSVgKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdzdHlsZScsIGBzdG9wLWNvbG9yOiR7aXRlbS5jb2xvcn07c3RvcC1vcGFjaXR5OiR7aXRlbS5vcGFjaXR5fWApXG4gICAgICAgIH0pXG5cbiAgICAgICAgbGV0IHNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxuICAgICAgICAgICAgLmRvbWFpbihkMy5leHRlbnQoaXRlbXMsIChkYXR1bTogSUxlZ2VuZEl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGRhdHVtLmtleSk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgbGV0IHJlY3QgPSB0aGlzLl9sZWdlbmRTdmcuYXBwZW5kKCdyZWN0Jyk7XG4gICAgICAgIGxldCBheGlzU1ZHID0gdGhpcy5fbGVnZW5kU3ZnLmFwcGVuZCgnZycpO1xuICAgICAgICBsZXQgbGVnZW5kOiBhbnk7XG4gICAgICAgIGxldCBiYXJXaWR0aCA9IDQwO1xuICAgICAgICBsZXQgYmFyUGFkZGluZyA9IDU7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fbGVnZW5kLmFsaWdubWVudCkge1xuICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuTGVmdDpcbiAgICAgICAgICAgICAgICBncmFkaWVudC5hdHRyKCd4MicsICcwJScpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCd5MicsICcxMDAlJyk7XG5cbiAgICAgICAgICAgICAgICByZWN0LmF0dHIoJ3gnLCAzMClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgYmFyV2lkdGgpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCd5JywgMClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIHRoaXMuX3Bvc2l0aW9uLmhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICBzY2FsZS5yYW5nZShbMCwgdGhpcy5fcG9zaXRpb24uaGVpZ2h0XSk7XG4gICAgICAgICAgICAgICAgYXhpc1NWRy5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDMwLCAwKWApO1xuICAgICAgICAgICAgICAgIGxlZ2VuZCA9IGQzLmF4aXNMZWZ0KHNjYWxlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlJpZ2h0OlxuICAgICAgICAgICAgICAgIGdyYWRpZW50LmF0dHIoJ3gyJywgJzAlJylcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgJzEwMCUnKTtcblxuICAgICAgICAgICAgICAgIHJlY3QuYXR0cigneCcsIGJhclBhZGRpbmcpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIGJhcldpZHRoKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cigneScsIDApXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCB0aGlzLl9wb3NpdGlvbi5oZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgc2NhbGUucmFuZ2UoWzAsIHRoaXMuX3Bvc2l0aW9uLmhlaWdodF0pO1xuICAgICAgICAgICAgICAgIGF4aXNTVkcuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2JhcldpZHRoICsgYmFyUGFkZGluZ30sIDApYCk7XG4gICAgICAgICAgICAgICAgbGVnZW5kID0gZDMuYXhpc1JpZ2h0KHNjYWxlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlRvcDpcbiAgICAgICAgICAgICAgICBncmFkaWVudC5hdHRyKCd4MicsICcxMDAlJylcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgJzAlJyk7XG5cbiAgICAgICAgICAgICAgICByZWN0LmF0dHIoJ3gnLCAwKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCB0aGlzLl9wb3NpdGlvbi53aWR0aClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCAxMClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGJhcldpZHRoKTtcblxuICAgICAgICAgICAgICAgIHNjYWxlLnJhbmdlKFswLCB0aGlzLl9wb3NpdGlvbi53aWR0aF0pO1xuICAgICAgICAgICAgICAgIGF4aXNTVkcuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCAxMCknKTtcbiAgICAgICAgICAgICAgICBsZWdlbmQgPSBkMy5heGlzVG9wKHNjYWxlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LkJvdHRvbTpcbiAgICAgICAgICAgICAgICBncmFkaWVudC5hdHRyKCd4MicsICcxMDAlJylcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgJzAlJyk7XG5cbiAgICAgICAgICAgICAgICByZWN0LmF0dHIoJ3gnLCAwKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCB0aGlzLl9wb3NpdGlvbi53aWR0aClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCA1KVxuICAgICAgICAgICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgYmFyV2lkdGgpO1xuXG4gICAgICAgICAgICAgICAgc2NhbGUucmFuZ2UoWzAsIHRoaXMuX3Bvc2l0aW9uLndpZHRoXSk7XG4gICAgICAgICAgICAgICAgYXhpc1NWRy5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsICR7YmFyV2lkdGggKyBiYXJQYWRkaW5nfSlgKVxuICAgICAgICAgICAgICAgIGxlZ2VuZCA9IGQzLmF4aXNCb3R0b20oc2NhbGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlY3QuYXR0cignZmlsbCcsIGB1cmwoIyR7aWR9KWApO1xuICAgICAgICBheGlzU1ZHLmNhbGwobGVnZW5kKTtcblxuICAgICAgICB0aGlzLl9sZWdlbmRTdmdcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyB0aGlzLl9wb3NpdGlvbi54ICsgJywnICsgdGhpcy5fcG9zaXRpb24ueSArICcpJylcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKCkge1xuICAgICAgICBsZXQgb3JpZW50YXRpb246IGFueTtcblxuICAgICAgICBpZiAodGhpcy5fbGVnZW5kLm9yaWVudGF0aW9uID09PSBMZWdlbmRPcmllbnRhdGlvbi5WZXJ0aWNhbCkge1xuICAgICAgICAgICAgb3JpZW50YXRpb24gPSAndmVydGljYWwnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2xlZ2VuZC5vcmllbnRhdGlvbiA9PT0gTGVnZW5kT3JpZW50YXRpb24uSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgb3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbGVnZW5kLmFsaWdubWVudCA9PT0gQWxpZ25tZW50LkxlZnQgfHxcbiAgICAgICAgICAgIHRoaXMuX2xlZ2VuZC5hbGlnbm1lbnQgPT09IEFsaWdubWVudC5SaWdodCkge1xuICAgICAgICAgICAgb3JpZW50YXRpb24gPSAndmVydGljYWwnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sZWdlbmRTdmcuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2xlZ2VuZC5kZWZpbml0aW9uICYmIHRoaXMuX2xlZ2VuZC5kZWZpbml0aW9uLnR5cGUgJiZcbiAgICAgICAgICAgIHRoaXMuX2xlZ2VuZC5kZWZpbml0aW9uLnR5cGUgPT09IExlZ2VuZFR5cGUuR3JhZGllbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyR3JhZGllbnRMZWdlbmQoKTtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgaGVyZSBkdXBsaWNhdGVkIGJlY2F1c2UgaXQncyBub3Qgc2VlaW5nXG4gICAgICAgICAgICAvLyB0aGUgcmVjdCB3aGVuIGl0IG1lYXN1cmVzIHNvIHdlIGFkZCA0MFxuICAgICAgICAgICAgbGV0IG5vZGU6IGFueSA9IHRoaXMuX2xlZ2VuZFN2Zy5ub2RlKCk7XG4gICAgICAgICAgICBsZXQgc3ZnUmVjdDogYW55ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkUmVjdCA9IG5ldyBSZWN0KHN2Z1JlY3QubGVmdCwgc3ZnUmVjdC50b3AsXG4gICAgICAgICAgICAgICAgc3ZnUmVjdC5yaWdodCAtIHN2Z1JlY3QubGVmdCArIDQwLFxuICAgICAgICAgICAgICAgIHN2Z1JlY3QuYm90dG9tIC0gc3ZnUmVjdC50b3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJEaXNjcmV0ZUxlZ2VuZChvcmllbnRhdGlvbik7XG4gICAgICAgICAgICBsZXQgbm9kZTogYW55ID0gdGhpcy5fbGVnZW5kU3ZnLm5vZGUoKTtcbiAgICAgICAgICAgIGxldCBzdmdSZWN0OiBhbnkgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZWRSZWN0ID0gbmV3IFJlY3Qoc3ZnUmVjdC5sZWZ0LCBzdmdSZWN0LnRvcCxcbiAgICAgICAgICAgICAgICBzdmdSZWN0LnJpZ2h0IC0gc3ZnUmVjdC5sZWZ0LFxuICAgICAgICAgICAgICAgIHN2Z1JlY3QuYm90dG9tIC0gc3ZnUmVjdC50b3ApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU1ZHUmVuZGVyZXIgZXh0ZW5kcyBVSUVsZW1lbnRSZW5kZXJlciB7XG4gICAgLyoqIHVzZWQgdG8gZGlzYWJsZSBjcm9zcyBncmFwaCBjYWxscyB3aGVuIGluIHJlZHJhdyBtb2RlICovXG4gICAgc3RhdGljIElTX1JFU0laSU5HOiBib29sZWFuO1xuXG4gICAgcHVibGljIGN1cnNvckNoYW5nZShldmVudDogSUV2ZW50KTogdm9pZCB7IH1cbiAgICBwdWJsaWMgem9vbShldmVudDogSUV2ZW50KTogdm9pZCB7IH1cbiAgICBwdWJsaWMgYnJ1c2goZXZlbnQ6IElFdmVudCk6IHZvaWQgeyB9XG4gICAgcHVibGljIHJlbmRlcihvcHRpb25zOiBJT3B0aW9ucykgeyB9XG4gICAgcHJvdGVjdGVkIGNvbmZpZ3VyZVRvb2x0aXAoKSB7IH1cbiAgICBwdWJsaWMgY3JlYXRlTGF5b3V0KCkgeyB9XG5cbiAgICBwcm90ZWN0ZWQgREVGQVVMVF9HUkFQSF9IRUlHSFQ6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgTUlOX01BUkdJTiA9IHsgVE9QOiAwLCBCT1RUT006IDEwLCBMRUZUOiAwLCBSSUdIVDogMTAgfTtcbiAgICBwcm90ZWN0ZWQgTEVHRU5EX1BBRERJTkcgPSB7IFg6IDEwLCBZOiB7IFRPUDogMTAsIEJPVFRPTTogMTAgfSB9O1xuICAgIHByb3RlY3RlZCBBWElTX1BBRERJTkcgPSB7IFg6IDEwLCBZOiB7IFRPUDogMTAsIEJPVFRPTTogMTAgfSB9O1xuICAgIHByb3RlY3RlZCBfbWluU3ZnV2lkdGg6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX21heEdyYXBoV2lkdGg6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX21heFN2Z1dpZHRoOiBudW1iZXI7XG5cbiAgICAvKiogdGhlIHBhcmVudCByZW5kZXJlciBvZiB0aGlzIHJlbmRlcmVyICovXG4gICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogVUlSZW5kZXJlcjtcblxuICAgIHByb3RlY3RlZCBfcGFyZW50OiBkMy5TZWxlY3Rpb248YW55LCBhbnksIGQzLkJhc2VUeXBlLCBhbnk+O1xuXG4gICAgLyoqIFRoZSBoZWlnaHQgb2YgdGhlIGdyYXBoLiBUaGlzIElOQ0xVREVTIHRoZSBtYXJnaW5zLiAqL1xuICAgIHByb3RlY3RlZCBfc3ZnUmVjdDogUmVjdDtcblxuICAgIC8qKiBUaGUgd2lkdGggb2YgdGhlIGdyYXBoLiBUaGlzIEVYQ0xVREVTIHRoZSBtYXJnaW5zLiAqL1xuICAgIHByb3RlY3RlZCBfZ3JhcGhSZWN0OiBSZWN0O1xuXG4gICAgLyoqIFRvb2x0aXAgZGl2IGlkICovXG4gICAgcHJvdGVjdGVkIF90b29sdGlwSWQ6IHN0cmluZztcblxuICAgIC8qKiBIb2xkcyB0aGUgYW5hbHl0aWNzIG5hbWUgZm9yIHRoZSB0b29sdGlwIGZvciB0aGlzIGNoYXJ0ICovXG4gICAgcHJvdGVjdGVkIF90b29sdGlwQW5hbHl0aWNzTmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIHdpZHRoIG9mIGFueSBncmFwaCBoYW5kbGVzICovXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVXaWR0aDogbnVtYmVyO1xuXG4gICAgLyoqIGluZGljYXRlcyB3ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZSBleGlzdGluZyBncmFwaCAqL1xuICAgIHByb3RlY3RlZCBfcmVxdWlyZXNSZWxheW91dDogYm9vbGVhbjtcblxuICAgIC8qKiBzdG9yZXMgdGhlIG9yaWdpbmFsIGZpbGwgY29sb3JzIGZvciBhbiBzZXJpZXMgKi9cbiAgICBwcm90ZWN0ZWQgX2ZpbGxDb2xvcnMgPSBuZXcgV2Vha01hcDxPYmplY3QsIHN0cmluZz4oKTtcblxuICAgIC8qKiBzdG9yZXMgdGhlIG9yaWdpbmFsIHN0cm9rZSBjb2xvcnMgZm9yIGFuIHNlcmllcyAqL1xuICAgIHByb3RlY3RlZCBfc3Ryb2tlQ29sb3JzID0gbmV3IFdlYWtNYXA8T2JqZWN0LCBzdHJpbmc+KCk7XG5cbiAgICBwcm90ZWN0ZWQgX2ludGVyYWN0aW9uU3RhdGU6IEludGVyYWN0aW9uU3RhdGU7XG5cbiAgICAvKiogdGhlIHRvb2x0aXAgb2JqZWN0ICovXG4gICAgcHJvdGVjdGVkIF9kYXRhVG9vbHRpcDogQ3VzdG9tRGl2VG9vbHRpcDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLl9taW5TdmdXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMuX21heEdyYXBoV2lkdGggPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB0aGlzLl9tYXhTdmdXaWR0aCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIHRoaXMuX2ludGVyYWN0aW9uU3RhdGUgPSBuZXcgSW50ZXJhY3Rpb25TdGF0ZShcbiAgICAgICAgICAgIGZ1bmN0aW9uIChzZWxlY3Rpb246IGFueSkge1xuICAgICAgICAgICAgICAgIHNlbGYuX2ZvY3VzKHNlbGVjdGlvbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKHNlbGVjdGlvbjogYW55KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fdW5mb2N1cyhzZWxlY3Rpb24pO1xuICAgICAgICAgICAgfSwgZmFsc2UsXG4gICAgICAgICAgICBmdW5jdGlvbiAoc2VsZWN0aW9uOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoc2VsZWN0aW9uOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl91bnNlbGVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbG9yTWFuYWdlcihjb2xvck1hbmFnZXI6IENvbG9yTWFuYWdlcikge1xuICAgICAgICB0aGlzLl9jb2xvck1nciA9IGNvbG9yTWFuYWdlcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZShlbGVtZW50OiBVSUVsZW1lbnQsIHJlbmRlcmVyOiBVSVJlbmRlcmVyLFxuICAgICAgICBwYXJlbnQ6IGQzLlNlbGVjdGlvbjxhbnksIGFueSwgZDMuQmFzZVR5cGUsIGFueT4pIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAgICAgdGhpcy5fdG9vbHRpcElkID0gJ2QzLXRvb2x0aXAnO1xuICAgICAgICB0aGlzLl90b29sdGlwQW5hbHl0aWNzTmFtZSA9ICdkMy11aS13aWRnZXQtdG9vbGtpdCc7XG5cbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgICBsZXQgbm9kZTogYW55ID0gcGFyZW50Lm5vZGUoKTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fb3B0aW9ucy53aWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMud2lkdGggPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc3ZnUmVjdCA9IG5ldyBSZWN0KDAsIDAsIHRoaXMuX29wdGlvbnMud2lkdGgsIDApO1xuXG4gICAgICAgICAgICB0aGlzLl9zdmcgPSBwYXJlbnQuYXBwZW5kKCdzdmcnKTtcbiAgICAgICAgICAgIC8vLmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAneE1pZFlNaWQgbWVldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faGFuZGxlV2lkdGggPSAxMDtcbiAgICAgICAgdGhpcy5fZ3JhcGhSZWN0ID0gbmV3IFJlY3QoMCwgMCwgMCwgdGhpcy5ERUZBVUxUX0dSQVBIX0hFSUdIVCk7XG5cbiAgICAgICAgdGhpcy5fcmVxdWlyZXNSZWxheW91dCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRPcHRpb25zKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy53aWR0aCAmJiBvcHRpb25zLndpZHRoICE9PSB0aGlzLl9vcHRpb25zLndpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlc1JlbGF5b3V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5oZWlnaHQgJiYgb3B0aW9ucy5oZWlnaHQgIT09IHRoaXMuX29wdGlvbnMuaGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlc1JlbGF5b3V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50b3BNYXJnaW4gJiYgb3B0aW9ucy50b3BNYXJnaW4gIT09IHRoaXMuX29wdGlvbnMudG9wTWFyZ2luKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlc1JlbGF5b3V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ib3R0b21NYXJnaW4gJiYgb3B0aW9ucy5ib3R0b21NYXJnaW4gIT09IHRoaXMuX29wdGlvbnMuYm90dG9tTWFyZ2luKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlc1JlbGF5b3V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5sZWZ0TWFyZ2luICYmIG9wdGlvbnMubGVmdE1hcmdpbiAhPT0gdGhpcy5fb3B0aW9ucy5sZWZ0TWFyZ2luKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlc1JlbGF5b3V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5yaWdodE1hcmdpbiAmJiBvcHRpb25zLnJpZ2h0TWFyZ2luICE9PSB0aGlzLl9vcHRpb25zLnJpZ2h0TWFyZ2luKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlc1JlbGF5b3V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZSh0aGlzLl9vcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gICAgfVxuICAgIHB1YmxpYyBnZXRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QW5pbWF0ZUR1cmF0aW9uKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmFuaW1hdGVEdXJhdGlvbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5fb3B0aW9ucy5hbmltYXRlRHVyYXRpb24gOiAxMDAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3NzIGFjdHVhbGx5IHJlbmRlcmVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgbGVnZW5kIHN3YXRjaGVzXG4gICAgICogYW5kIHRoZSBsaWtlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRoZSBlbGVtZW50IHRvIGdldCB0aGUgcmVuZGVyZWQgQ1NTIGluZm9ybWF0aW9uIGZvclxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgY3NzIHJlbmRlcmVkLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhcnQgaXNcbiAgICAgKiAgIHJlbmRlcmVkXG4gICAgICovXG4gICAgcHVibGljIGdldFJlbmRlcmVkQ3NzKCk6IENzcyB7XG4gICAgICAgIHJldHVybiBuZXcgQ3NzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRvb2x0aXAgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVuZGVyZXIgYW4gSVJlbmRlcmVyIG9iamVjdCB0aGF0IGhhcyB0aGUgdG9vbHRpcFxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VG9vbHRpcERhdGEoZXZlbnQ6IElFdmVudCk6IGFueSB7XG4gICAgICAgIHJldHVybiBbeyBzb3VyY2U6IHRoaXMuX2VsZW1lbnQsIGdyb3VwOiAnJywgbWV0cmljczoge30gfV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgKCdEZXByZWNhdGVkIHNpbmNlIDEuMTQuMCBpbiBmYXZvciBvZiBmb2N1cy4gIFdpbGwgYmUgcmVtb3ZlZCBpbiAyLngnKVxuICAgICAqIGhvdmVyIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIHBhc3MgdG8gdGhlIHJlbmRlcmVyXG4gICAgICovXG4gICAgcHVibGljIGhvdmVyKGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1cyhldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYnJpbmcgYW4gaXRlbSBpbnRvIGZvY3VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIGZvY3VzIG9uXG4gICAgICovXG4gICAgcHVibGljIGZvY3VzKGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25TdGF0ZS5mb2N1cyhldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2VsZWN0IGFuIGl0ZW1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgdG8gZm9jdXMgb25cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGV2ZW50OiBJRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25TdGF0ZS5zZWxlY3QoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiB0aGUgc3ZnIHRoYXQgY29udGFpbnMgdGhlIGNoYXJ0ICovXG4gICAgcHJvdGVjdGVkIF9zdmc6IGQzLlNlbGVjdGlvbjxkMy5CYXNlVHlwZSwge30sIGQzLkJhc2VUeXBlLCBhbnk+O1xuXG4gICAgLyoqIHRoZSBzdmcgdGhhdCBjb250YWlucyB0aGUgY2hhcnQgKi9cbiAgICBwcm90ZWN0ZWQgX2JhY2tncm91bmRTVkc6IGQzLlNlbGVjdGlvbjxkMy5CYXNlVHlwZSwge30sIGQzLkJhc2VUeXBlLCBhbnk+O1xuXG4gICAgcHVibGljIF9mb2N1cyhzZWxlY3Rpb246IGFueSk6IHZvaWQge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHNlbGYuX3N2Zy5zZWxlY3RBbGwoJy4nICsgc2VsZWN0aW9uKVxuICAgICAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQzT2JqID0gZDMuc2VsZWN0KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBmb2N1cyhkM09iaiwgc2VsZi5fZmlsbENvbG9ycywgc2VsZi5fc3Ryb2tlQ29sb3JzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBfdW5mb2N1cyhzZWxlY3Rpb246IGFueSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2VsZi5fc3ZnLnNlbGVjdEFsbCgnLicgKyBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZDNPYmogPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHVuZm9jdXMoZDNPYmosIHNlbGYuX2ZpbGxDb2xvcnMsIHNlbGYuX3N0cm9rZUNvbG9ycyk7XG4gICAgICAgICAgICAgICAgfSk7O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIF9zZWxlY3Qoc2VsZWN0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBzZWxmLl9zdmcuc2VsZWN0QWxsKCcuJyArIHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkM09iaiA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KGQzT2JqLCBzZWxmLl9maWxsQ29sb3JzLCBzZWxmLl9zdHJva2VDb2xvcnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIF91bnNlbGVjdChzZWxlY3Rpb246IGFueSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2VsZi5fc3ZnLnNlbGVjdEFsbCgnLicgKyBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZDNPYmogPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHVuc2VsZWN0KGQzT2JqLCBzZWxmLl9maWxsQ29sb3JzLCBzZWxmLl9zdHJva2VDb2xvcnMpO1xuICAgICAgICAgICAgICAgIH0pOztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpbnZhbGlkYXRlKG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgICAgIC8vIGNsZWFyIHRoZSBTVkdcbiAgICAgICAgdGhpcy5sb2FkT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5jcmVhdGVMYXlvdXQoKTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMuZGlzYWJsZVJlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVIYW5kbGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVRvb2x0aXAoKTtcbiAgICAgICAgdGhpcy5yZW5kZXIob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUhhbmRsZXMoKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgICAgICAvLyB1cGRhdGUgaGFuZGxlIHBvc2l0aW9uc1xuICAgICAgICBzZWxmLl9zdmcuc2VsZWN0KCcuY2hhcnQtaGFuZGxlLmJvdHRvbScpXG4gICAgICAgICAgICAuYXR0cigneCcsIHNlbGYuX2dyYXBoUmVjdC54KVxuICAgICAgICAgICAgLmF0dHIoJ3knLCBzZWxmLl9ncmFwaFJlY3QueSArIHNlbGYuX2dyYXBoUmVjdC5oZWlnaHQpXG4gICAgICAgICAgICAuYXR0cignd2lkdGgnLCBzZWxmLl9ncmFwaFJlY3Qud2lkdGgpO1xuXG4gICAgICAgIHNlbGYuX3N2Zy5zZWxlY3QoJy5jaGFydC1oYW5kbGUubGVmdCcpXG4gICAgICAgICAgICAuYXR0cigneCcsIHNlbGYuX2dyYXBoUmVjdC54IC0gdGhpcy5faGFuZGxlV2lkdGggLSAxKVxuICAgICAgICAgICAgLmF0dHIoJ3knLCBzZWxmLl9ncmFwaFJlY3QueSlcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBzZWxmLl9ncmFwaFJlY3QuaGVpZ2h0KTtcblxuICAgICAgICAvLyB1cGRhdGUgaGFuZGxlIHBvc2l0aW9uc1xuICAgICAgICBzZWxmLl9zdmcuc2VsZWN0KCcuY2hhcnQtaGFuZGxlLnJpZ2h0JylcbiAgICAgICAgICAgIC5hdHRyKCd4Jywgc2VsZi5fZ3JhcGhSZWN0LnggKyBzZWxmLl9ncmFwaFJlY3Qud2lkdGggKyAxKVxuICAgICAgICAgICAgLmF0dHIoJ3knLCBzZWxmLl9ncmFwaFJlY3QueSlcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBzZWxmLl9ncmFwaFJlY3QuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlSGFuZGxlcygpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghc2VsZi5fb3B0aW9ucy5kaXNhYmxlUmVzaXplTGVmdCkge1xuICAgICAgICAgICAgc2VsZi5fc3ZnLmFwcGVuZCgncmVjdCcpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ29wYWNpdHknLCAwKVxuICAgICAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIHNlbGYuX2hhbmRsZVdpZHRoKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdjdXJzb3InLCAnZXctcmVzaXplJylcbiAgICAgICAgICAgICAgICAuY2xhc3NlZCgnY2hhcnQtaGFuZGxlIHZlcnRpY2FsIGxlZnQnLCB0cnVlKVxuICAgICAgICAgICAgICAgIC5jYWxsKGQzLmRyYWcoKVxuICAgICAgICAgICAgICAgICAgICAub24oJ3N0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1ZHUmVuZGVyZXIuSVNfUkVTSVpJTkcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAub24oJ2RyYWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZDMuZXZlbnQuZHggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGVmdE1hcmdpbiA9IE1hdGgubWluKHNlbGYuX29wdGlvbnMubGVmdE1hcmdpbiArIHNlbGYuX2dyYXBoUmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChzZWxmLk1JTl9NQVJHSU4uTEVGVCwgc2VsZi5fb3B0aW9ucy5sZWZ0TWFyZ2luICsgZDMuZXZlbnQuZHgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGU6IGFueSA9IHNlbGYuX3N2Zy5ub2RlKCk7IC8vIHRoaXMgaXMganVzdCB0byBtYWtlIHR5cGVzY3JpcHQgaGFwcHlcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRNYXJnaW46IGxlZnRNYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeFN0YXJ0OiBzZWxmLl9vcHRpb25zLnhTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RW5kOiBzZWxmLl9vcHRpb25zLnhFbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZUR1cmF0aW9uOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgZ3JhcGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9lbGVtZW50LmhhbmRsZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2VsZW1lbnQuaGFuZGxlVXBkYXRlKHNlbGYuX2VsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbmRlcihvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBTVkdSZW5kZXJlci5JU19SRVNJWklORyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNlbGYuX29wdGlvbnMuZGlzYWJsZVJlc2l6ZVJpZ2h0KSB7XG4gICAgICAgICAgICBzZWxmLl9zdmcuYXBwZW5kKCdyZWN0JylcbiAgICAgICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgc2VsZi5faGFuZGxlV2lkdGgpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2N1cnNvcicsICdldy1yZXNpemUnKVxuICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdjaGFydC1oYW5kbGUgdmVydGljYWwgcmlnaHQnLCB0cnVlKVxuICAgICAgICAgICAgICAgIC5jYWxsKGQzLmRyYWcoKVxuICAgICAgICAgICAgICAgICAgICAub24oJ3N0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1ZHUmVuZGVyZXIuSVNfUkVTSVpJTkcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAub24oJ2RyYWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZDMuZXZlbnQuZHggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub2RlOiBhbnkgPSBzZWxmLl9zdmcubm9kZSgpOyAvLyB0aGlzIGlzIGp1c3QgdG8gbWFrZSB0eXBlc2NyaXB0IGhhcHB5XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2lkdGggPSBzZWxmLl9vcHRpb25zLndpZHRoICsgZDMuZXZlbnQuZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHNlbGYuX21pblN2Z1dpZHRoLCB3aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWluKHNlbGYuX21heFN2Z1dpZHRoLCB3aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeFN0YXJ0OiBzZWxmLl9vcHRpb25zLnhTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RW5kOiBzZWxmLl9vcHRpb25zLnhFbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZUR1cmF0aW9uOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgZ3JhcGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9lbGVtZW50LmhhbmRsZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2VsZW1lbnQuaGFuZGxlVXBkYXRlKHNlbGYuX2VsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbmRlcihvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBTVkdSZW5kZXJlci5JU19SRVNJWklORyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwdWxsZWQgYW5kIG1vZGlmaWVkIGZyb20gaHR0cDovL2JsLm9ja3Mub3JnL1Jva290eWFuLzA1NTZmOGZhY2JhZjM0NDUwN2NkYzQ1ZGMzNjIyMTc3XG4gICAgY3JlYXRlSW1hZ2UoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAvLyBCZWxvdyBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBhY3R1YWwgZXhwb3J0aW5nOlxuICAgICAgICAgICAgLy8gZ2V0U1ZHU3RyaW5nICggc3ZnTm9kZSApIGFuZCBzdmdTdHJpbmcySW1hZ2UoIHN2Z1N0cmluZywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBjYWxsYmFjayApXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRTVkdTdHJpbmcoc3ZnTm9kZTogYW55KSB7XG4gICAgICAgICAgICAgICAgc3ZnTm9kZS5zZXRBdHRyaWJ1dGUoJ3hsaW5rJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnKTtcbiAgICAgICAgICAgICAgICBsZXQgY3NzU3R5bGVUZXh0ID0gZ2V0Q1NTU3R5bGVzKHN2Z05vZGUpO1xuICAgICAgICAgICAgICAgIGFwcGVuZENTUyhjc3NTdHlsZVRleHQsIHN2Z05vZGUpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlcmlhbGl6ZXIgPSBuZXcgWE1MU2VyaWFsaXplcigpO1xuICAgICAgICAgICAgICAgIGxldCBzdmdTdHJpbmcgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKHN2Z05vZGUpO1xuICAgICAgICAgICAgICAgIHN2Z1N0cmluZyA9IHN2Z1N0cmluZy5yZXBsYWNlKC8oXFx3Kyk/Oj94bGluaz0vZywgJ3htbG5zOnhsaW5rPScpOyAvLyBGaXggcm9vdCB4bGluayB3aXRob3V0IG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgIHN2Z1N0cmluZyA9IHN2Z1N0cmluZy5yZXBsYWNlKC9OU1xcZCs6aHJlZi9nLCAneGxpbms6aHJlZicpOyAvLyBTYWZhcmkgTlMgbmFtZXNwYWNlIGZpeFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN2Z1N0cmluZztcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldENTU1N0eWxlcyhwYXJlbnRFbGVtZW50OiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdG9yVGV4dEFyciA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBQYXJlbnQgZWxlbWVudCBJZCBhbmQgQ2xhc3NlcyB0byB0aGUgbGlzdFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvclRleHRBcnIucHVzaCgnIycgKyBwYXJlbnRFbGVtZW50LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBwYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5sZW5ndGg7IGMrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGFpbnMoJy4nICsgcGFyZW50RWxlbWVudC5jbGFzc0xpc3RbY10sIHNlbGVjdG9yVGV4dEFycikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JUZXh0QXJyLnB1c2goJy4nICsgcGFyZW50RWxlbWVudC5jbGFzc0xpc3RbY10pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBDaGlsZHJlbiBlbGVtZW50IElkcyBhbmQgQ2xhc3NlcyB0byB0aGUgbGlzdFxuICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZXMgPSBwYXJlbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG5vZGVzW2ldLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250YWlucygnIycgKyBpZCwgc2VsZWN0b3JUZXh0QXJyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvclRleHRBcnIucHVzaCgnIycgKyBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGFzc2VzID0gbm9kZXNbaV0uY2xhc3NMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGFpbnMoJy4nICsgY2xhc3Nlc1tjXSwgc2VsZWN0b3JUZXh0QXJyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JUZXh0QXJyLnB1c2goJy4nICsgY2xhc3Nlc1tjXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IENTUyBSdWxlc1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXh0cmFjdGVkQ1NTVGV4dCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgczogYW55ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzLmNzc1J1bGVzKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5uYW1lICE9PSAnU2VjdXJpdHlFcnJvcicpIHRocm93IGU7IC8vIGZvciBGaXJlZm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjc3NSdWxlcyA9IHMuY3NzUnVsZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByID0gMDsgciA8IGNzc1J1bGVzLmxlbmd0aDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zKGNzc1J1bGVzW3JdLnNlbGVjdG9yVGV4dCwgc2VsZWN0b3JUZXh0QXJyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ1NTVGV4dCArPSBjc3NSdWxlc1tyXS5jc3NUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXh0cmFjdGVkQ1NTVGV4dDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb250YWlucyhzdHI6IHN0cmluZywgYXJyOiBzdHJpbmdbXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHN0cikgPT09IC0xID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcHBlbmRDU1MoY3NzVGV4dDogYW55LCBlbGVtZW50OiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IGNzc1RleHQ7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZOb2RlID0gZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkgPyBlbGVtZW50LmNoaWxkcmVuWzBdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUoc3R5bGVFbGVtZW50LCByZWZOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3ZnID0gc2VsZi5fc3ZnO1xuICAgICAgICAgICAgbGV0IHdpZHRoID0gTnVtYmVyKHN2Zy5hdHRyKCd3aWR0aCcpKTtcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBOdW1iZXIoc3ZnLmF0dHIoJ2hlaWdodCcpKVxuICAgICAgICAgICAgbGV0IGh0bWwgPSBnZXRTVkdTdHJpbmcoc3ZnLm5vZGUoKSlcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhodG1sKTtcbiAgICAgICAgICAgIGxldCBpbWdzcmMgPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwnICsgYnRvYShodG1sKTtcblxuICAgICAgICAgICAgbGV0IGltYWdlID0gbmV3IEltYWdlO1xuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gaW1nc3JjO1xuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNhbnZhc2RhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogY2FudmFzZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNhdmVJbWFnZSgpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVJbWFnZSgpLnRoZW4oZnVuY3Rpb24gKGltYWdlRGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgcG5naW1nID0gYDxpbWcgc3JjPVwiJHtpbWFnZURhdGEuaW1hZ2V9XCIgaGVpZ2h0PVwiJHtpbWFnZURhdGEuaGVpZ2h0fVwiIHdpZHRoPVwiJHtpbWFnZURhdGEud2lkdGh9XCI+YDtcbiAgICAgICAgICAgIGQzLnNlbGVjdCgnI3BuZ2RhdGF1cmwnKS5odG1sKHBuZ2ltZyk7XG5cbiAgICAgICAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgYS5kb3dubG9hZCA9ICdjaGFydC5wbmcnO1xuICAgICAgICAgICAgYS5ocmVmID0gaW1hZ2VEYXRhLmltYWdlO1xuICAgICAgICAgICAgYS5jbGljaygpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQU1BO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhCQTtBQTBCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQW1CQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQWxCQTtBQW9CQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFlQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbERBO0FBb0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXZCQTtBQXlCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxDQTtBQW9DQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJDQTtBQXdEQTs7OztBQUlBO0FBQ0E7QUE4QkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1S0E7QUE4S0E7QUF5QkE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFqV0E7QUFtV0E7QUFxREE7QUFDQTtBQTFDQTtBQUNBO0FBQ0E7QUE0QkE7QUFDQTtBQUVBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExZEE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/core/svg-helper.ts\n");

/***/ }),

/***/ "./src/core/tooltip.ts":
/*!*****************************!*\
  !*** ./src/core/tooltip.ts ***!
  \*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __webpack_require__(/*! d3 */ \"d3\");\n/**\n * The tooltip class provides a mechanism to display a tooltip, usually in\n * response to the mouse entering some region.\n */\nclass BaseTooltip {\n    /**\n     * Create at tooltip instance.\n     *\n     * @params tooltipDivId - The ID for the div that is to be filled with the\n     *   tooltip information.\n     * @param tooltipStyle -  css class that describes tooltip format.  Defaults\n     *   to tooltip-t.\n     */\n    constructor(tooltipDivId, tooltipStyle = 'tooltip-t') {\n        if (!document.getElementById(tooltipDivId)) {\n            this._tooltipDiv = document.createElement('div');\n            this._tooltipDiv.style.overflow = 'auto';\n            this._tooltipDiv.id = tooltipDivId;\n            document.querySelector('body')\n                .appendChild(this._tooltipDiv);\n        }\n        else {\n            // Make sure the div ID has the leading '#' we need for selecting\n            // a DOM object by id.\n            let id = tooltipDivId;\n            if ('#' !== tooltipDivId.charAt(0)) {\n                id = '#' + tooltipDivId;\n            }\n            this._tooltipDiv = document.querySelector(id);\n        }\n        this._targets = [];\n        this._analyticsName = '';\n        this._disabled = false;\n        this._visibilityTimeoutSecs = 0;\n        this._visibilityTimeoutCallLeaveFunction = true;\n        this._delayMS = BaseTooltip._defaultDelayMS;\n        this._tooltipPlacementFunc = this.defaultTooltipPlacement;\n        this._alwaysRecalcWidth = false;\n        this._tooltipLeftOfMouse = true;\n        this._lastShowTs = Date.now();\n        // Debugging aid\n        this._counter = BaseTooltip._counter;\n        BaseTooltip._counter++;\n        this._hide = 'none'; // Value display property will be set to\n        // Use the default offsets\n        this._tooltipOffset = 0;\n        // Note that we'll need to get the tooltip size on the first move\n        this._tooltipHeight = 0;\n        this._tooltipWidth = 0;\n        this._windowWidth = 0;\n        this._windowHeight = 0;\n        // Ensure that the div has the tooltip-t class\n        this._tooltipDiv.classList.add(tooltipStyle);\n        // Default tooltip textures (null value results in css to be used)\n        this._tooltipBackgroundColor = null;\n        this._tooltipFontColor = null;\n        this._tooltipFontType = null;\n        this._tooltipFontSize = null;\n        // Put 'this' into a variable that will be visible in the Mouse\n        // callbacks which will have the entity being entered as their 'this'\n        let self = this;\n        // Since this is a callback, 'this' will be the selected object that\n        // the mouse has just entered\n        this.onMouseEnter = function (d) {\n            // If this tooltip is disabled, we're done\n            if (self._disabled) {\n                return;\n            }\n            // If there's an _enterfunc, call it. If it returns\n            // false, there's been a failure\n            if (undefined !== self._enterfunc) {\n                if (!self._enterfunc.call(this, d)) {\n                    self.onMouseLeave.call(this, d);\n                    return;\n                }\n            }\n            // Delay making the tooltip visible\n            self.displayTooltip(self._delayMS);\n            // Note that we'll need to get the tooltip size on the first move\n            self._tooltipHeight = 0;\n            self._tooltipWidth = 0;\n            self._windowWidth = 0;\n            self._windowHeight = 0;\n        }; // onMouseEnter\n        // Since this is a callback, 'this' will be the selected object that\n        // the mouse has just entered\n        this.onMouseLeave = function (d) {\n            // Cancel the timer, if it hasn't gone off yet\n            if (undefined != self._timerId) {\n                window.clearTimeout(self._timerId);\n            }\n            self._timerId = undefined;\n            if (undefined != self._visibilityTimerId) {\n                window.clearTimeout(self._visibilityTimerId);\n            }\n            // If we've got an exit function, call it, unless we're hiding the\n            // tooltip after a visibility timeout and we've been told not to.\n            // This is really ugly. We're depending on the fact that the\n            // timeout is calling us with a null event.\n            if (undefined !== self._leavefunc) {\n                let callLeaveFunction = true;\n                if (null === d) {\n                    callLeaveFunction = self._visibilityTimeoutCallLeaveFunction;\n                }\n                if (callLeaveFunction) {\n                    self._leavefunc.call(this, d);\n                }\n            }\n            // Hide the tooltip div\n            self.hideTooltip();\n        }; // MouseLeave\n        // Since this is a callback, 'this' will be the selected object that\n        // the mouse has just entered\n        this.onMouseMove = function (d, pos) {\n            // If this tooltip is disabled, we're done\n            if (self._disabled) {\n                return;\n            }\n            // If we've got a move function, call it\n            if (undefined !== self._movefunc) {\n                self._movefunc.call(this, d);\n            }\n            // If we haven't yet, get the width & height of the tooltip, including\n            // the margins\n            if (self._alwaysRecalcWidth || (0 === self._tooltipWidth)) {\n                self._tooltipWidth = self._tooltipDiv.offsetWidth;\n                let outerWidth = self._tooltipDiv.offsetHeight;\n                let top = parseInt(self._tooltipDiv.style.marginTop);\n                let bottom = parseInt(self._tooltipDiv.style.marginBottom);\n                if (top) {\n                    outerWidth += top;\n                }\n                if (bottom) {\n                    outerWidth += bottom;\n                }\n                self._tooltipHeight = outerWidth;\n            }\n            // If we haven't yet, get the width & height of the window\n            if (0 == self._windowWidth) {\n                // Get the window's inner width, which doesn't include scrollbars or\n                // or the like. Allow a little fudge, just to be safe\n                self._windowWidth = window.innerWidth;\n                // And the window's inner height\n                self._windowHeight = window.innerHeight;\n            }\n            if (!pos || !pos.clientY) {\n                pos = d3.event.clientY ? d3.event : d3.event.sourceEvent;\n            }\n            self._tooltipPlacementFunc(pos);\n        }; // MouseMove\n    } // constructor\n    adjustVerticalPosition(top, bottom) {\n        // Now set the top edge\n        top -= this._tooltipHeight / 2;\n        // Make sure we're not off the top of the window\n        if (top < window.pageYOffset) {\n            top = window.pageYOffset;\n        }\n        // Make sure we're not off the bottom of the window\n        bottom = top + this._tooltipHeight;\n        if (bottom > (this._windowHeight + window.pageYOffset)) {\n            top -= bottom - (this._windowHeight + window.pageYOffset);\n        }\n        if (top < 0) {\n            top = 0;\n            // THIS CAUSES TOOLTIP TO NOT RESIZE RIGHT IF IT GETS TOO BIG...\n            // NEED TO UPDATE LOGIC THAT GETS TOOLTIP HEIGHT AND THEN COMMENT\n            // THIS BACK IN\n            // height of tooltip minux 30 for scrollbar\n            // if (this._tooltipHeight > this._windowHeight) {\n            //     this._tooltipDiv.style.height =\n            //         Math.min(this._tooltipHeight, this._windowHeight) - 30 + 'px';\n            // } else {\n            //     this._tooltipDiv.style.height = 'auto';\n            // }\n        }\n        // Set the tooltip div position.\n        this._tooltipDiv.style.top = top + 'px';\n    }\n    /**\n     * Tooltip placement routine to place the tooltip to the left of\n     * the mouse. Designed to be used for the chart value tooltip.\n     */\n    placeTooltipLeft(event) {\n        // Start by trying to put the tooltip above or below the pointer\n        let top, bottom, right, left;\n        // Cast the event the mouse event we know that it is. After all,\n        // this is the MouseMove callback!\n        top = window.pageYOffset + event.clientY;\n        left = window.pageXOffset + event.clientX;\n        // Put the tooltip in the left half of the window. The 10 is\n        // an offset to allow some space between the tooltip and the\n        // pointer\n        left -= this._tooltipWidth + 10;\n        // Make sure the tooltip isn't off the left edge\n        if (left < window.pageXOffset) {\n            left = window.pageXOffset;\n        }\n        this._tooltipDiv.style.left = left + 'px';\n        this.adjustVerticalPosition(top, bottom);\n    }\n    /**\n     * Tooltip placement routine to place the tooltip to the right or left of\n     * the mouse. Designed to be used for the chart value tooltip.\n     *\n     * The placement (left or right of the mouse) is changed if the mouse is\n     * in the left or right third of the window. Placement is left alone in\n     * the middle third.\n     */\n    placeTooltipLeftRight(event) {\n        // Start by trying to put the tooltip above or below the pointer\n        let top, bottom, right, left;\n        // Cast the event the mouse event we know that it is. After all,\n        // this is the MouseMove callback!\n        top = window.pageYOffset + event.clientY;\n        left = window.pageXOffset + event.clientX;\n        // If the mouse is in the left third of the screen, show the tooltip\n        // to the right of the mouse. If the mouse is in the right third of\n        // the screen, show the tooltip to the left of the mouse. Otherwise,\n        // just keep the existing placement\n        if (left < this._windowWidth / 3) {\n            this._tooltipLeftOfMouse = false;\n        }\n        if (left > 2 * (this._windowWidth / 3)) {\n            this._tooltipLeftOfMouse = true;\n        }\n        if (this._tooltipLeftOfMouse) {\n            // Put the tooltip in the left half of the window. The 10 is\n            // an offset to allow some space between the tooltip and the\n            // pointer\n            left -= this._tooltipWidth + 10;\n        }\n        else {\n            left += 10;\n        }\n        // Make sure the tooltip isn't off the left edge\n        if (left < window.pageXOffset) {\n            left = window.pageXOffset;\n        }\n        this._tooltipDiv.style.left = left + 'px';\n        this.adjustVerticalPosition(top, bottom);\n    }\n    /**\n     * Default Tooltip placement routine. Attempts to make the entire\n     * tooltip visibile without covering the mouse.\n     */\n    defaultTooltipPlacement(event) {\n        // Start by trying to put the tooltip above or below the pointer\n        let top, bottom, right, left;\n        // Cast the event the mouse event we know that it is. After all,\n        // this is the MouseMove callback!\n        top = window.pageYOffset + event.clientY;\n        left = window.pageXOffset + event.clientX;\n        // If the pointer is in the upper half of the screen, try to put\n        // the tooltip below the pointer\n        if (event.y < (this._windowHeight / 2)) {\n            // Put the top of the tooltip below the pointer. The 20 is a\n            // guess for how much to offset so the tooltip isn't obscured\n            // by the cursor. Unfortunately there's no API to query the\n            // cursor, and it can be an arbitrary shape, with an arbitary\n            // hotspot\n            top += 20 + this._tooltipOffset;\n            bottom = top + this._tooltipHeight;\n            // Make sure the bottom of the tooltip is visible\n            if (bottom < (this._windowHeight + window.pageYOffset)) {\n                // We're good. Now set the left edge\n                left -= this._tooltipWidth / 2;\n                // Make sure we're not off the left or right edge of the window\n                right = left + this._tooltipWidth;\n                if (right > this._windowWidth) {\n                    left -= right - this._windowWidth;\n                }\n                if (left < window.pageXOffset) {\n                    left = window.pageXOffset;\n                }\n                this._tooltipDiv.style.left = left + 'px';\n                this.adjustVerticalPosition(top, bottom);\n                return;\n            }\n        }\n        else {\n            // Initially guess the tooltip goes above the pointer. The\n            // 10 gives some space between the tooltip and the pointer\n            top -= this._tooltipHeight + 10 + this._tooltipOffset;\n            // Make sure the top of the tooltip is visible\n            if (top >= window.pageYOffset) {\n                // We're good. Now set the left edge\n                left -= this._tooltipWidth / 2;\n                // Make sure we're not off the left or right edge of the window\n                right = left + this._tooltipWidth;\n                if (right > this._windowWidth) {\n                    left -= right - this._windowWidth;\n                }\n                if (left < window.pageXOffset) {\n                    left = window.pageXOffset;\n                }\n                this._tooltipDiv.style.left = left + 'px';\n                this.adjustVerticalPosition(top, bottom);\n                return;\n            }\n        }\n        // If we got here, putting the tooltip in the upper or lower half\n        // of the window didn't work. Try for the right or left half\n        // Choose the left or right half\n        if (event.clientX > (this._windowWidth / 2)) {\n            // Put the tooltip in the left half of the window. The 10 is\n            // an offset to allow some space between the tooltip and the\n            // pointer\n            left -= this._tooltipWidth + 10;\n            // Make sure the tooltip isn't off the left edge\n            if (left < window.pageXOffset) {\n                left = window.pageXOffset;\n            }\n        }\n        else {\n            // Try putting the tooltip in the right half of the window\n            // Put the tooltip in the left half of the window. The 10 is\n            // an offset to allow some space between the tooltip and the\n            // pointer\n            left += 10;\n            right = left + this._tooltipWidth;\n            // Make sure the tooltip isn't off the right edge\n            if (right > this._windowWidth) {\n                left -= right - this._windowWidth;\n            }\n        }\n        // Set the tooltip div position.\n        this._tooltipDiv.style.left = left + 'px';\n        this.adjustVerticalPosition(top, bottom);\n    } // _DefaultTooltipPlacement\n    /**\n     * Override the default offset of the tooltip from the mouse.\n     */\n    setOffset(value) {\n        this._tooltipOffset = value;\n        return this;\n    }\n    setEnabled(enable) {\n        this._disabled = !enable;\n        return this;\n    }\n    /**\n     * HideDisplayValue\n     *\n     * The value the CSS 'display' attribute will be set to to hide the\n     * tooltip. This defaults to 'none'. 'display' will be set to 'block'\n     * when the tooltip is to be visible.\n     */\n    setHideDisplayValue(hide) {\n        this._hide = hide;\n        return this;\n    }\n    /**\n     * When the mouse enters the target region, instead of instantly showing\n     * the tooltip, there's a small delay. This prevents the tooltip from\n     * popping up and disappearing if the user is just moving the mouse over\n     * the target region instead of waiting for information. By default, the\n     * delay is 1 second.\n     *\n     * @param milliseconds - The number of milliseconds to delay showing the\n     * tooltip after the mouse enters the target region.\n     *\n     * @return - The tooltip instance.\n     */\n    setDelay(milliseconds) {\n        this._delayMS = milliseconds;\n        return this;\n    }\n    setPlaceTooltipLeft() {\n        this._tooltipPlacementFunc = this.placeTooltipLeft;\n        return this;\n    }\n    setPlaceTooltipLeftRight() {\n        this._tooltipPlacementFunc = this.placeTooltipLeftRight;\n        return this;\n    }\n    /**\n     * Release all tooltip listeners on the target. Failure to release the\n     * listeners can prevent the target from being freed.\n     *\n     * @param target - The object to have any tooltip listeners reset.\n     */\n    releaseListeners() {\n        this._targets.forEach(target => {\n            target\n                .on('mouseenter.tooltip', null)\n                .on('mouseleave.tooltip', null)\n                .on('mousemove.tooltip', null);\n        });\n        this._targets = [];\n    }\n    /**\n     * Sets a limit on the time a tooltip is visible.\n     *\n     * @param seconds - Seconds the tooltip should be visible\n     * @param callLeaveFunctionOnTimeout - True if the leave function should\n     *  be called when the timeout occurs.\n     *\n     * @return - The tooltip instance.\n     */\n    setVisibilityTimeout(seconds, callLeaveFunctionOnTimeout = true) {\n        this._visibilityTimeoutSecs = seconds;\n        this._visibilityTimeoutCallLeaveFunction = callLeaveFunctionOnTimeout;\n        return this;\n    }\n    /**\n     * Set whether to recalculate the tooltip width every time the cursor moves.\n     *\n     * Defaults to false\n     *\n     * @param value - Whether to recalculate the tooltip width every time the\n     *   cursor moves.\n     */\n    alwaysRecalcWidth(value) {\n        this._alwaysRecalcWidth = value;\n        return this;\n    }\n    /**\n     * Override tooltip background color. The background color is applied to\n     * the tooltip div immediately.\n     *\n     * @param value - color encoding, for example '#000000'\n     *\n     * @returns - The tooltip instance.\n     */\n    setBackgroundColor(color) {\n        this._tooltipBackgroundColor = color;\n        this._tooltipDiv.style['background-color'] =\n            this._tooltipBackgroundColor;\n        return this;\n    }\n    /**\n    * Override tooltip font color.  The font color is applied to\n    * the tooltip div immediately.\n    *\n    * @param value - color encoding, for example '#000000'\n    *\n    * @returns - The tooltip instance.\n    */\n    setFontColor(color) {\n        this._tooltipFontColor = color;\n        this._tooltipDiv.style.color = this._tooltipFontColor;\n        return this;\n    }\n    /**\n     * Override tooltip font type. The font family is applied to\n     * the tooltip div immediately.\n     *\n     * @param value - string, for example 'Segoe UI'\n     *\n     * @returns - The tooltip instance.\n     */\n    setFontType(font) {\n        this._tooltipFontType = font;\n        this._tooltipDiv.style.font = this._tooltipFontType;\n        return this;\n    }\n    /**\n     * Override tooltip font size. The font size is applied to\n     * the tooltip div immediately.\n     *\n     * @param value - font size in pixels, for example '8px'\n     *\n     * @returns - The tooltip instance.\n     */\n    setFontSize(size) {\n        this._tooltipFontSize = size;\n        this._tooltipDiv.style.font = this._tooltipFontSize;\n        return this;\n    } // FontSize\n    /**\n     * Set the analytics name for the tooltip. Not currently used.\n     *\n     * @param value - The analytics name to report when this tooltip is shown\n     *   or hidden.\n     *\n     * @returns - The tooltip instance.\n     */\n    setAnalyticsName(value) {\n        this._analyticsName = value;\n        return this;\n    } // AnalyticsName\n    /**\n     * Set the CSS class for the tooltip. The class is applied immediately.\n     *\n     * @param cssClass - The CSS class(es) to apply to this tooltip.\n     *\n     * @returns - The tooltip instance.\n     */\n    setCssClass(cssClass) {\n        this._tooltipDiv.classList.add(cssClass);\n        return this;\n    } // CssClass\n    /**\n     * Set the target for the tooltip\n     *\n     * @param target - The selection of DOM objects that should cause the\n     *   tooltip to appear.\n     *\n     * @returns - The tooltip instance.\n     */\n    setTarget(target) {\n        if (target) {\n            target\n                .on('mouseenter.tooltip', this.onMouseEnter)\n                .on('mouseleave.tooltip', this.onMouseLeave)\n                .on('mousemove.tooltip', this.onMouseMove);\n            this._targets.push(target);\n        }\n        return this;\n    } // Target\n    /**\n     * Set the function to be called when the mouse moves into the target\n     * DOM object(s)\n     *\n     * @param enterfunc - The function to be called when the mouse moves into\n     *   the target DOM object. If the tooltip will only be shown if the\n     *   enterfunc returns true.\n     *\n     * @returns - The tooltip instance.\n     */\n    setEnterCallback(enterfunc) {\n        this._enterfunc = enterfunc;\n        return this;\n    } // EnterFunc\n    /**\n     * Set the function to be called when the mouse moves off of the target\n     * DOM object(s)\n     *\n     * @param leavefunc - The function to be called when the mouse moves off of\n     *   the target DOM object.\n     *\n     * @returns - The tooltip instance.\n     */\n    setLeaveCallback(leavefunc) {\n        this._leavefunc = leavefunc;\n        return this;\n    } // LeaveFunc\n    /**\n     * Set the function to be called when the mouse moves while it is on the\n     * target DOM object(s)\n     *\n     * @param movefunc - The function to be called when the mouse moves while\n     *   it is on the target DOM object.\n     *\n     * @returns - The tooltip instance.\n     */\n    setMoveCallback(moveFunc) {\n        this._movefunc = moveFunc;\n        return this;\n    } // MoveFunc\n    /**\n     * Display the tooltip div after a delay\n     *\n     * @param delayMS - milliseconds to delay before showing the tooltip\n     *\n     * @returns - The tooltip instance.\n     */\n    displayTooltip(delayMS) {\n        // If tooltips are disabled, don't do anything\n        if (this._disabled) {\n            return this;\n        }\n        // Save this for callbacks\n        let self = this;\n        // If there's no delay display the tooltip now\n        if (0 === delayMS) {\n            displayTooltipNow();\n            return this;\n        }\n        // If there's already a timer running, don't start another\n        if (undefined !== this._timerId) {\n            return this;\n        }\n        // Display the tooltip 'in a bit'\n        this._timerId = window.setTimeout(displayTooltipNow, delayMS);\n        return this;\n        // Make the tooltip div visible\n        function displayTooltipNow() {\n            // If tooltips are dispabled, don't do anything\n            if (self._disabled) {\n                return;\n            }\n            // Display the tooltip\n            self._tooltipDiv.style.display = 'block';\n            // If the tooltip is supposed to 'self hide', start a timer\n            if (self._visibilityTimeoutSecs > 0) {\n                self._visibilityTimerId = window.setTimeout(hideTooltip, self._visibilityTimeoutSecs * 1000);\n            }\n            // Function to hide the tooltip\n            function hideTooltip() {\n                self.onMouseLeave(null);\n            }\n        } // function DisplayTooltipNow\n    } // _DisplayTooltip\n    /**\n     * Hide the tooltip div\n     *\n     * @returns - The tooltip instance.\n     */\n    hideTooltip() {\n        // If there's a delayed display pending, cancel it\n        if (this._timerId) {\n            window.clearTimeout(this._timerId);\n        }\n        // Reset the timerid so we can display the tooltip next time\n        this._timerId = undefined;\n        this._tooltipDiv.style.display = this._hide;\n        return this;\n    } // _HideTooltip\n} // class Tooltip\nexports.BaseTooltip = BaseTooltip;\n/** Default delay for showing a tooltip (.5 second) */\nBaseTooltip._defaultDelayMS = 500; // Milliseconds to delay displaying tooltip (1 sec)\n/** Counter used to generate a unique value for each tooltip */\nBaseTooltip._counter = 0;\nclass OneLineTooltip extends BaseTooltip {\n    constructor(tooltipDivId, tooltipStyle = 'tooltip-t') {\n        super(tooltipDivId, tooltipStyle);\n    }\n    getTitle() {\n        return this._title;\n    }\n    setData(title, data) {\n        // If the data already exists, remove any children\n        while (this._tooltipDiv.hasChildNodes()) {\n            this._tooltipDiv.removeChild(this._tooltipDiv.lastChild);\n        }\n        this._title = title;\n        let table = document.createElement('table');\n        table.classList.add('tooltip-table');\n        this._tooltipDiv.appendChild(table);\n        let tr = document.createElement('tr');\n        table.appendChild(tr);\n        let td = document.createElement('td');\n        td.classList.add('tooltip-title');\n        td.setAttribute('colspan', '2');\n        td.textContent = title;\n        tr.appendChild(td);\n        if (data != undefined) {\n            // now get text from any associated graphs\n            tr = document.createElement('tr');\n            table.appendChild(tr);\n            td = document.createElement('td');\n            td.setAttribute('colspan', '2');\n            td.textContent = data;\n            tr.appendChild(td);\n        }\n    }\n}\nexports.OneLineTooltip = OneLineTooltip;\nclass MetricListTooltip extends BaseTooltip {\n    constructor(tooltipDivId, tooltipStyle = 'tooltip-t') {\n        super(tooltipDivId, tooltipStyle);\n    }\n    getTitle() {\n        return this._title;\n    }\n    setData(title, ttList) {\n        // If the data already exists, remove any children\n        while (this._tooltipDiv.hasChildNodes()) {\n            this._tooltipDiv.removeChild(this._tooltipDiv.lastChild);\n        }\n        this._title = title;\n        let table = document.createElement('table');\n        table.classList.add('tooltip-table');\n        this._tooltipDiv.appendChild(table);\n        let tr = document.createElement('tr');\n        table.appendChild(tr);\n        let td = document.createElement('td');\n        td.classList.add('tooltip-title');\n        td.setAttribute('colspan', '2');\n        td.textContent = title;\n        tr.appendChild(td);\n        // now get text from any associated graphs\n        // check if there are multiple chart sources involved\n        let multipleSources = false;\n        if (ttList.length > 0) {\n            let firstSource = ttList[0].source;\n            for (let i = 1; i < ttList.length; ++i) {\n                if (ttList[i].source !== firstSource) {\n                    multipleSources = true;\n                }\n            }\n        }\n        for (let i = 0; i < ttList.length; ++i) {\n            let data = ttList[i];\n            if (Object.keys(data.metrics).length > 0) {\n                let sourceChart = data.source;\n                if (sourceChart && sourceChart.title && multipleSources) {\n                    let tr = document.createElement('tr');\n                    table.appendChild(tr);\n                    let td = document.createElement('td');\n                    td.classList.add('tooltip-group-title');\n                    td.setAttribute('colspan', '2');\n                    td.textContent = sourceChart.title;\n                    tr.appendChild(td);\n                }\n                if (data.group && data.group.length > 0) {\n                    let tr = document.createElement('tr');\n                    table.appendChild(tr);\n                    let td = document.createElement('td');\n                    td.classList.add('tooltip-group-title');\n                    td.setAttribute('colspan', '2');\n                    td.textContent = data.group;\n                    tr.appendChild(td);\n                }\n                for (let metricName in data.metrics) {\n                    let tr = document.createElement('tr');\n                    table.appendChild(tr);\n                    let td = document.createElement('td');\n                    td.classList.add('tooltip-metric-name');\n                    td.textContent = metricName;\n                    tr.appendChild(td);\n                    td = document.createElement('td');\n                    td.classList.add('tooltip-metric-value');\n                    td.textContent = data.metrics[metricName];\n                    tr.appendChild(td);\n                }\n            }\n        }\n    }\n}\nexports.MetricListTooltip = MetricListTooltip;\nclass CustomDivTooltip extends MetricListTooltip {\n    constructor(tooltipDivId, tooltipStyle = 'tooltip-t') {\n        super(tooltipDivId, tooltipStyle);\n    }\n    clearTooltip() {\n        // If the data already exists, remove any children\n        while (this._tooltipDiv.hasChildNodes()) {\n            this._tooltipDiv.removeChild(this._tooltipDiv.lastChild);\n        }\n    }\n    getTooltipDiv() {\n        return this._tooltipDiv;\n    }\n}\nexports.CustomDivTooltip = CustomDivTooltip;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS90b29sdGlwLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2NvcmUvdG9vbHRpcC50cz9lMWRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUb29sdGlwRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZS91aS1iYXNlJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBjYWxsYmFjayBmb3IgdG9vbHRpcCBlbnRlciwgbGVhdmUgYW5kIG1vdmUgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBkIC0gVXN1YWxseSB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZW0gdGhlIG1vdXNlIGlzIG92ZXIuXG4gKlxuICogQHJldHVybiAtIFJldHVybiBmYWxzZSBvbiBmYWlsdXJlLiBJZiB0aGUgdG9vbHRpcCBlbnRlciBjYWxsYmFjayByZXR1cm5zXG4gKiBmYWxzZSwgdGhlIHRvb2x0aXAgd2lsbCBub3QgYmUgZGlzcGxheWVkLiBUaGUgcmV0dXJuIHZhbHVlIG9mIG90aGVyXG4gKiBjYWxsYmFja3MgaXMgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVG9vbHRpcENhbGxiYWNrIHtcbiAgICAoZDogYW55KTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgdG9vbHRpcCBwbGFjZW1lbnQgZnVuY3Rpb24uIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgaW50ZXJuYWxseVxuICogdG8gaW1wbGVtZW50IHZhcmlvdXMgdG9vbHRpcCBwbGFjZW1lbnQgYWxnb3JpdGhtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVG9vbHRpcFBsYWNlbWVudEZ1bmMge1xuICAgIChldmVudDogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIgfSk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIHRvb2x0aXAgY2xhc3MgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gZGlzcGxheSBhIHRvb2x0aXAsIHVzdWFsbHkgaW5cbiAqIHJlc3BvbnNlIHRvIHRoZSBtb3VzZSBlbnRlcmluZyBzb21lIHJlZ2lvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VUb29sdGlwIHtcbiAgICAvKiogdGhlIHRhcmdldHMgd2hvIHRoaXMgdG9vbHRpcCBpcyBsaXN0ZW5pbmcgdG8gKi9cbiAgICBwcm90ZWN0ZWQgX3RhcmdldHM6IGFueVtdO1xuXG4gICAgLyoqIGRpdiBjb250YWluaW5nIHRoZSB0b29sdGlwIHRvIGJlIGRpc3BsYXllZCAqL1xuICAgIHByb3RlY3RlZCBfdG9vbHRpcERpdjogSFRNTERpdkVsZW1lbnQ7XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgdGFyZ2V0IHJlZ2lvbiAqL1xuICAgIHByb3RlY3RlZCBfZW50ZXJmdW5jOiBJVG9vbHRpcENhbGxiYWNrO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIHRhcmdldCByZWdpb24gKi9cbiAgICBwcm90ZWN0ZWQgX2xlYXZlZnVuYzogSVRvb2x0aXBDYWxsYmFjaztcblxuICAgIC8qKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgaW4gdGhlIHRhcmdldCByZWdpb24gKi9cbiAgICBwcm90ZWN0ZWQgX21vdmVmdW5jOiBJVG9vbHRpcENhbGxiYWNrO1xuXG4gICAgLyoqIFdpZHRoIG9mIHRoZSB0b29sdGlwIGRpdiAqL1xuICAgIHByb3RlY3RlZCBfdG9vbHRpcFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKiogSGVpZ2h0IG9mIHRoZSB0b29sdGlwIGRpdiAqL1xuICAgIHByb3RlY3RlZCBfdG9vbHRpcEhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIFRvb2x0aXAgYmFja2dyb3VuZCBjb2xvciAqL1xuICAgIHByb3RlY3RlZCBfdG9vbHRpcEJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuXG4gICAgLyoqIFRvb2x0aXAgZm9udCBjb2xvciAqL1xuICAgIHByb3RlY3RlZCBfdG9vbHRpcEZvbnRDb2xvcjogc3RyaW5nO1xuXG4gICAgLyoqIFRvb2x0aXAgZm9udCB0eXBlICovXG4gICAgcHJvdGVjdGVkIF90b29sdGlwRm9udFR5cGU6IHN0cmluZztcblxuICAgIC8qKiBUb29sdGlwIGZvbnQgc2l6ZSAqL1xuICAgIHByb3RlY3RlZCBfdG9vbHRpcEZvbnRTaXplOiBzdHJpbmc7XG5cbiAgICAvKiogV2lkdGggb2YgdGhlIGJyb3dzZXIgd2luZG93ICovXG4gICAgcHJvdGVjdGVkIF93aW5kb3dXaWR0aDogbnVtYmVyO1xuXG4gICAgLyoqIEhlaWdodCBvZiB0aGUgYnJvd3NlciB3aW5kb3cgKi9cbiAgICBwcm90ZWN0ZWQgX3dpbmRvd0hlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIElEIGZvciB0aGUgdGltZXIgdXNlZCB0byBkZWxheSBhcHBlYXJhbmNlIG9mIHRoZSB0b29sdGlwICovXG4gICAgcHJvdGVjdGVkIF90aW1lcklkOiBudW1iZXI7XG5cbiAgICAvKiogQWRkaXRpb25hbCBwaXhlbHMgdG8gb2Zmc2V0IHRoZSB0b29sdGlwIGZyb20gdGhlIG1vdXNlICovXG4gICAgcHJvdGVjdGVkIF90b29sdGlwT2Zmc2V0OiBudW1iZXI7XG5cbiAgICAvKiogRGVidWdnaW5nIGFpZCAtIHNldCB0byBhIHVuaXF1ZSB2YWx1ZSBmb3IgZWFjaCB0b29sdGlwIGluc3RhbmNlICovXG4gICAgcHJvdGVjdGVkIF9jb3VudGVyOiBudW1iZXI7XG5cbiAgICAvKiogU2V0IGlmIHRoZSBjYWxsZXIgaGFzIGRlY2lkZWQgdG8gZGlzYWJsZSB0aGUgdG9vbHRpcCBieSBjYWxsaW5nIEVuYWJsZWQoKSAqL1xuICAgIHByb3RlY3RlZCBfZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogVmFsdWUgdG8gc2V0ICdkaXNwbGF5JyBhdHRyaWJ1dGUgdG8gdG8gdG8gaGlkZSB0b29sdGlwICovXG4gICAgcHJvdGVjdGVkIF9oaWRlOiBzdHJpbmc7ICAvL1xuXG4gICAgLyoqIE5hbWUgZm9yIGFuYWx5dGljcyBldmVudHMgZm9yIHRoaXMgdG9vbHRpcCAqL1xuICAgIHByb3RlY3RlZCBfYW5hbHl0aWNzTmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIFNlY29uZHMgYSB0b29sdGlwIHNob3VsZCBiZSB2aXNpYmxlLiAwIFNwZWNpZmllcyB0aGF0IHRoZXJlIGlzIG5vIHRpbWVvdXQuICovXG4gICAgcHJvdGVjdGVkIF92aXNpYmlsaXR5VGltZW91dFNlY3M6IG51bWJlcjtcblxuICAgIC8qKiBUaW1lIElEIGZvciB0aGUgdmlzaWJpbGl0eSB0aW1lb3V0ICovXG4gICAgcHJvdGVjdGVkIF92aXNpYmlsaXR5VGltZXJJZDogbnVtYmVyO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGxlYXZlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgdG9vbHRpcCBpcyBoaWRkZW4uICovXG4gICAgcHJvdGVjdGVkIF92aXNpYmlsaXR5VGltZW91dENhbGxMZWF2ZUZ1bmN0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqIERlbGF5IGluIG1pbGxpc2Vjb25kcyBmb3Igc2hvd2luZyB0aGUgdG9vbHRpcCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgdGhlIHRhcmdldCByZWdpb24gKi9cbiAgICBwcm90ZWN0ZWQgX2xhc3RTaG93VHM6IG51bWJlcjtcblxuICAgIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgZm9yIHNob3dpbmcgdGhlIHRvb2x0aXAgd2hlbiB0aGUgbW91c2UgZW50ZXJzIHRoZSB0YXJnZXQgcmVnaW9uICovXG4gICAgcHJvdGVjdGVkIF9kZWxheU1TOiBudW1iZXI7XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gcGxhY2UgdGhlIHRvb2x0aXAgKi9cbiAgICBwcm90ZWN0ZWQgX3Rvb2x0aXBQbGFjZW1lbnRGdW5jOiBJVG9vbHRpcFBsYWNlbWVudEZ1bmM7XG5cbiAgICAvKiogRGVmYXVsdCBkZWxheSBmb3Igc2hvd2luZyBhIHRvb2x0aXAgKC41IHNlY29uZCkgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9kZWZhdWx0RGVsYXlNUzogbnVtYmVyID0gNTAwOyAgIC8vIE1pbGxpc2Vjb25kcyB0byBkZWxheSBkaXNwbGF5aW5nIHRvb2x0aXAgKDEgc2VjKVxuXG4gICAgLyoqIENvdW50ZXIgdXNlZCB0byBnZW5lcmF0ZSBhIHVuaXF1ZSB2YWx1ZSBmb3IgZWFjaCB0b29sdGlwICovXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfY291bnRlcjogbnVtYmVyID0gMDtcblxuICAgIC8qKiBGbGFnIHdoZXRoZXIgd2Ugc2hvdWxkIGFsd2F5cyByZWNhbGN1YXRlIHRoZSB0b29sdGlwIHdpZHRoICovXG4gICAgcHJvdGVjdGVkIF9hbHdheXNSZWNhbGNXaWR0aDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgc2hvd24gdG8gdGhlIGxlZnQgb2YgdGhlIG1vdXNlLlxuICAgICAqXG4gICAgICogT25seSB1c2VkIGJ5IF9QbGFjZVRvb2x0aXBMZWZ0UmlnaHRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3Rvb2x0aXBMZWZ0T2ZNb3VzZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE1vdXNlIGVudGVyIGZ1bmN0aW9uIGFwcGxpZWQgdG8gdGhlIHRhcmdldC4gVGhlIG1vdXNlIGVudGVyIGZ1bmN0aW9uXG4gICAgICogaGFuZGxlcyBjYWxsaW5nIGFuIGVudGVyIGZ1bmN0aW9uLCBpZiBvbmUgd2FzIHNwZWNpZmllZCwgYW5kIGRlbGF5aW5nXG4gICAgICogdGhlIGRpc3BsYXkgb2YgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Nb3VzZUVudGVyOiAoZDogYW55KSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogTW91c2UgbGVhdmUgZnVuY3Rpb24gYXBwbGllZCB0byB0aGUgdGFyZ2V0LiBUaGUgbW91c2UgbGVhdmUgZnVuY3Rpb25cbiAgICAgKiBjYW5jZWxzIGFueSBwZW5kaW5nIHRpbWVycywgY2FsbHMgdGhlIGV4aXQgZnVuY3Rpb24sIGlmIG9uZSB3YXNcbiAgICAgKiBzcGVjaWZpZWQsIGFuZCBoaWRlcyB0aGUgdG9vbHRpcC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Nb3VzZUxlYXZlOiAoZDogYW55KSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogTW91c2UgbW92ZSBmdW5jdGlvbiBhcHBsaWVkIHRvIHRoZSB0YXJnZXQuIFRoZSBtb3VzZSBtb3ZlIGZ1bmN0aW9uXG4gICAgICogY2FsbHMgdGhlIG1vdmUgZnVuY3Rpb24sIGlmIG9uZSB3YXMgc3BlY2lmaWVzLCBhbmQgdGhlbiBtb3ZlcyB0aGVcbiAgICAgKiB0b29sdGlwIGRpdiB0byBrZWVwIGluIG5lYXIgdGhlIG1vdXNlIGN1cnNvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Nb3VzZU1vdmU6IChkOiBhbnksIHBvcz86IGFueSkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhdCB0b29sdGlwIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtcyB0b29sdGlwRGl2SWQgLSBUaGUgSUQgZm9yIHRoZSBkaXYgdGhhdCBpcyB0byBiZSBmaWxsZWQgd2l0aCB0aGVcbiAgICAgKiAgIHRvb2x0aXAgaW5mb3JtYXRpb24uXG4gICAgICogQHBhcmFtIHRvb2x0aXBTdHlsZSAtICBjc3MgY2xhc3MgdGhhdCBkZXNjcmliZXMgdG9vbHRpcCBmb3JtYXQuICBEZWZhdWx0c1xuICAgICAqICAgdG8gdG9vbHRpcC10LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHRvb2x0aXBEaXZJZDogc3RyaW5nLCB0b29sdGlwU3R5bGU6IHN0cmluZyA9ICd0b29sdGlwLXQnKSB7XG5cbiAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0b29sdGlwRGl2SWQpKSB7XG4gICAgICAgICAgICB0aGlzLl90b29sdGlwRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLl90b29sdGlwRGl2LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGhpcy5fdG9vbHRpcERpdi5pZCA9IHRvb2x0aXBEaXZJZDtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKVxuICAgICAgICAgICAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl90b29sdGlwRGl2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZGl2IElEIGhhcyB0aGUgbGVhZGluZyAnIycgd2UgbmVlZCBmb3Igc2VsZWN0aW5nXG4gICAgICAgICAgICAvLyBhIERPTSBvYmplY3QgYnkgaWQuXG4gICAgICAgICAgICBsZXQgaWQgPSB0b29sdGlwRGl2SWQ7XG4gICAgICAgICAgICBpZiAoJyMnICE9PSB0b29sdGlwRGl2SWQuY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgaWQgPSAnIycgKyB0b29sdGlwRGl2SWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Rvb2x0aXBEaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlkKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgICAgdGhpcy5fYW5hbHl0aWNzTmFtZSA9ICcnO1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5VGltZW91dFNlY3MgPSAwO1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5VGltZW91dENhbGxMZWF2ZUZ1bmN0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGVsYXlNUyA9IEJhc2VUb29sdGlwLl9kZWZhdWx0RGVsYXlNUztcbiAgICAgICAgdGhpcy5fdG9vbHRpcFBsYWNlbWVudEZ1bmMgPSB0aGlzLmRlZmF1bHRUb29sdGlwUGxhY2VtZW50O1xuICAgICAgICB0aGlzLl9hbHdheXNSZWNhbGNXaWR0aCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90b29sdGlwTGVmdE9mTW91c2UgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sYXN0U2hvd1RzID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBEZWJ1Z2dpbmcgYWlkXG4gICAgICAgIHRoaXMuX2NvdW50ZXIgPSBCYXNlVG9vbHRpcC5fY291bnRlcjtcbiAgICAgICAgQmFzZVRvb2x0aXAuX2NvdW50ZXIrKztcblxuICAgICAgICB0aGlzLl9oaWRlID0gJ25vbmUnOyAgICAvLyBWYWx1ZSBkaXNwbGF5IHByb3BlcnR5IHdpbGwgYmUgc2V0IHRvXG5cbiAgICAgICAgLy8gVXNlIHRoZSBkZWZhdWx0IG9mZnNldHNcbiAgICAgICAgdGhpcy5fdG9vbHRpcE9mZnNldCA9IDA7XG5cbiAgICAgICAgLy8gTm90ZSB0aGF0IHdlJ2xsIG5lZWQgdG8gZ2V0IHRoZSB0b29sdGlwIHNpemUgb24gdGhlIGZpcnN0IG1vdmVcbiAgICAgICAgdGhpcy5fdG9vbHRpcEhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMuX3dpbmRvd1dpZHRoID0gMDtcbiAgICAgICAgdGhpcy5fd2luZG93SGVpZ2h0ID0gMDtcblxuICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGl2IGhhcyB0aGUgdG9vbHRpcC10IGNsYXNzXG4gICAgICAgIHRoaXMuX3Rvb2x0aXBEaXYuY2xhc3NMaXN0LmFkZCh0b29sdGlwU3R5bGUpO1xuXG4gICAgICAgIC8vIERlZmF1bHQgdG9vbHRpcCB0ZXh0dXJlcyAobnVsbCB2YWx1ZSByZXN1bHRzIGluIGNzcyB0byBiZSB1c2VkKVxuICAgICAgICB0aGlzLl90b29sdGlwQmFja2dyb3VuZENvbG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdG9vbHRpcEZvbnRDb2xvciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBGb250VHlwZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBGb250U2l6ZSA9IG51bGw7XG5cbiAgICAgICAgLy8gUHV0ICd0aGlzJyBpbnRvIGEgdmFyaWFibGUgdGhhdCB3aWxsIGJlIHZpc2libGUgaW4gdGhlIE1vdXNlXG4gICAgICAgIC8vIGNhbGxiYWNrcyB3aGljaCB3aWxsIGhhdmUgdGhlIGVudGl0eSBiZWluZyBlbnRlcmVkIGFzIHRoZWlyICd0aGlzJ1xuICAgICAgICBsZXQgc2VsZjogQmFzZVRvb2x0aXAgPSB0aGlzO1xuXG4gICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBjYWxsYmFjaywgJ3RoaXMnIHdpbGwgYmUgdGhlIHNlbGVjdGVkIG9iamVjdCB0aGF0XG4gICAgICAgIC8vIHRoZSBtb3VzZSBoYXMganVzdCBlbnRlcmVkXG4gICAgICAgIHRoaXMub25Nb3VzZUVudGVyID0gZnVuY3Rpb24gKGQ6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyB0b29sdGlwIGlzIGRpc2FibGVkLCB3ZSdyZSBkb25lXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gX2VudGVyZnVuYywgY2FsbCBpdC4gSWYgaXQgcmV0dXJuc1xuICAgICAgICAgICAgLy8gZmFsc2UsIHRoZXJlJ3MgYmVlbiBhIGZhaWx1cmVcbiAgICAgICAgICAgIGlmICh1bmRlZmluZWQgIT09IHNlbGYuX2VudGVyZnVuYykge1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5fZW50ZXJmdW5jLmNhbGwodGhpcywgZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5vbk1vdXNlTGVhdmUuY2FsbCh0aGlzLCBkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGVsYXkgbWFraW5nIHRoZSB0b29sdGlwIHZpc2libGVcbiAgICAgICAgICAgIHNlbGYuZGlzcGxheVRvb2x0aXAoc2VsZi5fZGVsYXlNUyk7XG5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSdsbCBuZWVkIHRvIGdldCB0aGUgdG9vbHRpcCBzaXplIG9uIHRoZSBmaXJzdCBtb3ZlXG4gICAgICAgICAgICBzZWxmLl90b29sdGlwSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIHNlbGYuX3Rvb2x0aXBXaWR0aCA9IDA7XG4gICAgICAgICAgICBzZWxmLl93aW5kb3dXaWR0aCA9IDA7XG4gICAgICAgICAgICBzZWxmLl93aW5kb3dIZWlnaHQgPSAwO1xuICAgICAgICB9OyAgIC8vIG9uTW91c2VFbnRlclxuXG4gICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBjYWxsYmFjaywgJ3RoaXMnIHdpbGwgYmUgdGhlIHNlbGVjdGVkIG9iamVjdCB0aGF0XG4gICAgICAgIC8vIHRoZSBtb3VzZSBoYXMganVzdCBlbnRlcmVkXG4gICAgICAgIHRoaXMub25Nb3VzZUxlYXZlID0gZnVuY3Rpb24gKGQ6IGFueSk6IHZvaWQge1xuXG4gICAgICAgICAgICAvLyBDYW5jZWwgdGhlIHRpbWVyLCBpZiBpdCBoYXNuJ3QgZ29uZSBvZmYgeWV0XG4gICAgICAgICAgICBpZiAodW5kZWZpbmVkICE9IHNlbGYuX3RpbWVySWQpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNlbGYuX3RpbWVySWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5fdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCAhPSBzZWxmLl92aXNpYmlsaXR5VGltZXJJZCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoc2VsZi5fdmlzaWJpbGl0eVRpbWVySWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgYW4gZXhpdCBmdW5jdGlvbiwgY2FsbCBpdCwgdW5sZXNzIHdlJ3JlIGhpZGluZyB0aGVcbiAgICAgICAgICAgIC8vIHRvb2x0aXAgYWZ0ZXIgYSB2aXNpYmlsaXR5IHRpbWVvdXQgYW5kIHdlJ3ZlIGJlZW4gdG9sZCBub3QgdG8uXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHJlYWxseSB1Z2x5LiBXZSdyZSBkZXBlbmRpbmcgb24gdGhlIGZhY3QgdGhhdCB0aGVcbiAgICAgICAgICAgIC8vIHRpbWVvdXQgaXMgY2FsbGluZyB1cyB3aXRoIGEgbnVsbCBldmVudC5cbiAgICAgICAgICAgIGlmICh1bmRlZmluZWQgIT09IHNlbGYuX2xlYXZlZnVuYykge1xuICAgICAgICAgICAgICAgIGxldCBjYWxsTGVhdmVGdW5jdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbExlYXZlRnVuY3Rpb24gPSBzZWxmLl92aXNpYmlsaXR5VGltZW91dENhbGxMZWF2ZUZ1bmN0aW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjYWxsTGVhdmVGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9sZWF2ZWZ1bmMuY2FsbCh0aGlzLCBkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEhpZGUgdGhlIHRvb2x0aXAgZGl2XG4gICAgICAgICAgICBzZWxmLmhpZGVUb29sdGlwKCk7XG4gICAgICAgIH07ICAgLy8gTW91c2VMZWF2ZVxuXG4gICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBjYWxsYmFjaywgJ3RoaXMnIHdpbGwgYmUgdGhlIHNlbGVjdGVkIG9iamVjdCB0aGF0XG4gICAgICAgIC8vIHRoZSBtb3VzZSBoYXMganVzdCBlbnRlcmVkXG4gICAgICAgIHRoaXMub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZDogYW55LCBwb3M6IGFueSk6IHZvaWQge1xuXG4gICAgICAgICAgICAvLyBJZiB0aGlzIHRvb2x0aXAgaXMgZGlzYWJsZWQsIHdlJ3JlIGRvbmVcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UndmUgZ290IGEgbW92ZSBmdW5jdGlvbiwgY2FsbCBpdFxuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCAhPT0gc2VsZi5fbW92ZWZ1bmMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9tb3ZlZnVuYy5jYWxsKHRoaXMsIGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCwgZ2V0IHRoZSB3aWR0aCAmIGhlaWdodCBvZiB0aGUgdG9vbHRpcCwgaW5jbHVkaW5nXG4gICAgICAgICAgICAvLyB0aGUgbWFyZ2luc1xuICAgICAgICAgICAgaWYgKHNlbGYuX2Fsd2F5c1JlY2FsY1dpZHRoIHx8ICgwID09PSBzZWxmLl90b29sdGlwV2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fdG9vbHRpcFdpZHRoID0gc2VsZi5fdG9vbHRpcERpdi5vZmZzZXRXaWR0aDtcblxuICAgICAgICAgICAgICAgIGxldCBvdXRlcldpZHRoID0gc2VsZi5fdG9vbHRpcERpdi5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICBsZXQgdG9wID0gcGFyc2VJbnQoc2VsZi5fdG9vbHRpcERpdi5zdHlsZS5tYXJnaW5Ub3ApO1xuICAgICAgICAgICAgICAgIGxldCBib3R0b20gPSBwYXJzZUludChzZWxmLl90b29sdGlwRGl2LnN0eWxlLm1hcmdpbkJvdHRvbSk7XG4gICAgICAgICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRlcldpZHRoICs9IHRvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRlcldpZHRoICs9IGJvdHRvbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5fdG9vbHRpcEhlaWdodCA9IG91dGVyV2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0LCBnZXQgdGhlIHdpZHRoICYgaGVpZ2h0IG9mIHRoZSB3aW5kb3dcbiAgICAgICAgICAgIGlmICgwID09IHNlbGYuX3dpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSB3aW5kb3cncyBpbm5lciB3aWR0aCwgd2hpY2ggZG9lc24ndCBpbmNsdWRlIHNjcm9sbGJhcnMgb3JcbiAgICAgICAgICAgICAgICAvLyBvciB0aGUgbGlrZS4gQWxsb3cgYSBsaXR0bGUgZnVkZ2UsIGp1c3QgdG8gYmUgc2FmZVxuICAgICAgICAgICAgICAgIHNlbGYuX3dpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAvLyBBbmQgdGhlIHdpbmRvdydzIGlubmVyIGhlaWdodFxuICAgICAgICAgICAgICAgIHNlbGYuX3dpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwb3MgfHwgIXBvcy5jbGllbnRZKSB7XG4gICAgICAgICAgICAgICAgcG9zID0gZDMuZXZlbnQuY2xpZW50WSA/IGQzLmV2ZW50IDogZDMuZXZlbnQuc291cmNlRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl90b29sdGlwUGxhY2VtZW50RnVuYyhwb3MpO1xuICAgICAgICB9OyAgIC8vIE1vdXNlTW92ZVxuXG4gICAgfSAgIC8vIGNvbnN0cnVjdG9yXG5cbiAgICBwcm90ZWN0ZWQgYWRqdXN0VmVydGljYWxQb3NpdGlvbih0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXIpIHtcbiAgICAgICAgLy8gTm93IHNldCB0aGUgdG9wIGVkZ2VcbiAgICAgICAgdG9wIC09IHRoaXMuX3Rvb2x0aXBIZWlnaHQgLyAyO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3Qgb2ZmIHRoZSB0b3Agb2YgdGhlIHdpbmRvd1xuICAgICAgICBpZiAodG9wIDwgd2luZG93LnBhZ2VZT2Zmc2V0KSB7XG4gICAgICAgICAgICB0b3AgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgd2UncmUgbm90IG9mZiB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3dcbiAgICAgICAgYm90dG9tID0gdG9wICsgdGhpcy5fdG9vbHRpcEhlaWdodDtcbiAgICAgICAgaWYgKGJvdHRvbSA+ICh0aGlzLl93aW5kb3dIZWlnaHQgKyB3aW5kb3cucGFnZVlPZmZzZXQpKSB7XG4gICAgICAgICAgICB0b3AgLT0gYm90dG9tIC0gKHRoaXMuX3dpbmRvd0hlaWdodCArIHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9wIDwgMCkge1xuICAgICAgICAgICAgdG9wID0gMDtcbiAgICAgICAgICAgIC8vIFRISVMgQ0FVU0VTIFRPT0xUSVAgVE8gTk9UIFJFU0laRSBSSUdIVCBJRiBJVCBHRVRTIFRPTyBCSUcuLi5cbiAgICAgICAgICAgIC8vIE5FRUQgVE8gVVBEQVRFIExPR0lDIFRIQVQgR0VUUyBUT09MVElQIEhFSUdIVCBBTkQgVEhFTiBDT01NRU5UXG4gICAgICAgICAgICAvLyBUSElTIEJBQ0sgSU5cbiAgICAgICAgICAgIC8vIGhlaWdodCBvZiB0b29sdGlwIG1pbnV4IDMwIGZvciBzY3JvbGxiYXJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLl90b29sdGlwSGVpZ2h0ID4gdGhpcy5fd2luZG93SGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fdG9vbHRpcERpdi5zdHlsZS5oZWlnaHQgPVxuICAgICAgICAgICAgLy8gICAgICAgICBNYXRoLm1pbih0aGlzLl90b29sdGlwSGVpZ2h0LCB0aGlzLl93aW5kb3dIZWlnaHQpIC0gMzAgKyAncHgnO1xuICAgICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl90b29sdGlwRGl2LnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdGhlIHRvb2x0aXAgZGl2IHBvc2l0aW9uLlxuICAgICAgICB0aGlzLl90b29sdGlwRGl2LnN0eWxlLnRvcCA9IHRvcCArICdweCc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvb2x0aXAgcGxhY2VtZW50IHJvdXRpbmUgdG8gcGxhY2UgdGhlIHRvb2x0aXAgdG8gdGhlIGxlZnQgb2ZcbiAgICAgKiB0aGUgbW91c2UuIERlc2lnbmVkIHRvIGJlIHVzZWQgZm9yIHRoZSBjaGFydCB2YWx1ZSB0b29sdGlwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwbGFjZVRvb2x0aXBMZWZ0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLy8gU3RhcnQgYnkgdHJ5aW5nIHRvIHB1dCB0aGUgdG9vbHRpcCBhYm92ZSBvciBiZWxvdyB0aGUgcG9pbnRlclxuICAgICAgICBsZXQgdG9wOiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCByaWdodDogbnVtYmVyLCBsZWZ0OiBudW1iZXI7XG5cbiAgICAgICAgLy8gQ2FzdCB0aGUgZXZlbnQgdGhlIG1vdXNlIGV2ZW50IHdlIGtub3cgdGhhdCBpdCBpcy4gQWZ0ZXIgYWxsLFxuICAgICAgICAvLyB0aGlzIGlzIHRoZSBNb3VzZU1vdmUgY2FsbGJhY2shXG4gICAgICAgIHRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCArIGV2ZW50LmNsaWVudFk7XG4gICAgICAgIGxlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgKyBldmVudC5jbGllbnRYO1xuXG4gICAgICAgIC8vIFB1dCB0aGUgdG9vbHRpcCBpbiB0aGUgbGVmdCBoYWxmIG9mIHRoZSB3aW5kb3cuIFRoZSAxMCBpc1xuICAgICAgICAvLyBhbiBvZmZzZXQgdG8gYWxsb3cgc29tZSBzcGFjZSBiZXR3ZWVuIHRoZSB0b29sdGlwIGFuZCB0aGVcbiAgICAgICAgLy8gcG9pbnRlclxuICAgICAgICBsZWZ0IC09IHRoaXMuX3Rvb2x0aXBXaWR0aCArIDEwO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdG9vbHRpcCBpc24ndCBvZmYgdGhlIGxlZnQgZWRnZVxuICAgICAgICBpZiAobGVmdCA8IHdpbmRvdy5wYWdlWE9mZnNldCkge1xuICAgICAgICAgICAgbGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90b29sdGlwRGl2LnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcblxuICAgICAgICB0aGlzLmFkanVzdFZlcnRpY2FsUG9zaXRpb24odG9wLCBib3R0b20pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvb2x0aXAgcGxhY2VtZW50IHJvdXRpbmUgdG8gcGxhY2UgdGhlIHRvb2x0aXAgdG8gdGhlIHJpZ2h0IG9yIGxlZnQgb2ZcbiAgICAgKiB0aGUgbW91c2UuIERlc2lnbmVkIHRvIGJlIHVzZWQgZm9yIHRoZSBjaGFydCB2YWx1ZSB0b29sdGlwLlxuICAgICAqXG4gICAgICogVGhlIHBsYWNlbWVudCAobGVmdCBvciByaWdodCBvZiB0aGUgbW91c2UpIGlzIGNoYW5nZWQgaWYgdGhlIG1vdXNlIGlzXG4gICAgICogaW4gdGhlIGxlZnQgb3IgcmlnaHQgdGhpcmQgb2YgdGhlIHdpbmRvdy4gUGxhY2VtZW50IGlzIGxlZnQgYWxvbmUgaW5cbiAgICAgKiB0aGUgbWlkZGxlIHRoaXJkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwbGFjZVRvb2x0aXBMZWZ0UmlnaHQoZXZlbnQ6IGFueSkge1xuICAgICAgICAvLyBTdGFydCBieSB0cnlpbmcgdG8gcHV0IHRoZSB0b29sdGlwIGFib3ZlIG9yIGJlbG93IHRoZSBwb2ludGVyXG4gICAgICAgIGxldCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGxlZnQ6IG51bWJlcjtcblxuICAgICAgICAvLyBDYXN0IHRoZSBldmVudCB0aGUgbW91c2UgZXZlbnQgd2Uga25vdyB0aGF0IGl0IGlzLiBBZnRlciBhbGwsXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIE1vdXNlTW92ZSBjYWxsYmFjayFcbiAgICAgICAgdG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0ICsgZXZlbnQuY2xpZW50WTtcbiAgICAgICAgbGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCArIGV2ZW50LmNsaWVudFg7XG5cbiAgICAgICAgLy8gSWYgdGhlIG1vdXNlIGlzIGluIHRoZSBsZWZ0IHRoaXJkIG9mIHRoZSBzY3JlZW4sIHNob3cgdGhlIHRvb2x0aXBcbiAgICAgICAgLy8gdG8gdGhlIHJpZ2h0IG9mIHRoZSBtb3VzZS4gSWYgdGhlIG1vdXNlIGlzIGluIHRoZSByaWdodCB0aGlyZCBvZlxuICAgICAgICAvLyB0aGUgc2NyZWVuLCBzaG93IHRoZSB0b29sdGlwIHRvIHRoZSBsZWZ0IG9mIHRoZSBtb3VzZS4gT3RoZXJ3aXNlLFxuICAgICAgICAvLyBqdXN0IGtlZXAgdGhlIGV4aXN0aW5nIHBsYWNlbWVudFxuICAgICAgICBpZiAobGVmdCA8IHRoaXMuX3dpbmRvd1dpZHRoIC8gMykge1xuICAgICAgICAgICAgdGhpcy5fdG9vbHRpcExlZnRPZk1vdXNlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGVmdCA+IDIgKiAodGhpcy5fd2luZG93V2lkdGggLyAzKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9vbHRpcExlZnRPZk1vdXNlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl90b29sdGlwTGVmdE9mTW91c2UpIHtcbiAgICAgICAgICAgIC8vIFB1dCB0aGUgdG9vbHRpcCBpbiB0aGUgbGVmdCBoYWxmIG9mIHRoZSB3aW5kb3cuIFRoZSAxMCBpc1xuICAgICAgICAgICAgLy8gYW4gb2Zmc2V0IHRvIGFsbG93IHNvbWUgc3BhY2UgYmV0d2VlbiB0aGUgdG9vbHRpcCBhbmQgdGhlXG4gICAgICAgICAgICAvLyBwb2ludGVyXG4gICAgICAgICAgICBsZWZ0IC09IHRoaXMuX3Rvb2x0aXBXaWR0aCArIDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVmdCArPSAxMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdG9vbHRpcCBpc24ndCBvZmYgdGhlIGxlZnQgZWRnZVxuICAgICAgICBpZiAobGVmdCA8IHdpbmRvdy5wYWdlWE9mZnNldCkge1xuICAgICAgICAgICAgbGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90b29sdGlwRGl2LnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcblxuICAgICAgICB0aGlzLmFkanVzdFZlcnRpY2FsUG9zaXRpb24odG9wLCBib3R0b20pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgVG9vbHRpcCBwbGFjZW1lbnQgcm91dGluZS4gQXR0ZW1wdHMgdG8gbWFrZSB0aGUgZW50aXJlXG4gICAgICogdG9vbHRpcCB2aXNpYmlsZSB3aXRob3V0IGNvdmVyaW5nIHRoZSBtb3VzZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFRvb2x0aXBQbGFjZW1lbnQoZXZlbnQ6IHtcbiAgICAgICAgeDogbnVtYmVyLCB5OiBudW1iZXIsXG4gICAgICAgIGNsaWVudFk6IG51bWJlciwgY2xpZW50WDogbnVtYmVyXG4gICAgfSkge1xuICAgICAgICAvLyBTdGFydCBieSB0cnlpbmcgdG8gcHV0IHRoZSB0b29sdGlwIGFib3ZlIG9yIGJlbG93IHRoZSBwb2ludGVyXG4gICAgICAgIGxldCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGxlZnQ6IG51bWJlcjtcblxuICAgICAgICAvLyBDYXN0IHRoZSBldmVudCB0aGUgbW91c2UgZXZlbnQgd2Uga25vdyB0aGF0IGl0IGlzLiBBZnRlciBhbGwsXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIE1vdXNlTW92ZSBjYWxsYmFjayFcbiAgICAgICAgdG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0ICsgZXZlbnQuY2xpZW50WTtcbiAgICAgICAgbGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCArIGV2ZW50LmNsaWVudFg7XG5cbiAgICAgICAgLy8gSWYgdGhlIHBvaW50ZXIgaXMgaW4gdGhlIHVwcGVyIGhhbGYgb2YgdGhlIHNjcmVlbiwgdHJ5IHRvIHB1dFxuICAgICAgICAvLyB0aGUgdG9vbHRpcCBiZWxvdyB0aGUgcG9pbnRlclxuICAgICAgICBpZiAoZXZlbnQueSA8ICh0aGlzLl93aW5kb3dIZWlnaHQgLyAyKSkge1xuICAgICAgICAgICAgLy8gUHV0IHRoZSB0b3Agb2YgdGhlIHRvb2x0aXAgYmVsb3cgdGhlIHBvaW50ZXIuIFRoZSAyMCBpcyBhXG4gICAgICAgICAgICAvLyBndWVzcyBmb3IgaG93IG11Y2ggdG8gb2Zmc2V0IHNvIHRoZSB0b29sdGlwIGlzbid0IG9ic2N1cmVkXG4gICAgICAgICAgICAvLyBieSB0aGUgY3Vyc29yLiBVbmZvcnR1bmF0ZWx5IHRoZXJlJ3Mgbm8gQVBJIHRvIHF1ZXJ5IHRoZVxuICAgICAgICAgICAgLy8gY3Vyc29yLCBhbmQgaXQgY2FuIGJlIGFuIGFyYml0cmFyeSBzaGFwZSwgd2l0aCBhbiBhcmJpdGFyeVxuICAgICAgICAgICAgLy8gaG90c3BvdFxuICAgICAgICAgICAgdG9wICs9IDIwICsgdGhpcy5fdG9vbHRpcE9mZnNldDtcbiAgICAgICAgICAgIGJvdHRvbSA9IHRvcCArIHRoaXMuX3Rvb2x0aXBIZWlnaHQ7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYm90dG9tIG9mIHRoZSB0b29sdGlwIGlzIHZpc2libGVcbiAgICAgICAgICAgIGlmIChib3R0b20gPCAodGhpcy5fd2luZG93SGVpZ2h0ICsgd2luZG93LnBhZ2VZT2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdvb2QuIE5vdyBzZXQgdGhlIGxlZnQgZWRnZVxuICAgICAgICAgICAgICAgIGxlZnQgLT0gdGhpcy5fdG9vbHRpcFdpZHRoIC8gMjtcblxuICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3Qgb2ZmIHRoZSBsZWZ0IG9yIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvd1xuICAgICAgICAgICAgICAgIHJpZ2h0ID0gbGVmdCArIHRoaXMuX3Rvb2x0aXBXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAocmlnaHQgPiB0aGlzLl93aW5kb3dXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IHJpZ2h0IC0gdGhpcy5fd2luZG93V2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsZWZ0IDwgd2luZG93LnBhZ2VYT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3Rvb2x0aXBEaXYuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWZXJ0aWNhbFBvc2l0aW9uKHRvcCwgYm90dG9tKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbml0aWFsbHkgZ3Vlc3MgdGhlIHRvb2x0aXAgZ29lcyBhYm92ZSB0aGUgcG9pbnRlci4gVGhlXG4gICAgICAgICAgICAvLyAxMCBnaXZlcyBzb21lIHNwYWNlIGJldHdlZW4gdGhlIHRvb2x0aXAgYW5kIHRoZSBwb2ludGVyXG4gICAgICAgICAgICB0b3AgLT0gdGhpcy5fdG9vbHRpcEhlaWdodCArIDEwICsgdGhpcy5fdG9vbHRpcE9mZnNldDtcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSB0b3Agb2YgdGhlIHRvb2x0aXAgaXMgdmlzaWJsZVxuICAgICAgICAgICAgaWYgKHRvcCA+PSB3aW5kb3cucGFnZVlPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSdyZSBnb29kLiBOb3cgc2V0IHRoZSBsZWZ0IGVkZ2VcbiAgICAgICAgICAgICAgICBsZWZ0IC09IHRoaXMuX3Rvb2x0aXBXaWR0aCAvIDI7XG5cbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UncmUgbm90IG9mZiB0aGUgbGVmdCBvciByaWdodCBlZGdlIG9mIHRoZSB3aW5kb3dcbiAgICAgICAgICAgICAgICByaWdodCA9IGxlZnQgKyB0aGlzLl90b29sdGlwV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKHJpZ2h0ID4gdGhpcy5fd2luZG93V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSByaWdodCAtIHRoaXMuX3dpbmRvd1dpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGVmdCA8IHdpbmRvdy5wYWdlWE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl90b29sdGlwRGl2LnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcblxuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0VmVydGljYWxQb3NpdGlvbih0b3AsIGJvdHRvbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgZ290IGhlcmUsIHB1dHRpbmcgdGhlIHRvb2x0aXAgaW4gdGhlIHVwcGVyIG9yIGxvd2VyIGhhbGZcbiAgICAgICAgLy8gb2YgdGhlIHdpbmRvdyBkaWRuJ3Qgd29yay4gVHJ5IGZvciB0aGUgcmlnaHQgb3IgbGVmdCBoYWxmXG5cbiAgICAgICAgLy8gQ2hvb3NlIHRoZSBsZWZ0IG9yIHJpZ2h0IGhhbGZcbiAgICAgICAgaWYgKGV2ZW50LmNsaWVudFggPiAodGhpcy5fd2luZG93V2lkdGggLyAyKSkge1xuICAgICAgICAgICAgLy8gUHV0IHRoZSB0b29sdGlwIGluIHRoZSBsZWZ0IGhhbGYgb2YgdGhlIHdpbmRvdy4gVGhlIDEwIGlzXG4gICAgICAgICAgICAvLyBhbiBvZmZzZXQgdG8gYWxsb3cgc29tZSBzcGFjZSBiZXR3ZWVuIHRoZSB0b29sdGlwIGFuZCB0aGVcbiAgICAgICAgICAgIC8vIHBvaW50ZXJcbiAgICAgICAgICAgIGxlZnQgLT0gdGhpcy5fdG9vbHRpcFdpZHRoICsgMTA7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdG9vbHRpcCBpc24ndCBvZmYgdGhlIGxlZnQgZWRnZVxuICAgICAgICAgICAgaWYgKGxlZnQgPCB3aW5kb3cucGFnZVhPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVHJ5IHB1dHRpbmcgdGhlIHRvb2x0aXAgaW4gdGhlIHJpZ2h0IGhhbGYgb2YgdGhlIHdpbmRvd1xuICAgICAgICAgICAgLy8gUHV0IHRoZSB0b29sdGlwIGluIHRoZSBsZWZ0IGhhbGYgb2YgdGhlIHdpbmRvdy4gVGhlIDEwIGlzXG4gICAgICAgICAgICAvLyBhbiBvZmZzZXQgdG8gYWxsb3cgc29tZSBzcGFjZSBiZXR3ZWVuIHRoZSB0b29sdGlwIGFuZCB0aGVcbiAgICAgICAgICAgIC8vIHBvaW50ZXJcbiAgICAgICAgICAgIGxlZnQgKz0gMTA7XG4gICAgICAgICAgICByaWdodCA9IGxlZnQgKyB0aGlzLl90b29sdGlwV2lkdGg7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdG9vbHRpcCBpc24ndCBvZmYgdGhlIHJpZ2h0IGVkZ2VcbiAgICAgICAgICAgIGlmIChyaWdodCA+IHRoaXMuX3dpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgbGVmdCAtPSByaWdodCAtIHRoaXMuX3dpbmRvd1dpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSB0b29sdGlwIGRpdiBwb3NpdGlvbi5cbiAgICAgICAgdGhpcy5fdG9vbHRpcERpdi5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7XG5cbiAgICAgICAgdGhpcy5hZGp1c3RWZXJ0aWNhbFBvc2l0aW9uKHRvcCwgYm90dG9tKTtcbiAgICB9ICAgLy8gX0RlZmF1bHRUb29sdGlwUGxhY2VtZW50XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBvZmZzZXQgb2YgdGhlIHRvb2x0aXAgZnJvbSB0aGUgbW91c2UuXG4gICAgICovXG4gICAgcHVibGljIHNldE9mZnNldCh2YWx1ZTogbnVtYmVyKTogQmFzZVRvb2x0aXAge1xuICAgICAgICB0aGlzLl90b29sdGlwT2Zmc2V0ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFbmFibGVkKGVuYWJsZTogYm9vbGVhbik6IEJhc2VUb29sdGlwIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSAhZW5hYmxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlRGlzcGxheVZhbHVlXG4gICAgICpcbiAgICAgKiBUaGUgdmFsdWUgdGhlIENTUyAnZGlzcGxheScgYXR0cmlidXRlIHdpbGwgYmUgc2V0IHRvIHRvIGhpZGUgdGhlXG4gICAgICogdG9vbHRpcC4gVGhpcyBkZWZhdWx0cyB0byAnbm9uZScuICdkaXNwbGF5JyB3aWxsIGJlIHNldCB0byAnYmxvY2snXG4gICAgICogd2hlbiB0aGUgdG9vbHRpcCBpcyB0byBiZSB2aXNpYmxlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRIaWRlRGlzcGxheVZhbHVlKGhpZGU6IHN0cmluZyk6IEJhc2VUb29sdGlwIHtcbiAgICAgICAgdGhpcy5faGlkZSA9IGhpZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgdGFyZ2V0IHJlZ2lvbiwgaW5zdGVhZCBvZiBpbnN0YW50bHkgc2hvd2luZ1xuICAgICAqIHRoZSB0b29sdGlwLCB0aGVyZSdzIGEgc21hbGwgZGVsYXkuIFRoaXMgcHJldmVudHMgdGhlIHRvb2x0aXAgZnJvbVxuICAgICAqIHBvcHBpbmcgdXAgYW5kIGRpc2FwcGVhcmluZyBpZiB0aGUgdXNlciBpcyBqdXN0IG1vdmluZyB0aGUgbW91c2Ugb3ZlclxuICAgICAqIHRoZSB0YXJnZXQgcmVnaW9uIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgaW5mb3JtYXRpb24uIEJ5IGRlZmF1bHQsIHRoZVxuICAgICAqIGRlbGF5IGlzIDEgc2Vjb25kLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1pbGxpc2Vjb25kcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IHNob3dpbmcgdGhlXG4gICAgICogdG9vbHRpcCBhZnRlciB0aGUgbW91c2UgZW50ZXJzIHRoZSB0YXJnZXQgcmVnaW9uLlxuICAgICAqXG4gICAgICogQHJldHVybiAtIFRoZSB0b29sdGlwIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXREZWxheShtaWxsaXNlY29uZHM6IG51bWJlcik6IEJhc2VUb29sdGlwIHtcbiAgICAgICAgdGhpcy5fZGVsYXlNUyA9IG1pbGxpc2Vjb25kcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBsYWNlVG9vbHRpcExlZnQoKTogQmFzZVRvb2x0aXAge1xuICAgICAgICB0aGlzLl90b29sdGlwUGxhY2VtZW50RnVuYyA9IHRoaXMucGxhY2VUb29sdGlwTGVmdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBsYWNlVG9vbHRpcExlZnRSaWdodCgpOiBCYXNlVG9vbHRpcCB7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBQbGFjZW1lbnRGdW5jID0gdGhpcy5wbGFjZVRvb2x0aXBMZWZ0UmlnaHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbGVhc2UgYWxsIHRvb2x0aXAgbGlzdGVuZXJzIG9uIHRoZSB0YXJnZXQuIEZhaWx1cmUgdG8gcmVsZWFzZSB0aGVcbiAgICAgKiBsaXN0ZW5lcnMgY2FuIHByZXZlbnQgdGhlIHRhcmdldCBmcm9tIGJlaW5nIGZyZWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBvYmplY3QgdG8gaGF2ZSBhbnkgdG9vbHRpcCBsaXN0ZW5lcnMgcmVzZXQuXG4gICAgICovXG5cbiAgICBwdWJsaWMgcmVsZWFzZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFyZ2V0cy5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlZW50ZXIudG9vbHRpcCcsIG51bGwpXG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZWxlYXZlLnRvb2x0aXAnLCBudWxsKVxuICAgICAgICAgICAgICAgIC5vbignbW91c2Vtb3ZlLnRvb2x0aXAnLCBudWxsKTtcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5fdGFyZ2V0cyA9IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYSBsaW1pdCBvbiB0aGUgdGltZSBhIHRvb2x0aXAgaXMgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWNvbmRzIC0gU2Vjb25kcyB0aGUgdG9vbHRpcCBzaG91bGQgYmUgdmlzaWJsZVxuICAgICAqIEBwYXJhbSBjYWxsTGVhdmVGdW5jdGlvbk9uVGltZW91dCAtIFRydWUgaWYgdGhlIGxlYXZlIGZ1bmN0aW9uIHNob3VsZFxuICAgICAqICBiZSBjYWxsZWQgd2hlbiB0aGUgdGltZW91dCBvY2N1cnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIC0gVGhlIHRvb2x0aXAgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHNldFZpc2liaWxpdHlUaW1lb3V0KHNlY29uZHM6IG51bWJlcixcbiAgICAgICAgY2FsbExlYXZlRnVuY3Rpb25PblRpbWVvdXQ6IGJvb2xlYW4gPSB0cnVlKTogQmFzZVRvb2x0aXAge1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5VGltZW91dFNlY3MgPSBzZWNvbmRzO1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5VGltZW91dENhbGxMZWF2ZUZ1bmN0aW9uID0gY2FsbExlYXZlRnVuY3Rpb25PblRpbWVvdXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB3aGV0aGVyIHRvIHJlY2FsY3VsYXRlIHRoZSB0b29sdGlwIHdpZHRoIGV2ZXJ5IHRpbWUgdGhlIGN1cnNvciBtb3Zlcy5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGZhbHNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBXaGV0aGVyIHRvIHJlY2FsY3VsYXRlIHRoZSB0b29sdGlwIHdpZHRoIGV2ZXJ5IHRpbWUgdGhlXG4gICAgICogICBjdXJzb3IgbW92ZXMuXG4gICAgICovXG4gICAgcHVibGljIGFsd2F5c1JlY2FsY1dpZHRoKHZhbHVlOiBib29sZWFuKTogQmFzZVRvb2x0aXAge1xuICAgICAgICB0aGlzLl9hbHdheXNSZWNhbGNXaWR0aCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0b29sdGlwIGJhY2tncm91bmQgY29sb3IuIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGlzIGFwcGxpZWQgdG9cbiAgICAgKiB0aGUgdG9vbHRpcCBkaXYgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBjb2xvciBlbmNvZGluZywgZm9yIGV4YW1wbGUgJyMwMDAwMDAnXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyAtIFRoZSB0b29sdGlwIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IEJhc2VUb29sdGlwIHtcbiAgICAgICAgdGhpcy5fdG9vbHRpcEJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgICAgICAodGhpcy5fdG9vbHRpcERpdi5zdHlsZSBhcyBhbnkpWydiYWNrZ3JvdW5kLWNvbG9yJ10gPVxuICAgICAgICAgICAgdGhpcy5fdG9vbHRpcEJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBPdmVycmlkZSB0b29sdGlwIGZvbnQgY29sb3IuICBUaGUgZm9udCBjb2xvciBpcyBhcHBsaWVkIHRvXG4gICAgKiB0aGUgdG9vbHRpcCBkaXYgaW1tZWRpYXRlbHkuXG4gICAgKlxuICAgICogQHBhcmFtIHZhbHVlIC0gY29sb3IgZW5jb2RpbmcsIGZvciBleGFtcGxlICcjMDAwMDAwJ1xuICAgICpcbiAgICAqIEByZXR1cm5zIC0gVGhlIHRvb2x0aXAgaW5zdGFuY2UuXG4gICAgKi9cbiAgICBwdWJsaWMgc2V0Rm9udENvbG9yKGNvbG9yOiBzdHJpbmcpOiBCYXNlVG9vbHRpcCB7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBGb250Q29sb3IgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5fdG9vbHRpcERpdi5zdHlsZS5jb2xvciA9IHRoaXMuX3Rvb2x0aXBGb250Q29sb3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRvb2x0aXAgZm9udCB0eXBlLiBUaGUgZm9udCBmYW1pbHkgaXMgYXBwbGllZCB0b1xuICAgICAqIHRoZSB0b29sdGlwIGRpdiBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIHN0cmluZywgZm9yIGV4YW1wbGUgJ1NlZ29lIFVJJ1xuICAgICAqXG4gICAgICogQHJldHVybnMgLSBUaGUgdG9vbHRpcCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Rm9udFR5cGUoZm9udDogc3RyaW5nKTogQmFzZVRvb2x0aXAge1xuICAgICAgICB0aGlzLl90b29sdGlwRm9udFR5cGUgPSBmb250O1xuICAgICAgICB0aGlzLl90b29sdGlwRGl2LnN0eWxlLmZvbnQgPSB0aGlzLl90b29sdGlwRm9udFR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRvb2x0aXAgZm9udCBzaXplLiBUaGUgZm9udCBzaXplIGlzIGFwcGxpZWQgdG9cbiAgICAgKiB0aGUgdG9vbHRpcCBkaXYgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBmb250IHNpemUgaW4gcGl4ZWxzLCBmb3IgZXhhbXBsZSAnOHB4J1xuICAgICAqXG4gICAgICogQHJldHVybnMgLSBUaGUgdG9vbHRpcCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Rm9udFNpemUoc2l6ZTogc3RyaW5nKTogQmFzZVRvb2x0aXAge1xuICAgICAgICB0aGlzLl90b29sdGlwRm9udFNpemUgPSBzaXplO1xuICAgICAgICB0aGlzLl90b29sdGlwRGl2LnN0eWxlLmZvbnQgPSB0aGlzLl90b29sdGlwRm9udFNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gICAvLyBGb250U2l6ZVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBhbmFseXRpY3MgbmFtZSBmb3IgdGhlIHRvb2x0aXAuIE5vdCBjdXJyZW50bHkgdXNlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhbmFseXRpY3MgbmFtZSB0byByZXBvcnQgd2hlbiB0aGlzIHRvb2x0aXAgaXMgc2hvd25cbiAgICAgKiAgIG9yIGhpZGRlbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIC0gVGhlIHRvb2x0aXAgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHNldEFuYWx5dGljc05hbWUodmFsdWU6IHN0cmluZyk6IEJhc2VUb29sdGlwIHtcbiAgICAgICAgdGhpcy5fYW5hbHl0aWNzTmFtZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9ICAgLy8gQW5hbHl0aWNzTmFtZVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBDU1MgY2xhc3MgZm9yIHRoZSB0b29sdGlwLiBUaGUgY2xhc3MgaXMgYXBwbGllZCBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjc3NDbGFzcyAtIFRoZSBDU1MgY2xhc3MoZXMpIHRvIGFwcGx5IHRvIHRoaXMgdG9vbHRpcC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIC0gVGhlIHRvb2x0aXAgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHNldENzc0NsYXNzKGNzc0NsYXNzOiBzdHJpbmcpOiBCYXNlVG9vbHRpcCB7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBEaXYuY2xhc3NMaXN0LmFkZChjc3NDbGFzcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gICAvLyBDc3NDbGFzc1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB0YXJnZXQgZm9yIHRoZSB0b29sdGlwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHNlbGVjdGlvbiBvZiBET00gb2JqZWN0cyB0aGF0IHNob3VsZCBjYXVzZSB0aGVcbiAgICAgKiAgIHRvb2x0aXAgdG8gYXBwZWFyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgLSBUaGUgdG9vbHRpcCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0VGFyZ2V0KHRhcmdldDogYW55KTogQmFzZVRvb2x0aXAge1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlZW50ZXIudG9vbHRpcCcsIHRoaXMub25Nb3VzZUVudGVyKVxuICAgICAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZS50b29sdGlwJywgdGhpcy5vbk1vdXNlTGVhdmUpXG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZW1vdmUudG9vbHRpcCcsIHRoaXMub25Nb3VzZU1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fdGFyZ2V0cy5wdXNoKHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAgIC8vIFRhcmdldFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgaW50byB0aGUgdGFyZ2V0XG4gICAgICogRE9NIG9iamVjdChzKVxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGVyZnVuYyAtIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgaW50b1xuICAgICAqICAgdGhlIHRhcmdldCBET00gb2JqZWN0LiBJZiB0aGUgdG9vbHRpcCB3aWxsIG9ubHkgYmUgc2hvd24gaWYgdGhlXG4gICAgICogICBlbnRlcmZ1bmMgcmV0dXJucyB0cnVlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgLSBUaGUgdG9vbHRpcCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RW50ZXJDYWxsYmFjayhlbnRlcmZ1bmM6IElUb29sdGlwQ2FsbGJhY2spOiBCYXNlVG9vbHRpcCB7XG4gICAgICAgIHRoaXMuX2VudGVyZnVuYyA9IGVudGVyZnVuYztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAgIC8vIEVudGVyRnVuY1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgb2ZmIG9mIHRoZSB0YXJnZXRcbiAgICAgKiBET00gb2JqZWN0KHMpXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGVhdmVmdW5jIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBvZmYgb2ZcbiAgICAgKiAgIHRoZSB0YXJnZXQgRE9NIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIC0gVGhlIHRvb2x0aXAgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHNldExlYXZlQ2FsbGJhY2sobGVhdmVmdW5jOiBJVG9vbHRpcENhbGxiYWNrKTogQmFzZVRvb2x0aXAge1xuICAgICAgICB0aGlzLl9sZWF2ZWZ1bmMgPSBsZWF2ZWZ1bmM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gICAvLyBMZWF2ZUZ1bmNcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIHdoaWxlIGl0IGlzIG9uIHRoZVxuICAgICAqIHRhcmdldCBET00gb2JqZWN0KHMpXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW92ZWZ1bmMgLSBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIHdoaWxlXG4gICAgICogICBpdCBpcyBvbiB0aGUgdGFyZ2V0IERPTSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyAtIFRoZSB0b29sdGlwIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRNb3ZlQ2FsbGJhY2sobW92ZUZ1bmM6IElUb29sdGlwQ2FsbGJhY2spOiBCYXNlVG9vbHRpcCB7XG4gICAgICAgIHRoaXMuX21vdmVmdW5jID0gbW92ZUZ1bmM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gICAvLyBNb3ZlRnVuY1xuXG4gICAgLyoqXG4gICAgICogRGlzcGxheSB0aGUgdG9vbHRpcCBkaXYgYWZ0ZXIgYSBkZWxheVxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGF5TVMgLSBtaWxsaXNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIHNob3dpbmcgdGhlIHRvb2x0aXBcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIC0gVGhlIHRvb2x0aXAgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGRpc3BsYXlUb29sdGlwKGRlbGF5TVM6IG51bWJlcik6IEJhc2VUb29sdGlwIHtcblxuICAgICAgICAvLyBJZiB0b29sdGlwcyBhcmUgZGlzYWJsZWQsIGRvbid0IGRvIGFueXRoaW5nXG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIHRoaXMgZm9yIGNhbGxiYWNrc1xuICAgICAgICBsZXQgc2VsZjogQmFzZVRvb2x0aXAgPSB0aGlzO1xuXG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZGVsYXkgZGlzcGxheSB0aGUgdG9vbHRpcCBub3dcbiAgICAgICAgaWYgKDAgPT09IGRlbGF5TVMpIHtcbiAgICAgICAgICAgIGRpc3BsYXlUb29sdGlwTm93KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBhIHRpbWVyIHJ1bm5pbmcsIGRvbid0IHN0YXJ0IGFub3RoZXJcbiAgICAgICAgaWYgKHVuZGVmaW5lZCAhPT0gdGhpcy5fdGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaXNwbGF5IHRoZSB0b29sdGlwICdpbiBhIGJpdCdcbiAgICAgICAgdGhpcy5fdGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGRpc3BsYXlUb29sdGlwTm93LCBkZWxheU1TKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICAvLyBNYWtlIHRoZSB0b29sdGlwIGRpdiB2aXNpYmxlXG4gICAgICAgIGZ1bmN0aW9uIGRpc3BsYXlUb29sdGlwTm93KCk6IHZvaWQge1xuXG4gICAgICAgICAgICAvLyBJZiB0b29sdGlwcyBhcmUgZGlzcGFibGVkLCBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAgICAgaWYgKHNlbGYuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNwbGF5IHRoZSB0b29sdGlwXG4gICAgICAgICAgICBzZWxmLl90b29sdGlwRGl2LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgdG9vbHRpcCBpcyBzdXBwb3NlZCB0byAnc2VsZiBoaWRlJywgc3RhcnQgYSB0aW1lclxuICAgICAgICAgICAgaWYgKHNlbGYuX3Zpc2liaWxpdHlUaW1lb3V0U2VjcyA+IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLl92aXNpYmlsaXR5VGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGhpZGVUb29sdGlwLCBzZWxmLl92aXNpYmlsaXR5VGltZW91dFNlY3MgKiAxMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRnVuY3Rpb24gdG8gaGlkZSB0aGUgdG9vbHRpcFxuICAgICAgICAgICAgZnVuY3Rpb24gaGlkZVRvb2x0aXAoKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgc2VsZi5vbk1vdXNlTGVhdmUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gICAvLyBmdW5jdGlvbiBEaXNwbGF5VG9vbHRpcE5vd1xuXG4gICAgfSAgIC8vIF9EaXNwbGF5VG9vbHRpcFxuXG4gICAgLyoqXG4gICAgICogSGlkZSB0aGUgdG9vbHRpcCBkaXZcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIC0gVGhlIHRvb2x0aXAgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGhpZGVUb29sdGlwKCk6IEJhc2VUb29sdGlwIHtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBhIGRlbGF5ZWQgZGlzcGxheSBwZW5kaW5nLCBjYW5jZWwgaXRcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySWQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNldCB0aGUgdGltZXJpZCBzbyB3ZSBjYW4gZGlzcGxheSB0aGUgdG9vbHRpcCBuZXh0IHRpbWVcbiAgICAgICAgdGhpcy5fdGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fdG9vbHRpcERpdi5zdHlsZS5kaXNwbGF5ID0gdGhpcy5faGlkZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9ICAgLy8gX0hpZGVUb29sdGlwXG59ICAgLy8gY2xhc3MgVG9vbHRpcFxuXG5leHBvcnQgY2xhc3MgT25lTGluZVRvb2x0aXAgZXh0ZW5kcyBCYXNlVG9vbHRpcCB7XG4gICAgcHJvdGVjdGVkIF90aXRsZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodG9vbHRpcERpdklkOiBzdHJpbmcsIHRvb2x0aXBTdHlsZTogc3RyaW5nID0gJ3Rvb2x0aXAtdCcpIHtcbiAgICAgICAgc3VwZXIodG9vbHRpcERpdklkLCB0b29sdGlwU3R5bGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0RGF0YSh0aXRsZTogc3RyaW5nLCBkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgYWxyZWFkeSBleGlzdHMsIHJlbW92ZSBhbnkgY2hpbGRyZW5cbiAgICAgICAgd2hpbGUgKHRoaXMuX3Rvb2x0aXBEaXYuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICB0aGlzLl90b29sdGlwRGl2LnJlbW92ZUNoaWxkKHRoaXMuX3Rvb2x0aXBEaXYubGFzdENoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG5cbiAgICAgICAgbGV0IHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcbiAgICAgICAgdGFibGUuY2xhc3NMaXN0LmFkZCgndG9vbHRpcC10YWJsZScpO1xuXG4gICAgICAgIHRoaXMuX3Rvb2x0aXBEaXYuYXBwZW5kQ2hpbGQodGFibGUpO1xuXG4gICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTtcblxuICAgICAgICBsZXQgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuICAgICAgICB0ZC5jbGFzc0xpc3QuYWRkKCd0b29sdGlwLXRpdGxlJyk7XG4gICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnY29sc3BhbicsICcyJyk7XG4gICAgICAgIHRkLnRleHRDb250ZW50ID0gdGl0bGU7XG4gICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTtcblxuICAgICAgICBpZiAoZGF0YSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdyBnZXQgdGV4dCBmcm9tIGFueSBhc3NvY2lhdGVkIGdyYXBoc1xuICAgICAgICAgICAgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1xuICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpO1xuICAgICAgICAgICAgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgJzInKTtcbiAgICAgICAgICAgIHRkLnRleHRDb250ZW50ID0gZGF0YTtcbiAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1ldHJpY0xpc3RUb29sdGlwIGV4dGVuZHMgQmFzZVRvb2x0aXAge1xuICAgIHByb3RlY3RlZCBfdGl0bGU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHRvb2x0aXBEaXZJZDogc3RyaW5nLCB0b29sdGlwU3R5bGU6IHN0cmluZyA9ICd0b29sdGlwLXQnKSB7XG4gICAgICAgIHN1cGVyKHRvb2x0aXBEaXZJZCwgdG9vbHRpcFN0eWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGF0YSh0aXRsZTogc3RyaW5nLCB0dExpc3Q6IElUb29sdGlwRGF0YVtdKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIGFscmVhZHkgZXhpc3RzLCByZW1vdmUgYW55IGNoaWxkcmVuXG4gICAgICAgIHdoaWxlICh0aGlzLl90b29sdGlwRGl2Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9vbHRpcERpdi5yZW1vdmVDaGlsZCh0aGlzLl90b29sdGlwRGl2Lmxhc3RDaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuXG4gICAgICAgIGxldCB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgICAgIHRhYmxlLmNsYXNzTGlzdC5hZGQoJ3Rvb2x0aXAtdGFibGUnKTtcblxuICAgICAgICB0aGlzLl90b29sdGlwRGl2LmFwcGVuZENoaWxkKHRhYmxlKTtcblxuICAgICAgICBsZXQgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1xuICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0cik7XG5cbiAgICAgICAgbGV0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcbiAgICAgICAgdGQuY2xhc3NMaXN0LmFkZCgndG9vbHRpcC10aXRsZScpO1xuICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nLCAnMicpO1xuICAgICAgICB0ZC50ZXh0Q29udGVudCA9IHRpdGxlO1xuICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7XG5cbiAgICAgICAgLy8gbm93IGdldCB0ZXh0IGZyb20gYW55IGFzc29jaWF0ZWQgZ3JhcGhzXG5cbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNoYXJ0IHNvdXJjZXMgaW52b2x2ZWRcbiAgICAgICAgbGV0IG11bHRpcGxlU291cmNlcyA9IGZhbHNlO1xuICAgICAgICBpZiAodHRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBmaXJzdFNvdXJjZSA9IHR0TGlzdFswXS5zb3VyY2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHR0TGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0dExpc3RbaV0uc291cmNlICE9PSBmaXJzdFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVNvdXJjZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHRMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IHR0TGlzdFtpXTtcblxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEubWV0cmljcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VDaGFydDogYW55ID0gZGF0YS5zb3VyY2U7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUNoYXJ0ICYmIHNvdXJjZUNoYXJ0LnRpdGxlICYmIG11bHRpcGxlU291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0cik7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGQuY2xhc3NMaXN0LmFkZCgndG9vbHRpcC1ncm91cC10aXRsZScpO1xuICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nLCAnMicpO1xuICAgICAgICAgICAgICAgICAgICB0ZC50ZXh0Q29udGVudCA9IHNvdXJjZUNoYXJ0LnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZ3JvdXAgJiYgZGF0YS5ncm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuICAgICAgICAgICAgICAgICAgICB0ZC5jbGFzc0xpc3QuYWRkKCd0b29sdGlwLWdyb3VwLXRpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnY29sc3BhbicsICcyJyk7XG4gICAgICAgICAgICAgICAgICAgIHRkLnRleHRDb250ZW50ID0gZGF0YS5ncm91cDtcbiAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAobGV0IG1ldHJpY05hbWUgaW4gZGF0YS5tZXRyaWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuICAgICAgICAgICAgICAgICAgICB0ZC5jbGFzc0xpc3QuYWRkKCd0b29sdGlwLW1ldHJpYy1uYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgIHRkLnRleHRDb250ZW50ID0gbWV0cmljTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGQuY2xhc3NMaXN0LmFkZCgndG9vbHRpcC1tZXRyaWMtdmFsdWUnKTtcbiAgICAgICAgICAgICAgICAgICAgdGQudGV4dENvbnRlbnQgPSBkYXRhLm1ldHJpY3NbbWV0cmljTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21EaXZUb29sdGlwIGV4dGVuZHMgTWV0cmljTGlzdFRvb2x0aXAge1xuICAgIGNvbnN0cnVjdG9yKHRvb2x0aXBEaXZJZDogc3RyaW5nLCB0b29sdGlwU3R5bGU6IHN0cmluZyA9ICd0b29sdGlwLXQnKSB7XG4gICAgICAgIHN1cGVyKHRvb2x0aXBEaXZJZCwgdG9vbHRpcFN0eWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJUb29sdGlwKCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSBhbHJlYWR5IGV4aXN0cywgcmVtb3ZlIGFueSBjaGlsZHJlblxuICAgICAgICB3aGlsZSAodGhpcy5fdG9vbHRpcERpdi5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rvb2x0aXBEaXYucmVtb3ZlQ2hpbGQodGhpcy5fdG9vbHRpcERpdi5sYXN0Q2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvb2x0aXBEaXYoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rvb2x0aXBEaXY7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUNBO0FBdUJBOzs7QUFHQTtBQUNBO0FBaUhBOzs7Ozs7O0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQTl5QkE7QUE0RUE7QUFDQTtBQUVBO0FBQ0E7QUFndUJBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUNBO0FBNENBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFGQTtBQTRGQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/core/tooltip.ts\n");

/***/ }),

/***/ "./src/core/utilities.ts":
/*!*******************************!*\
  !*** ./src/core/utilities.ts ***!
  \*******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction getSelectionName(className) {\n    if (typeof (className) === 'number') {\n        return 'n' + className;\n    }\n    if (!className) {\n        return '';\n    }\n    if (className.length > 0 && !isNaN(Number(className[0]))) {\n        className = 'z' + className;\n    }\n    className = className.replace(/[\\*\\%\\#\\[\\]\\/\\>\\<\\s\\+\\(\\)\\;\\@\\:\\?\\\"=.,]/g, '-');\n    return className;\n}\nexports.getSelectionName = getSelectionName;\nfunction removeFromList(value, arr) {\n    if (value) {\n        let index = arr.indexOf(value);\n        if (index !== -1) {\n            arr.splice(index, 1);\n        }\n    }\n}\nexports.removeFromList = removeFromList;\n/** taken from d3-array */\nfunction ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n/** taken from d3-array */\nfunction ascendingComparator(f) {\n    return function (d, x) {\n        return ascending(f(d), x);\n    };\n}\n/** modified from d3-array */\nfunction bisect(compare) {\n    if (!compare)\n        compare = ascending;\n    if (compare.length === 1)\n        compare = ascendingComparator(compare);\n    return {\n        left: function (a, x, lo, hi) {\n            if (lo == null)\n                lo = 0;\n            if (hi == null)\n                hi = a.length;\n            while (lo < hi) {\n                var mid = lo + hi >>> 1;\n                if (compare(a[mid], x) < 0)\n                    lo = mid + 1;\n                else\n                    hi = mid;\n            }\n            return lo;\n        },\n        right: function (a, x, lo, hi) {\n            if (lo == null)\n                lo = 0;\n            if (hi == null)\n                hi = a.length;\n            while (lo < hi) {\n                var mid = lo + hi >>> 1;\n                if (compare(a[mid], x) > 0)\n                    hi = mid;\n                else\n                    lo = mid + 1;\n            }\n            return lo;\n        }\n    };\n}\nexports.bisect = bisect;\n/** puts all raw data into buckets based on thresholds and values */\nfunction bucketData(values, thresholds, accessor) {\n    let findRight = bisect().right;\n    let buckets = [];\n    // need one less bucket than thresholds\n    for (let i = 0; i < thresholds.length - 1; ++i) {\n        buckets[i] = [];\n    }\n    let min = thresholds[0];\n    let max = thresholds[thresholds.length - 1];\n    let usedThresholds = thresholds.slice(1);\n    for (let i = 0; i < values.length; ++i) {\n        let compareValue = accessor(values[i]);\n        if (compareValue < min || compareValue > max) {\n            continue;\n        }\n        let valueIdx = findRight(usedThresholds, compareValue);\n        buckets[valueIdx].push(values[i]);\n    }\n    // name the return buckets\n    let ret = {};\n    for (let i = 0; i < thresholds.length - 1; ++i) {\n        let bucketName = thresholds[i] + '-' + thresholds[i + 1];\n        ret[bucketName] = buckets[i];\n    }\n    return ret;\n}\nexports.bucketData = bucketData;\nfunction copy(obj) {\n    let ret = {};\n    for (let key in obj) {\n        ret[key] = obj[key];\n    }\n    return ret;\n}\nexports.copy = copy;\nfunction merge(obj1, obj2) {\n    for (let key in obj2) {\n        obj1[key] = obj2[key];\n    }\n}\nexports.merge = merge;\nfunction convertTraceToTrees(input) {\n    let roots = [];\n    let stack = []; // used to represent the current stack state\n    let nodeStack = []; // used to represent the current stack state\n    for (let i = 0; i < input.length; i++) {\n        let value = input[i];\n        let parent = stack[stack.length - 1];\n        // pop stuff off the stack\n        while (stack.length && value.x > parent.x + parent.dx) {\n            --stack.length;\n            --nodeStack.length;\n            parent = stack[stack.length - 1];\n        }\n        let parentNode = nodeStack[nodeStack.length - 1];\n        let node = {\n            key: value.key,\n            value: value.dx,\n            children: [],\n            parent: parentNode\n        };\n        if (value.name) {\n            node.name = value.name;\n        }\n        if (parentNode) {\n            parentNode.children.push(node);\n        }\n        else {\n            roots.push(node);\n        }\n        stack.push(value);\n        nodeStack.push(node);\n    }\n    return roots;\n}\nexports.convertTraceToTrees = convertTraceToTrees;\nclass SimpleBuffer {\n    constructor(data) {\n        if (data) {\n            this._data = data;\n        }\n        else {\n            this._data = [];\n        }\n    }\n    push(d) {\n        this._data.push(d);\n    }\n    get(index) {\n        return this._data[index];\n    }\n    length() {\n        return this._data.length;\n    }\n    getData() {\n        return this._data;\n    }\n}\nexports.SimpleBuffer = SimpleBuffer;\nclass RingBuffer {\n    constructor(size) {\n        this._data = new Array(size);\n        this._startIdx = 0;\n        this._count = 0;\n        this._isRotating = false;\n    }\n    /** add a new value to the buffer */\n    push(d) {\n        if (this._isRotating) {\n            // the buffer is rotating\n            this._data[this._startIdx] = d;\n            ++this._startIdx;\n            if (this._startIdx === this._count) {\n                this._startIdx = 0;\n            }\n            this._isRotating = true;\n        }\n        else if (this._count === this._data.length - 1) {\n            // here the buffer will start rotating as the buffer is full\n            this._data[this._count] = d;\n            ++this._count;\n            this._isRotating = true;\n        }\n        else {\n            // here the buffer has not been filled yet\n            this._data[this._count] = d;\n            ++this._count;\n        }\n    }\n    /** return the value offset index from the start index\n     * @param index the offset from the start of the buffer\n     */\n    get(index) {\n        if (this._isRotating) {\n            // the buffer is rotating\n            index = index + this._startIdx;\n            if (index >= this._count) {\n                index = index - this._count;\n            }\n        }\n        return this._data[index];\n    }\n    /** get the number of items in the buffer */\n    length() {\n        return this._count;\n    }\n    getData() {\n        if (this._isRotating) {\n            // the buffer is rotating\n            let ret = [];\n            for (let i = this._startIdx; i < this._data.length; ++i) {\n                ret.push(this._data[i]);\n            }\n            for (let i = 0; i < this._startIdx; ++i) {\n                ret.push(this._data[i]);\n            }\n            return ret;\n        }\n        return this._data;\n    }\n}\nexports.RingBuffer = RingBuffer;\nfunction bisectBuffer(compare) {\n    if (!compare)\n        compare = ascending;\n    if (compare.length === 1)\n        compare = ascendingComparator(compare);\n    return {\n        left: function (a, x, lo, hi) {\n            if (lo == null)\n                lo = 0;\n            if (hi == null)\n                hi = a.length();\n            while (lo < hi) {\n                var mid = lo + hi >>> 1;\n                if (compare(a.get(mid), x) < 0)\n                    lo = mid + 1;\n                else\n                    hi = mid;\n            }\n            return lo;\n        },\n        right: function (a, x, lo, hi) {\n            if (lo == null)\n                lo = 0;\n            if (hi == null)\n                hi = a.length();\n            while (lo < hi) {\n                var mid = lo + hi >>> 1;\n                if (compare(a.get(mid), x) > 0)\n                    hi = mid;\n                else\n                    lo = mid + 1;\n            }\n            return lo;\n        }\n    };\n}\nexports.bisectBuffer = bisectBuffer;\nfunction transposeKeys(data) {\n    // this is used to map the keys to their indicies in the output summary data\n    let keyIdxMapping = {};\n    function transposeHelper(output, parentKeys, value, level) {\n        let myKeys = [];\n        for (let i = 0; i < parentKeys.length; ++i) {\n            myKeys[i] = parentKeys[i];\n        }\n        myKeys.push(value.key);\n        if (Array.isArray(value.data)) {\n            for (let i = 0; i < value.data.length; ++i) {\n                transposeHelper(output, myKeys, value.data[i], level + 1);\n            }\n        }\n        else {\n            let currSummaryArray = output;\n            for (let keyIdx = myKeys.length - 1; keyIdx >= 0; --keyIdx) {\n                let key = myKeys[keyIdx];\n                let dataIdx;\n                if (!keyIdxMapping.hasOwnProperty(key)) {\n                    dataIdx = currSummaryArray.length;\n                    keyIdxMapping[key] = dataIdx;\n                }\n                else {\n                    dataIdx = keyIdxMapping[key];\n                }\n                // create the summary data if it doesn't exist yet\n                if (!currSummaryArray[dataIdx]) {\n                    currSummaryArray[dataIdx] = { key: key, data: [] };\n                }\n                // if we are the leaf add the data, else just move to the next level\n                if (keyIdx === 0) {\n                    currSummaryArray[dataIdx].data = value.data;\n                }\n                else {\n                    currSummaryArray = currSummaryArray[dataIdx].data;\n                }\n            }\n        }\n    }\n    let output = [];\n    for (let i = 0; i < data.length; ++i) {\n        transposeHelper(output, [], data[i], 0);\n    }\n    return output;\n}\nexports.transposeKeys = transposeKeys;\nfunction runFunctionOnLeaf(node, func) {\n    if (node && node.children && node.children.length > 0) {\n        for (let i = 0; i < node.children.length; ++i) {\n            runFunctionOnLeaf(node.children[i], func);\n        }\n    }\n    else {\n        func(node);\n    }\n}\nexports.runFunctionOnLeaf = runFunctionOnLeaf;\nfunction isOverlapping(rect1, rect2) {\n    return rect1.x <= rect2.right && rect1.right >= rect2.x &&\n        rect1.y <= rect2.bottom && rect1.bottom >= rect2.y;\n}\nexports.isOverlapping = isOverlapping;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS91dGlsaXRpZXMudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9zcmMvY29yZS91dGlsaXRpZXMudHM/NmNhNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVHJlZU5vZGUsIElUcmFjZVZhbHVlLCBJU3VtbWFyeVZhbHVlIH0gZnJvbSAnLi4vaW50ZXJmYWNlL2NoYXJ0L3Nlcmllcy1kYXRhJztcbmltcG9ydCB7IElCdWZmZXIsIElDaGVja2JveFRyZWVOb2RlLCBJUmVjdCB9IGZyb20gJy4uL2ludGVyZmFjZS91aS1iYXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk5hbWUoY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIChjbGFzc05hbWUpID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gJ24nICsgY2xhc3NOYW1lO1xuICAgIH1cbiAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChjbGFzc05hbWUubGVuZ3RoID4gMCAmJiAhaXNOYU4oTnVtYmVyKGNsYXNzTmFtZVswXSkpKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9ICd6JyArIGNsYXNzTmFtZTtcbiAgICB9XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoL1tcXCpcXCVcXCNcXFtcXF1cXC9cXD5cXDxcXHNcXCtcXChcXClcXDtcXEBcXDpcXD9cXFwiPS4sXS9nLCAnLScpO1xuICAgIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tTGlzdCh2YWx1ZTogYW55LCBhcnI6IGFueVtdKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGxldCBpbmRleCA9IGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKiB0YWtlbiBmcm9tIGQzLWFycmF5ICovXG5mdW5jdGlvbiBhc2NlbmRpbmcoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cblxuLyoqIHRha2VuIGZyb20gZDMtYXJyYXkgKi9cbmZ1bmN0aW9uIGFzY2VuZGluZ0NvbXBhcmF0b3IoZjogKGQ6IGFueSkgPT4gbnVtYmVyKTogKGE6IGFueSwgYjogYW55KSA9PiBudW1iZXIge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZDogYW55LCB4OiBhbnkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gYXNjZW5kaW5nKGYoZCksIHgpO1xuICAgIH07XG59XG5cbi8qKiBtb2RpZmllZCBmcm9tIGQzLWFycmF5ICovXG5leHBvcnQgZnVuY3Rpb24gYmlzZWN0KGNvbXBhcmU/OiBhbnkpOiBhbnkge1xuICAgIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcbiAgICBpZiAoY29tcGFyZS5sZW5ndGggPT09IDEpIGNvbXBhcmUgPSBhc2NlbmRpbmdDb21wYXJhdG9yKGNvbXBhcmUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGZ1bmN0aW9uIChhOiBhbnlbXSwgeDogYW55LCBsbzogbnVtYmVyLCBoaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICAgICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKSBsbyA9IG1pZCArIDE7XG4gICAgICAgICAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsbztcbiAgICAgICAgfSxcbiAgICAgICAgcmlnaHQ6IGZ1bmN0aW9uIChhOiBhbnlbXSwgeDogbnVtYmVyLCBsbzogbnVtYmVyLCBoaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICAgICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPiAwKSBoaSA9IG1pZDtcbiAgICAgICAgICAgICAgICBlbHNlIGxvID0gbWlkICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsbztcbiAgICAgICAgfVxuICAgIH07XG59XG5cbi8qKiBwdXRzIGFsbCByYXcgZGF0YSBpbnRvIGJ1Y2tldHMgYmFzZWQgb24gdGhyZXNob2xkcyBhbmQgdmFsdWVzICovXG5leHBvcnQgZnVuY3Rpb24gYnVja2V0RGF0YSh2YWx1ZXM6IGFueVtdLCB0aHJlc2hvbGRzOiBudW1iZXJbXSxcbiAgICBhY2Nlc3NvcjogKGQ6IGFueSkgPT4gbnVtYmVyKTogeyBbaW5kZXg6IHN0cmluZ106IGFueVtdIH0ge1xuXG4gICAgbGV0IGZpbmRSaWdodCA9IGJpc2VjdCgpLnJpZ2h0O1xuXG4gICAgbGV0IGJ1Y2tldHM6IGFueVtdW10gPSBbXTtcbiAgICAvLyBuZWVkIG9uZSBsZXNzIGJ1Y2tldCB0aGFuIHRocmVzaG9sZHNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocmVzaG9sZHMubGVuZ3RoIC0gMTsgKytpKSB7XG4gICAgICAgIGJ1Y2tldHNbaV0gPSBbXTtcbiAgICB9XG5cbiAgICBsZXQgbWluID0gdGhyZXNob2xkc1swXTtcbiAgICBsZXQgbWF4ID0gdGhyZXNob2xkc1t0aHJlc2hvbGRzLmxlbmd0aCAtIDFdO1xuXG4gICAgbGV0IHVzZWRUaHJlc2hvbGRzID0gdGhyZXNob2xkcy5zbGljZSgxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBsZXQgY29tcGFyZVZhbHVlID0gYWNjZXNzb3IodmFsdWVzW2ldKTtcbiAgICAgICAgaWYgKGNvbXBhcmVWYWx1ZSA8IG1pbiB8fCBjb21wYXJlVmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlSWR4ID0gZmluZFJpZ2h0KHVzZWRUaHJlc2hvbGRzLCBjb21wYXJlVmFsdWUpO1xuICAgICAgICBidWNrZXRzW3ZhbHVlSWR4XS5wdXNoKHZhbHVlc1tpXSk7XG4gICAgfVxuXG4gICAgLy8gbmFtZSB0aGUgcmV0dXJuIGJ1Y2tldHNcbiAgICBsZXQgcmV0OiB7IFtpbmRleDogc3RyaW5nXTogYW55W10gfSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhyZXNob2xkcy5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgbGV0IGJ1Y2tldE5hbWU6IHN0cmluZyA9IHRocmVzaG9sZHNbaV0gKyAnLScgKyB0aHJlc2hvbGRzW2kgKyAxXTtcbiAgICAgICAgcmV0W2J1Y2tldE5hbWVdID0gYnVja2V0c1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShvYmo6IGFueSk6IE9iamVjdCB7XG4gICAgbGV0IHJldDogYW55ID0ge307XG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xuICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKG9iajE6IGFueSwgb2JqMjogYW55KTogdm9pZCB7XG4gICAgZm9yIChsZXQga2V5IGluIG9iajIpIHtcbiAgICAgICAgb2JqMVtrZXldID0gb2JqMltrZXldO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUcmFjZVRvVHJlZXMoaW5wdXQ6IElUcmFjZVZhbHVlW10pOiBJVHJlZU5vZGVbXSB7XG4gICAgbGV0IHJvb3RzOiBJVHJlZU5vZGVbXSA9IFtdO1xuXG4gICAgbGV0IHN0YWNrOiBJVHJhY2VWYWx1ZVtdID0gW107IC8vIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjdXJyZW50IHN0YWNrIHN0YXRlXG4gICAgbGV0IG5vZGVTdGFjazogSVRyZWVOb2RlW10gPSBbXTsgLy8gdXNlZCB0byByZXByZXNlbnQgdGhlIGN1cnJlbnQgc3RhY2sgc3RhdGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGlucHV0W2ldO1xuICAgICAgICBsZXQgcGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgICAgLy8gcG9wIHN0dWZmIG9mZiB0aGUgc3RhY2tcbiAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCAmJiB2YWx1ZS54ID4gcGFyZW50LnggKyBwYXJlbnQuZHgpIHtcbiAgICAgICAgICAgIC0tc3RhY2subGVuZ3RoO1xuICAgICAgICAgICAgLS1ub2RlU3RhY2subGVuZ3RoO1xuICAgICAgICAgICAgcGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IG5vZGVTdGFja1tub2RlU3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGxldCBub2RlOiBJVHJlZU5vZGUgPSB7XG4gICAgICAgICAgICBrZXk6IHZhbHVlLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5keCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50Tm9kZVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh2YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICBub2RlLm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvb3RzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgbm9kZVN0YWNrLnB1c2gobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvb3RzO1xufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlQnVmZmVyPERhdGFUeXBlPiBpbXBsZW1lbnRzIElCdWZmZXI8RGF0YVR5cGU+IHtcbiAgICBwcml2YXRlIF9kYXRhOiBEYXRhVHlwZVtdO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IERhdGFUeXBlW10pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHB1c2goZDogRGF0YVR5cGUpIHtcbiAgICAgICAgdGhpcy5fZGF0YS5wdXNoKGQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcik6IERhdGFUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFbaW5kZXhdO1xuICAgIH1cblxuICAgIHB1YmxpYyBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREYXRhKCk6IERhdGFUeXBlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSaW5nQnVmZmVyPERhdGFUeXBlPiBpbXBsZW1lbnRzIElCdWZmZXI8RGF0YVR5cGU+IHtcbiAgICBwcml2YXRlIF9kYXRhOiBEYXRhVHlwZVtdO1xuICAgIHByaXZhdGUgX3N0YXJ0SWR4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfY291bnQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9pc1JvdGF0aW5nOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Ioc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICAgIHRoaXMuX3N0YXJ0SWR4ID0gMDtcbiAgICAgICAgdGhpcy5fY291bnQgPSAwO1xuICAgICAgICB0aGlzLl9pc1JvdGF0aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIGFkZCBhIG5ldyB2YWx1ZSB0byB0aGUgYnVmZmVyICovXG4gICAgcHVibGljIHB1c2goZDogRGF0YVR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUm90YXRpbmcpIHtcbiAgICAgICAgICAgIC8vIHRoZSBidWZmZXIgaXMgcm90YXRpbmdcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbdGhpcy5fc3RhcnRJZHhdID0gZDtcbiAgICAgICAgICAgICsrdGhpcy5fc3RhcnRJZHg7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGFydElkeCA9PT0gdGhpcy5fY291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydElkeCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2lzUm90YXRpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvdW50ID09PSB0aGlzLl9kYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8vIGhlcmUgdGhlIGJ1ZmZlciB3aWxsIHN0YXJ0IHJvdGF0aW5nIGFzIHRoZSBidWZmZXIgaXMgZnVsbFxuICAgICAgICAgICAgdGhpcy5fZGF0YVt0aGlzLl9jb3VudF0gPSBkO1xuICAgICAgICAgICAgKyt0aGlzLl9jb3VudDtcbiAgICAgICAgICAgIHRoaXMuX2lzUm90YXRpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGVyZSB0aGUgYnVmZmVyIGhhcyBub3QgYmVlbiBmaWxsZWQgeWV0XG4gICAgICAgICAgICB0aGlzLl9kYXRhW3RoaXMuX2NvdW50XSA9IGQ7XG4gICAgICAgICAgICArK3RoaXMuX2NvdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIHJldHVybiB0aGUgdmFsdWUgb2Zmc2V0IGluZGV4IGZyb20gdGhlIHN0YXJ0IGluZGV4XG4gICAgICogQHBhcmFtIGluZGV4IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlclxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcik6IERhdGFUeXBlIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUm90YXRpbmcpIHtcbiAgICAgICAgICAgIC8vIHRoZSBidWZmZXIgaXMgcm90YXRpbmdcbiAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyB0aGlzLl9zdGFydElkeDtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSB0aGlzLl9jb3VudCkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggLSB0aGlzLl9jb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVtpbmRleF07XG4gICAgfVxuXG4gICAgLyoqIGdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBidWZmZXIgKi9cbiAgICBwdWJsaWMgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY291bnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGEoKTogRGF0YVR5cGVbXSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1JvdGF0aW5nKSB7XG4gICAgICAgICAgICAvLyB0aGUgYnVmZmVyIGlzIHJvdGF0aW5nXG4gICAgICAgICAgICBsZXQgcmV0ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fc3RhcnRJZHg7IGkgPCB0aGlzLl9kYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmV0LnB1c2godGhpcy5fZGF0YVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3N0YXJ0SWR4OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaCh0aGlzLl9kYXRhW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlzZWN0QnVmZmVyKGNvbXBhcmU/OiBhbnkpOiBhbnkge1xuICAgIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcbiAgICBpZiAoY29tcGFyZS5sZW5ndGggPT09IDEpIGNvbXBhcmUgPSBhc2NlbmRpbmdDb21wYXJhdG9yKGNvbXBhcmUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGZ1bmN0aW9uIChhOiBJQnVmZmVyPGFueT4sIHg6IGFueSwgbG86IG51bWJlciwgaGk6IG51bWJlcikge1xuICAgICAgICAgICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICAgICAgICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoKCk7XG4gICAgICAgICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICAgICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGEuZ2V0KG1pZCksIHgpIDwgMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICAgICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbG87XG4gICAgICAgIH0sXG4gICAgICAgIHJpZ2h0OiBmdW5jdGlvbiAoYTogSUJ1ZmZlcjxhbnk+LCB4OiBudW1iZXIsIGxvOiBudW1iZXIsIGhpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICAgICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aCgpO1xuICAgICAgICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZShhLmdldChtaWQpLCB4KSA+IDApIGhpID0gbWlkO1xuICAgICAgICAgICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxvO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlS2V5cyhkYXRhOiBJU3VtbWFyeVZhbHVlW10pOiBJU3VtbWFyeVZhbHVlW10ge1xuXG4gICAgLy8gdGhpcyBpcyB1c2VkIHRvIG1hcCB0aGUga2V5cyB0byB0aGVpciBpbmRpY2llcyBpbiB0aGUgb3V0cHV0IHN1bW1hcnkgZGF0YVxuICAgIGxldCBrZXlJZHhNYXBwaW5nOiB7IFtpbmRleDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICAgIGZ1bmN0aW9uIHRyYW5zcG9zZUhlbHBlcihvdXRwdXQ6IElTdW1tYXJ5VmFsdWVbXSwgcGFyZW50S2V5czogc3RyaW5nW10sXG4gICAgICAgIHZhbHVlOiBJU3VtbWFyeVZhbHVlLCBsZXZlbDogbnVtYmVyKSB7XG5cbiAgICAgICAgbGV0IG15S2V5cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudEtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIG15S2V5c1tpXSA9IHBhcmVudEtleXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgbXlLZXlzLnB1c2godmFsdWUua2V5KTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5kYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNwb3NlSGVscGVyKG91dHB1dCwgbXlLZXlzLCB2YWx1ZS5kYXRhW2ldLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGN1cnJTdW1tYXJ5QXJyYXkgPSBvdXRwdXQ7XG4gICAgICAgICAgICBmb3IgKGxldCBrZXlJZHggPSBteUtleXMubGVuZ3RoIC0gMTsga2V5SWR4ID49IDA7IC0ta2V5SWR4KSB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG15S2V5c1trZXlJZHhdO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhSWR4OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgaWYgKCFrZXlJZHhNYXBwaW5nLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUlkeCA9IGN1cnJTdW1tYXJ5QXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBrZXlJZHhNYXBwaW5nW2tleV0gPSBkYXRhSWR4O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFJZHggPSBrZXlJZHhNYXBwaW5nW2tleV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBzdW1tYXJ5IGRhdGEgaWYgaXQgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJTdW1tYXJ5QXJyYXlbZGF0YUlkeF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyclN1bW1hcnlBcnJheVtkYXRhSWR4XSA9IHsga2V5OiBrZXksIGRhdGE6IFtdIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIHRoZSBsZWFmIGFkZCB0aGUgZGF0YSwgZWxzZSBqdXN0IG1vdmUgdG8gdGhlIG5leHQgbGV2ZWxcbiAgICAgICAgICAgICAgICBpZiAoa2V5SWR4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJTdW1tYXJ5QXJyYXlbZGF0YUlkeF0uZGF0YSA9IHZhbHVlLmRhdGE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyclN1bW1hcnlBcnJheSA9IGN1cnJTdW1tYXJ5QXJyYXlbZGF0YUlkeF0uZGF0YSBhcyBJU3VtbWFyeVZhbHVlW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG91dHB1dDogSVN1bW1hcnlWYWx1ZVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRyYW5zcG9zZUhlbHBlcihvdXRwdXQsIFtdLCBkYXRhW2ldLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkZ1bmN0aW9uT25MZWFmKG5vZGU6IElDaGVja2JveFRyZWVOb2RlLFxuICAgIGZ1bmM6IChsZWFmTm9kZTogSUNoZWNrYm94VHJlZU5vZGUpID0+IHZvaWRcbikge1xuICAgIGlmIChub2RlICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcnVuRnVuY3Rpb25PbkxlYWYobm9kZS5jaGlsZHJlbltpXSwgZnVuYyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmdW5jKG5vZGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT3ZlcmxhcHBpbmcocmVjdDE6IElSZWN0LCByZWN0MjogSVJlY3QpIHtcbiAgICByZXR1cm4gcmVjdDEueCA8PSByZWN0Mi5yaWdodCAmJiByZWN0MS5yaWdodCA+PSByZWN0Mi54ICYmXG4gICAgICAgIHJlY3QxLnkgPD0gcmVjdDIuYm90dG9tICYmIHJlY3QxLmJvdHRvbSA+PSByZWN0Mi55O1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQTJCQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFqQ0E7QUFtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBdkNBO0FBeUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBMUJBO0FBNEJBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRFQTtBQXdFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekJBO0FBNEJBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbERBO0FBb0RBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUhBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/core/utilities.ts\n");

/***/ }),

/***/ "./src/core/web-utilities.ts":
/*!***********************************!*\
  !*** ./src/core/web-utilities.ts ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst es6_promise_1 = __webpack_require__(/*! es6-promise */ \"es6-promise\");\n/**\n* detect IE\n* returns version of IE or false, if browser is not Internet Explorer\n*/\n// from https://codepen.io/gapcode/pen/vEJNZN\nfunction detectIE() {\n    let ua = window.navigator.userAgent;\n    // Test values; Uncomment to check result …\n    // IE 10\n    // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\n    // IE 11\n    // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\n    // Edge 12 (Spartan)\n    // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\n    // Edge 13\n    // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\n    let msie = ua.indexOf('MSIE ');\n    if (msie > 0) {\n        es6_promise_1.polyfill();\n        if (!String.prototype.startsWith) {\n            String.prototype.startsWith = function (searchString, position) {\n                position = position || 0;\n                return this.substr(position, searchString.length) === searchString;\n            };\n        }\n        // IE 10 or older => return version number\n        return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n    }\n    let trident = ua.indexOf('Trident/');\n    if (trident > 0) {\n        es6_promise_1.polyfill();\n        if (!String.prototype.startsWith) {\n            String.prototype.startsWith = function (searchString, position) {\n                position = position || 0;\n                return this.substr(position, searchString.length) === searchString;\n            };\n        }\n        // IE 11 => return version number\n        let rv = ua.indexOf('rv:');\n        return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n    }\n    let edge = ua.indexOf('Edge/');\n    if (edge > 0) {\n        // Edge (IE 12+) => return version number\n        return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n    }\n    // other browser\n    return false;\n}\nexports.detectIE = detectIE;\ndocument.addEventListener('DOMContentLoaded', function () {\n    0;\n    detectIE();\n}, false);\n// from https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/MouseEvent\n// polyfill for old version of IE\nfunction useIEPolyfill(window) {\n    try {\n        new CustomEvent('test'); // No need to polyfill\n    }\n    catch (e) {\n        // Polyfills DOM4 CustomEvent\n        let MouseEvent = function (eventType, params) {\n            params = params || { bubbles: false, cancelable: false };\n            var mouseEvent = document.createEvent('MouseEvent');\n            mouseEvent.initMouseEvent(eventType, params.bubbles, params.cancelable, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n            return mouseEvent;\n        };\n        MouseEvent.prototype = Event.prototype;\n        window.MouseEvent = MouseEvent;\n    }\n}\nexports.useIEPolyfill = useIEPolyfill;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29yZS93ZWItdXRpbGl0aWVzLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2NvcmUvd2ViLXV0aWxpdGllcy50cz9jYzRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBvbHlmaWxsIH0gZnJvbSAnZXM2LXByb21pc2UnO1xuXG4vKipcbiogZGV0ZWN0IElFXG4qIHJldHVybnMgdmVyc2lvbiBvZiBJRSBvciBmYWxzZSwgaWYgYnJvd3NlciBpcyBub3QgSW50ZXJuZXQgRXhwbG9yZXJcbiovXG4vLyBmcm9tIGh0dHBzOi8vY29kZXBlbi5pby9nYXBjb2RlL3Blbi92RUpOWk5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RJRSgpIHtcbiAgICBsZXQgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICAgIC8vIFRlc3QgdmFsdWVzOyBVbmNvbW1lbnQgdG8gY2hlY2sgcmVzdWx0IOKAplxuXG4gICAgLy8gSUUgMTBcbiAgICAvLyB1YSA9ICdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgTVNJRSAxMC4wOyBXaW5kb3dzIE5UIDYuMjsgVHJpZGVudC82LjApJztcblxuICAgIC8vIElFIDExXG4gICAgLy8gdWEgPSAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4zOyBUcmlkZW50LzcuMDsgcnY6MTEuMCkgbGlrZSBHZWNrbyc7XG5cbiAgICAvLyBFZGdlIDEyIChTcGFydGFuKVxuICAgIC8vIHVhID0gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMzkuMC4yMTcxLjcxIFNhZmFyaS81MzcuMzYgRWRnZS8xMi4wJztcblxuICAgIC8vIEVkZ2UgMTNcbiAgICAvLyB1YSA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDYuMC4yNDg2LjAgU2FmYXJpLzUzNy4zNiBFZGdlLzEzLjEwNTg2JztcbiAgICBsZXQgbXNpZSA9IHVhLmluZGV4T2YoJ01TSUUgJyk7XG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAgIHBvbHlmaWxsKCk7XG4gICAgICAgIGlmICghU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKSB7XG4gICAgICAgICAgICBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggPSBmdW5jdGlvbiAoc2VhcmNoU3RyaW5nOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIHx8IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic3RyKHBvc2l0aW9uLCBzZWFyY2hTdHJpbmcubGVuZ3RoKSA9PT0gc2VhcmNoU3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHVhLnN1YnN0cmluZyhtc2llICsgNSwgdWEuaW5kZXhPZignLicsIG1zaWUpKSwgMTApO1xuICAgIH1cblxuICAgIGxldCB0cmlkZW50ID0gdWEuaW5kZXhPZignVHJpZGVudC8nKTtcbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgICAgcG9seWZpbGwoKTtcbiAgICAgICAgaWYgKCFTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgpIHtcbiAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChzZWFyY2hTdHJpbmc6IHN0cmluZywgcG9zaXRpb246IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gfHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJzdHIocG9zaXRpb24sIHNlYXJjaFN0cmluZy5sZW5ndGgpID09PSBzZWFyY2hTdHJpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICAgIGxldCBydiA9IHVhLmluZGV4T2YoJ3J2OicpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodWEuc3Vic3RyaW5nKHJ2ICsgMywgdWEuaW5kZXhPZignLicsIHJ2KSksIDEwKTtcbiAgICB9XG5cbiAgICBsZXQgZWRnZSA9IHVhLmluZGV4T2YoJ0VkZ2UvJyk7XG4gICAgaWYgKGVkZ2UgPiAwKSB7XG4gICAgICAgIC8vIEVkZ2UgKElFIDEyKykgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh1YS5zdWJzdHJpbmcoZWRnZSArIDUsIHVhLmluZGV4T2YoJy4nLCBlZGdlKSksIDEwKTtcbiAgICB9XG5cbiAgICAvLyBvdGhlciBicm93c2VyXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkge1xuICAgIDBcbiAgICBkZXRlY3RJRSgpO1xufSwgZmFsc2UpO1xuXG4vLyBmcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Nb3VzZUV2ZW50L01vdXNlRXZlbnRcbi8vIHBvbHlmaWxsIGZvciBvbGQgdmVyc2lvbiBvZiBJRVxuZXhwb3J0IGZ1bmN0aW9uIHVzZUlFUG9seWZpbGwod2luZG93OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3Rlc3QnKTsgLy8gTm8gbmVlZCB0byBwb2x5ZmlsbFxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUG9seWZpbGxzIERPTTQgQ3VzdG9tRXZlbnRcbiAgICAgICAgbGV0IE1vdXNlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnRUeXBlOiBhbnksIHBhcmFtczogYW55KSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwgeyBidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogZmFsc2UgfTtcbiAgICAgICAgICAgIHZhciBtb3VzZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnQnKTtcbiAgICAgICAgICAgIG1vdXNlRXZlbnQuaW5pdE1vdXNlRXZlbnQoZXZlbnRUeXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHdpbmRvdywgMCwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuXG4gICAgICAgICAgICByZXR1cm4gbW91c2VFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vdXNlRXZlbnQucHJvdG90eXBlID0gRXZlbnQucHJvdG90eXBlO1xuICAgICAgICB3aW5kb3cuTW91c2VFdmVudCA9IE1vdXNlRXZlbnQ7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBcERBO0FBc0RBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/core/web-utilities.ts\n");

/***/ }),

/***/ "./src/interface/graph.ts":
/*!********************************!*\
  !*** ./src/interface/graph.ts ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkType;\n(function (LinkType) {\n    LinkType[LinkType[\"Linear\"] = 1] = \"Linear\";\n    LinkType[LinkType[\"Elbow\"] = 2] = \"Elbow\";\n    /** adds an arrow from the input to the output */\n    LinkType[LinkType[\"Directional\"] = 4] = \"Directional\";\n    /** adds an arrow from the input to the output and vice versa */\n    LinkType[LinkType[\"Bidirectional\"] = 8] = \"Bidirectional\";\n    /** render the link as a curve */\n    LinkType[LinkType[\"Curve\"] = 16] = \"Curve\";\n})(LinkType = exports.LinkType || (exports.LinkType = {}));\nvar NodeType;\n(function (NodeType) {\n    /** render port nodes as a circle */\n    NodeType[NodeType[\"NodeSimple\"] = 0] = \"NodeSimple\";\n    /** render port nodes as a rectangle putting the type as the title */\n    NodeType[NodeType[\"NodeRectangle\"] = 1] = \"NodeRectangle\";\n})(NodeType = exports.NodeType || (exports.NodeType = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW50ZXJmYWNlL2dyYXBoLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdULy4vc3JjL2ludGVyZmFjZS9ncmFwaC50cz9lNmNjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVJRWxlbWVudCwgSUxlZ2VuZCwgSUV2ZW50LCBJQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi91aS1iYXNlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcmFwaCBleHRlbmRzIFVJRWxlbWVudCB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKiBhIG5vZGUgaW4gYSBjb25uZWN0ZWQgZ3JhcGggKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdyYXBoTm9kZSB7XG4gICAgLyoqIHRoZSBrZXkgb2YgdGhlIG5vZGUgdGhhdCBpcyB1c2VkIGJ5IHRoZVxuICAgICAqIGJ5IHRoZSBbW1NlbGVjdGlvbkhlbHBlcl1dIGFuZCBbW0NvbG9yTWFuYWdlcl1dXG4gICAgKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogc3BlY2lmaWVzIGxpc3Qgb2YgbGFyZ2VyIGdyb3VwcyB0aGlzIG5vZGUgaXMgcGFydCBvZi4gIFVzZWRcbiAgICAgKiBieSB0aGUgW1tTZWxlY3Rpb25IZWxwZXJdXSBhbmQgW1tDb2xvck1hbmFnZXJdXVxuICAgICovXG4gICAgdHlwZT86IHN0cmluZ1tdO1xufVxuXG4vKiogYSBsaW5lIGJldHdlZW4gdHdvIG5vZGVzIGluIGEgY29ubmVjdGVkIGdyYXBoICovXG5leHBvcnQgaW50ZXJmYWNlIElHcmFwaExpbmsge1xuICAgIC8qKiB0aGUga2V5IG9mIHRoZSBub2RlIHRoYXQgc3RhcnRzIHRoZSBjb25uZWN0aW9uICovXG4gICAgZnJvbTogc3RyaW5nIHwgSUdyYXBoTm9kZTtcbiAgICAvKiogdGhlIGtleSBvZiB0aGUgbm9kZSB0aGF0IGVuZHMgdGhlIGNvbm5lY3Rpb24gKi9cbiAgICB0bzogc3RyaW5nIHwgSUdyYXBoTm9kZTtcbiAgICAvKiogYSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGxpbmsgKi9cbiAgICB2YWx1ZT86IG51bWJlcjtcbn1cblxuLyoqIGEgc2V0IG9mIGxpbmtzIGFuZCBub2RlcyB0byByZW5kZXIgYXMgYSBjb25uZWN0ZWQgZ3JhcGggKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbm5lY3RlZEdyYXBoIGV4dGVuZHMgSUdyYXBoIHtcbiAgICBsaW5rczogSUdyYXBoTGlua1tdO1xuICAgIG5vZGVzPzogSUdyYXBoTm9kZVtdO1xuICAgIC8qKiBhZGQgYSBsZWdlbmQgZGVmaW5pdGlvbiB0byByZW5kZXIgKi9cbiAgICBsZWdlbmQ/OiBJTGVnZW5kO1xuICAgIC8qKiB0aGUgY29udGV4dCBtZW51IGRlZmluaXRpb25zIGZvciB3aGVuIHRoZSB1c2VyIHJpZ2h0IGNsaWNrcyAqL1xuICAgIGNvbnRleHRNZW51SXRlbXM/OiBJQ29udGV4dE1lbnVJdGVtW107XG4gICAgLyoqIHRoZSBjb250ZXh0IG1lbnUgZGVmaW5pdGlvbnMgZm9yIHdoZW4gdGhlIHVzZXIgZmluaXNoZXMgYSBicnVzaCBhY3Rpb24gKi9cbiAgICBicnVzaENvbnRleHRNZW51SXRlbXM/OiBJQ29udGV4dE1lbnVJdGVtW107XG59XG5cbmV4cG9ydCBlbnVtIExpbmtUeXBlIHtcbiAgICBMaW5lYXIgPSAxLFxuICAgIEVsYm93ID0gMixcbiAgICAvKiogYWRkcyBhbiBhcnJvdyBmcm9tIHRoZSBpbnB1dCB0byB0aGUgb3V0cHV0ICovXG4gICAgRGlyZWN0aW9uYWwgPSA0LFxuICAgIC8qKiBhZGRzIGFuIGFycm93IGZyb20gdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQgYW5kIHZpY2UgdmVyc2EgKi9cbiAgICBCaWRpcmVjdGlvbmFsID0gOCxcbiAgICAvKiogcmVuZGVyIHRoZSBsaW5rIGFzIGEgY3VydmUgKi9cbiAgICBDdXJ2ZSA9IDE2XG59XG5cbi8qKiBjb21tb24gZGlhZ3JhbSBsaW5rIHR5cGUgc28gd2UgY2FuIGhhdmUgb25lIGNvbW1vbiByZW5kZXJpbmcgZnVuY3Rpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURpYWdyYW1MaW5rIGV4dGVuZHMgSUdyYXBoTGluayB7XG4gICAgLyoqIGhvdyB0byByZW5kZXIgdGhlIGxpbmsgICovXG4gICAgbGlua1R5cGU/OiBMaW5rVHlwZTtcbiAgICAvKiogd2lkdGggb2YgdGhpcyBsaW5rICovXG4gICAgd2lkdGg/OiBudW1iZXI7XG4gICAgLyoqIGNvbG9yIGZvciB0aGlzIGxpbmsgKi9cbiAgICBjb2xvcj86IHN0cmluZztcbiAgICAvKiogdHlwZSBvZiBsaW5rIHdoaWNoIG1heSBiZSB1c2VkIGZvciBjb2xvcmluZyAqL1xuICAgIHR5cGU/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSGllcmFyY2h5R3JhcGhMaW5rIGV4dGVuZHMgSURpYWdyYW1MaW5rIHtcbiAgICAvKiogYW4gaWQgb24gdGhlIGZyb20gbm9kZSBmb3IgbGlua3MgdGhhdCB3YW50IHRvIHNoYXJlIHRoZSBsaW5rIHBvaW50IG9uIHRoZSBub2RlICovXG4gICAgZnJvbUNvbm5lY3Rpb25Qb2ludD86IHN0cmluZztcbiAgICAvKiogYW4gaWQgb24gdGhlIHRvIG5vZGUgZm9yIGxpbmtzIHRoYXQgd2FudCB0byBzaGFyZSB0aGUgbGluayBwb2ludCBvbiB0aGUgbm9kZSAqL1xuICAgIHRvQ29ubmVjdGlvblBvaW50Pzogc3RyaW5nO1xufVxuXG4vKiogYSBub2RlIGluIGEgY29ubmVjdGVkIGdyYXBoICovXG5leHBvcnQgaW50ZXJmYWNlIElIaWVyYXJjaHlOb2RlIGV4dGVuZHMgSUdyYXBoTm9kZSB7XG4gICAgLyoqIHNwZWNpZmllcyBhbiBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlICovXG4gICAgaW1hZ2U/OiBzdHJpbmc7XG4gICAgLyoqIHNwZWNpZmllcyBhbiBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlICovXG4gICAgaW1hZ2VIZWlnaHQ/OiBudW1iZXI7XG4gICAgLyoqIHNwZWNpZmllcyBhbiBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlICovXG4gICAgaW1hZ2VXaWR0aD86IG51bWJlcjtcbiAgICAvKiogTGFiZWwgZm9yIHRoaXMgbm9kZSwgdXNlIGlmIGxhYmVsIGlzIGR1cGxpY2F0ZWQgKi9cbiAgICBsYWJlbD86IHN0cmluZztcbiAgICAvKiogYW55IGNlbnRlciBhbGlnbmVkIG5vZGVzICovXG4gICAgY2VudGVyPzogSUhpZXJhcmNoeU5vZGVbXTtcbiAgICAvKiogc3BlY2lmaWVzIHRvcCBhbGlnbmVkIG5vZGVzICovXG4gICAgdG9wPzogSUhpZXJhcmNoeU5vZGVbXTtcbiAgICAvKiogc3BlY2lmaWVzIGJvdHRvbSBhbGlnbmVkIG5vZGVzICovXG4gICAgYm90dG9tPzogSUhpZXJhcmNoeU5vZGVbXTtcbiAgICAvKiogc3BlY2lmaWVzIGJvdHRvbSBhbGlnbmVkIG5vZGVzICovXG4gICAgbGVmdD86IElIaWVyYXJjaHlOb2RlW107XG4gICAgLyoqIHNwZWNpZmllcyBib3R0b20gYWxpZ25lZCBub2RlcyAqL1xuICAgIHJpZ2h0PzogSUhpZXJhcmNoeU5vZGVbXTtcbiAgICAvKiogd2hldGhlciB0byByZW5kZXIgdGhlIGJvcmRlciBhcm91bmQgdGhlIG5vZGUgb3Igbm90ICovXG4gICAgaGlkZUJvcmRlcj86IGJvb2xlYW47XG4gICAgLyoqIHdoZXRoZXIgdG8gc2hvdyBhIHRvb2x0aXAgb24gdGhpcyBlbGVtZW50IG9yIG5vdCAqL1xuICAgIGhpZGVUb29sdGlwPzogYm9vbGVhbjtcbiAgICAvKiogd2hldGhlciB0byBzaG93IHRoZSBpbWFnZSBhbmQgbGFiZWwgb2YgdGhpcyBlbGVtZW50IG9yIG5vdCAqL1xuICAgIGhpZGVJbWFnZUxhYmVsPzogYm9vbGVhbjtcblxuICAgIC8qKiBkaXNhYmxlIGhvdmVyIGV2ZW50cyAqL1xuICAgIGRpc2FibGVIb3Zlcj86IGJvb2xlYW47XG5cbiAgICAvKiogdGhpcyBkYXRhIG1heSBiZSBhZGRlZCBieSB0aGUgcmVuZGVyaW5nIGFsZ29yaXRobSAqL1xuICAgIHBhcmVudD86IElIaWVyYXJjaHlOb2RlO1xuICAgIGRlcHRoPzogbnVtYmVyO1xufVxuXG4vKiogaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGlmIHlvdSB3YW50IHRvIGFkanVzdCB3aGF0IG5vZGVzIHRvIGRyYXcgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdyYXBoTm9kZURlY2ltYXRvciB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIG5vZGUgLSBub2RlIHRvIHRlc3QgaWYgaXQgcGFzc2VzIHRoZSBkZWNpbWF0b3JcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBub2RlIHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAgKi9cbiAgICBpc1Zpc2libGU6IChub2RlOiBJSGllcmFyY2h5Tm9kZSkgPT4gYm9vbGVhbjtcbn1cblxuLyoqIGEgc2V0IG9mIGxpbmtzIGFuZCBub2RlcyB0byByZW5kZXIgYXMgYSBjb25uZWN0ZWQgZ3JhcGggKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUhpZXJhcmNoeUdyYXBoIGV4dGVuZHMgSUdyYXBoIHtcbiAgICBsaW5rczogSUhpZXJhcmNoeUdyYXBoTGlua1tdO1xuICAgIG5vZGVzPzogSUhpZXJhcmNoeU5vZGU7XG5cbiAgICAvKiogYWRkIGEgbGVnZW5kIGRlZmluaXRpb24gdG8gcmVuZGVyICovXG4gICAgbGVnZW5kPzogSUxlZ2VuZDtcbiAgICAvKiogdGhlIGNvbnRleHQgbWVudSBkZWZpbml0aW9ucyBmb3Igd2hlbiB0aGUgdXNlciByaWdodCBjbGlja3MgKi9cbiAgICBjb250ZXh0TWVudUl0ZW1zPzogSUNvbnRleHRNZW51SXRlbVtdO1xuICAgIC8qKiBhIGRlY2ltYXRvciB1c2VkIHRvIGNvbnRyb2wgZ3JhcGggbm9kZSB2aXNpYmlsaXR5ICovXG4gICAgZGVjaW1hdG9yPzogSUdyYXBoTm9kZURlY2ltYXRvcjtcbn1cblxuZXhwb3J0IGVudW0gTm9kZVR5cGUge1xuICAgIC8qKiByZW5kZXIgcG9ydCBub2RlcyBhcyBhIGNpcmNsZSAqL1xuICAgIE5vZGVTaW1wbGUsXG4gICAgLyoqIHJlbmRlciBwb3J0IG5vZGVzIGFzIGEgcmVjdGFuZ2xlIHB1dHRpbmcgdGhlIHR5cGUgYXMgdGhlIHRpdGxlICovXG4gICAgTm9kZVJlY3RhbmdsZVxufVxuXG4vKiogYSBub2RlIGluIGEgcG9ydCBkaWFncmFtICovXG5leHBvcnQgaW50ZXJmYWNlIElQb3J0RGlhZ3JhbU5vZGUgZXh0ZW5kcyBJR3JhcGhOb2RlIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHBvcnRzOiB7XG4gICAgICAgIGxlZnQ/OiB7IGtleTogc3RyaW5nIH1bXSxcbiAgICAgICAgcmlnaHQ/OiB7IGtleTogc3RyaW5nIH1bXSxcbiAgICAgICAgdG9wPzogeyBrZXk6IHN0cmluZyB9W10sXG4gICAgICAgIGJvdHRvbT86IHsga2V5OiBzdHJpbmcgfVtdXG4gICAgfSxcbiAgICByZW5kZXJUeXBlPzogTm9kZVR5cGUsXG4gICAgd2lkdGg/OiBudW1iZXIsXG4gICAgaGVpZ2h0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBvcnREaWFncmFtTGluayBleHRlbmRzIElEaWFncmFtTGluayB7XG4gICAgLyoqIGFuIGlkIG9uIHRoZSBmcm9tIG5vZGUgZm9yIGxpbmtzIHRoYXQgd2FudCB0byBzaGFyZSB0aGUgbGluayBwb2ludCBvbiB0aGUgbm9kZSAqL1xuICAgIGZyb21Qb3J0OiBzdHJpbmc7XG4gICAgLyoqIGFuIGlkIG9uIHRoZSB0byBub2RlIGZvciBsaW5rcyB0aGF0IHdhbnQgdG8gc2hhcmUgdGhlIGxpbmsgcG9pbnQgb24gdGhlIG5vZGUgKi9cbiAgICB0b1BvcnQ6IHN0cmluZztcbn1cblxuLyoqIGEgc2V0IG9mIGxpbmtzIGFuZCBub2RlcyB0byByZW5kZXIgYXMgYSBjb25uZWN0ZWQgZ3JhcGggKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBvcnREaWFncmFtIGV4dGVuZHMgSUNvbm5lY3RlZEdyYXBoIHtcbiAgICBsaW5rczogSVBvcnREaWFncmFtTGlua1tdO1xuICAgIG5vZGVzOiBJUG9ydERpYWdyYW1Ob2RlW107XG5cbiAgICAvLyBUT0RPIHJlbW90ZSB0aGlzIGhhY2sgYW5kIHB1dCBpdCB3aGVyZSBpdCBzaG91bGQgZ29cbiAgICBkZWNpbWF0b3I/OiAobm9kZTogYW55KSA9PiBib29sZWFuO1xuICAgIC8qKiBnbG9iYWwgY29udHJvbCBvZiB3aGF0IHR5cGVzIG9mIHJlbmRlciBub2RlcyB0byB1c2UgKi9cbiAgICBub2RlUmVuZGVyVHlwZT86IE5vZGVUeXBlO1xuICAgIC8qKiBkaXNhYmxlIHBvcnQgcmVuZGVyaW5nIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIGlmIG5lZWRlZCAqL1xuICAgIGRpc2FibGVQb3J0UmVuZGVyaW5nPzogYm9vbGVhbjtcbn0iXSwibWFwcGluZ3MiOiI7O0FBd0NBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE4RUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/interface/graph.ts\n");

/***/ }),

/***/ "./src/interface/ui-base.ts":
/*!**********************************!*\
  !*** ./src/interface/ui-base.ts ***!
  \**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\n;\n/**\n * Represents a relative alignment\n*/\nvar Alignment;\n(function (Alignment) {\n    Alignment[Alignment[\"Left\"] = 1] = \"Left\";\n    Alignment[Alignment[\"Right\"] = 2] = \"Right\";\n    Alignment[Alignment[\"Top\"] = 4] = \"Top\";\n    Alignment[Alignment[\"Bottom\"] = 8] = \"Bottom\";\n    Alignment[Alignment[\"None\"] = 0] = \"None\";\n})(Alignment = exports.Alignment || (exports.Alignment = {}));\n; // bitmask Position\nvar EventType;\n(function (EventType) {\n    EventType[EventType[\"CursorStart\"] = 0] = \"CursorStart\";\n    EventType[EventType[\"CursorMove\"] = 1] = \"CursorMove\";\n    EventType[EventType[\"CursorEnd\"] = 2] = \"CursorEnd\";\n    EventType[EventType[\"BrushStart\"] = 3] = \"BrushStart\";\n    EventType[EventType[\"BrushMove\"] = 4] = \"BrushMove\";\n    EventType[EventType[\"BrushEnd\"] = 5] = \"BrushEnd\";\n    EventType[EventType[\"HoverStart\"] = 6] = \"HoverStart\";\n    EventType[EventType[\"HoverEnd\"] = 7] = \"HoverEnd\";\n    EventType[EventType[\"HoverClear\"] = 8] = \"HoverClear\";\n    EventType[EventType[\"FocusStart\"] = 6] = \"FocusStart\";\n    EventType[EventType[\"FocusEnd\"] = 7] = \"FocusEnd\";\n    EventType[EventType[\"FocusClear\"] = 8] = \"FocusClear\";\n    EventType[EventType[\"SelectAdd\"] = 9] = \"SelectAdd\";\n    EventType[EventType[\"SelectRemove\"] = 10] = \"SelectRemove\";\n    EventType[EventType[\"SelectStart\"] = 9] = \"SelectStart\";\n    EventType[EventType[\"SelectEnd\"] = 10] = \"SelectEnd\";\n    EventType[EventType[\"SelectClear\"] = 11] = \"SelectClear\";\n    EventType[EventType[\"Zoom\"] = 12] = \"Zoom\";\n    EventType[EventType[\"Click\"] = 13] = \"Click\";\n    EventType[EventType[\"DoubleClick\"] = 14] = \"DoubleClick\";\n    EventType[EventType[\"RangeUpdate\"] = 15] = \"RangeUpdate\";\n})(EventType = exports.EventType || (exports.EventType = {}));\nvar UIType;\n(function (UIType) {\n    UIType[UIType[\"Unrendered\"] = 0] = \"Unrendered\";\n    UIType[UIType[\"Cartesian\"] = 1] = \"Cartesian\";\n    UIType[UIType[\"Pie\"] = 2] = \"Pie\";\n    UIType[UIType[\"Grid\"] = 3] = \"Grid\";\n    UIType[UIType[\"FlowDiagram\"] = 4] = \"FlowDiagram\";\n    UIType[UIType[\"ForceDirectedGraph\"] = 5] = \"ForceDirectedGraph\";\n    UIType[UIType[\"Sunburst\"] = 6] = \"Sunburst\";\n    UIType[UIType[\"HierarchyGraph\"] = 7] = \"HierarchyGraph\";\n    UIType[UIType[\"PortDiagram\"] = 8] = \"PortDiagram\";\n    UIType[UIType[\"SimpleGraph\"] = 9] = \"SimpleGraph\";\n    UIType[UIType[\"TreeMap\"] = 10] = \"TreeMap\";\n    UIType[UIType[\"Axis\"] = 11] = \"Axis\";\n    UIType[UIType[\"Radar\"] = 12] = \"Radar\";\n})(UIType = exports.UIType || (exports.UIType = {}));\nvar LegendType;\n(function (LegendType) {\n    LegendType[LegendType[\"Discrete\"] = 0] = \"Discrete\";\n    LegendType[LegendType[\"Gradient\"] = 1] = \"Gradient\";\n})(LegendType = exports.LegendType || (exports.LegendType = {}));\nvar LegendOrientation;\n(function (LegendOrientation) {\n    LegendOrientation[LegendOrientation[\"Vertical\"] = 0] = \"Vertical\";\n    LegendOrientation[LegendOrientation[\"Horizontal\"] = 1] = \"Horizontal\";\n})(LegendOrientation = exports.LegendOrientation || (exports.LegendOrientation = {}));\nvar LegendItemShape;\n(function (LegendItemShape) {\n    LegendItemShape[LegendItemShape[\"Rectangle\"] = 0] = \"Rectangle\";\n    LegendItemShape[LegendItemShape[\"Line\"] = 1] = \"Line\";\n    LegendItemShape[LegendItemShape[\"Circle\"] = 2] = \"Circle\";\n})(LegendItemShape = exports.LegendItemShape || (exports.LegendItemShape = {}));\n// Represents a rectangular area.\nclass Rect {\n    constructor(x, y, width, height) {\n        this.x = 0;\n        this.y = 0;\n        this.width = 0;\n        this.height = 0;\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n    }\n    // Returns true if the rectangle contains (x,y).\n    contains(x, y) {\n        return (x >= this.x && x <= this.x + this.width &&\n            y >= this.y && y <= this.y + this.height);\n    }\n}\nexports.Rect = Rect;\n/**\n * Used to manipulate CSS class and style information\n */\nclass Css {\n    constructor(classes, style) {\n        if (classes) {\n            this.addClasses(classes);\n        }\n        else {\n            this.classes = {};\n        }\n        if (style) {\n            this.style = style;\n        }\n        else {\n            this.style = {};\n        }\n    }\n    /**\n     * add a class to the class list\n     * @param classes to add, can be strings separated by spaces\n     *\n     * @return the manager instance\n     */\n    addClasses(classesStr) {\n        let classes = classesStr.split(' ');\n        for (let i = 0; i < classes.length; ++i) {\n            this.classes[classes[i]] = true;\n        }\n        return this;\n    }\n    /**\n     * add a set of styles to the style object\n     * @param style a style object\n     *\n     * @return the manager instance\n     */\n    addStyles(style) {\n        for (let key in style) {\n            this.style[key] = style[key];\n        }\n        return this;\n    }\n    /** set the color value\n     *\n     * @param color a string representing the color to use\n     */\n    setColor(color) {\n        this.addStyles({ color: color });\n        return this;\n    }\n    /** set the opcaity value\n     *\n     * @param opcaity a string representing the color to use\n     */\n    setOpacity(opacity) {\n        this.addStyles({ opacity: opacity });\n        return this;\n    }\n    /**\n     * remove a class from the class list\n     * @param className the class to remove\n     *\n     * @return the manager instance\n     */\n    removeClass(className) {\n        delete this.classes[className];\n        return this;\n    }\n    /**\n     * remove a style from the style map\n     * @param key the name of the style to remove\n     *\n     * @return the manager instance\n     */\n    removeStyle(key) {\n        delete this.style[key];\n        return this;\n    }\n    /**\n     * get the list of classes\n     *\n     * @return a list of classes for this manager\n     */\n    getClasses() {\n        return Object.keys(this.classes);\n    }\n    /**\n     * helper to get a space separated list of classes\n     *\n     * @return a string list of classes for this manager\n     */\n    getClassString() {\n        let ret = '';\n        for (let className in this.classes) {\n            ret += className + ' ';\n        }\n        return ret;\n    }\n    /**\n     * get the style map\n     *\n     * @return an object that contains key/value style pairs\n     */\n    getStyles() {\n        return this.style;\n    }\n    /**\n     * helper to get a json representation of the style map\n     *\n     * @return the json string of the style map\n     */\n    getStyleString() {\n        return JSON.stringify(this.style);\n    }\n}\nexports.Css = Css;\n;\n/**\n * implemented a basic API on top of the IRange object\n */\nclass Range {\n    constructor(min, max) {\n        this.min = min;\n        this.max = max;\n    }\n    /**\n     * set the min value for the range\n     *\n     * @return the min range value\n     */\n    setMin(min) {\n        this.min = min;\n        return this;\n    }\n    /**\n     * get the min value for the range\n     *\n     * @return the min range value\n     */\n    getMin() {\n        return this.min;\n    }\n    /**\n     * set the max value for the range\n     *\n     * @return the max range value\n     */\n    setMax(max) {\n        this.max = max;\n        return this;\n    }\n    /**\n     * get the max value for the range\n     *\n     * @return the max range value\n     */\n    getMax() {\n        return this.max;\n    }\n}\nexports.Range = Range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW50ZXJmYWNlL3VpLWJhc2UudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvLi9zcmMvaW50ZXJmYWNlL3VpLWJhc2UudHM/YjgzZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvck1hbmFnZXIgfSBmcm9tIFwiLi4vY29yZS9jb2xvci1tYW5hZ2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvb2x0aXBEYXRhIHtcbiAgICAvKiogdGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyB0b29sdGlwICovXG4gICAgc291cmNlOiBVSUVsZW1lbnQsXG4gICAgLyoqIHRoZSBuYW1lIG9mIHRoZSBncm91cCBmb3IgdGhpcyB0b29sdGlwICovXG4gICAgZ3JvdXA6IHN0cmluZyxcbiAgICAvKiogYSBsaXN0IG9mIGRhdGEgdG8gYmUgc2hvd24gaW4gdGhlIHRvb2x0aXAgKi9cbiAgICBtZXRyaWNzOiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50IHtcbiAgICAvKiogc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGV2ZW50IGZyb21cbiAgICAgKiBbW0V2ZW50VHlwZV1dXG4gICAgICovXG4gICAgZXZlbnQ/OiBFdmVudFR5cGUsXG4gICAgc2VsZWN0aW9uPzogc3RyaW5nLFxuICAgIHNlbGVjdGlvbktleT86IHN0cmluZyxcbiAgICAvKiogZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50ICovXG4gICAgZGF0YT86IGFueSxcbiAgICAvKiogdG9vbHRpcCB1c2VkIHRvIGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgZGF0YSAqL1xuICAgIHRvb2x0aXA/OiBhbnlcbiAgICAvKiogdGhlIG9yaWdpbmFsIGNhbGxlciB3aG8gY2F1c2VkIHRoaXMgZXZlbnQgdG8gYmUgZmlyZWQqL1xuICAgIGNhbGxlcj86IFVJRWxlbWVudCxcbiAgICAvKiogeFN0YXJ0IGJvdW5kcyBvZiBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudCAqL1xuICAgIHhTdGFydD86IG51bWJlcixcbiAgICAvKiogeEVuZCBib3VuZHMgb2YgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXZlbnQgKi9cbiAgICB4RW5kPzogbnVtYmVyLFxuICAgIC8qKiB5U3RhcnQgYm91bmRzIG9mIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV2ZW50ICovXG4gICAgeVN0YXJ0PzogbnVtYmVyLFxuICAgIC8qKiB5RW5kIGJvdW5kcyBvZiBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudCAqL1xuICAgIHlFbmQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW9ucyB7XG4gICAgLyoqIGF0dGVtcHQgdG8gZml0IGEgZ3JhcGggaW50byB0aGUgdmlldyBzcGVjaWZpZWQgYnkgdGhlXG4gICAgICogW1tJT3B0aW9uc11dXG4gICAgICovXG4gICAgZml0VG9XaW5kb3c/OiBib29sZWFuLFxuICAgIC8qKiBibGluayBhc3NvY2FpdGVkIGRhdGEgd2hlbiBhIHNlbGVjdGlvbiBpcyBkb25lICovXG4gICAgZGlzYWJsZVNlbGVjdGlvbj86IGJvb2xlYW4sXG4gICAgc2VsZWN0aW9uQmxpbms/OiBib29sZWFuLFxuICAgIGRpc2FibGVCYWNrZ3JvdW5kPzogYm9vbGVhbixcbiAgICAvKiogdGVsbCBhIHdpZGdldCB0byBpZ25vcmUgdGhlIGhvdmVyIGV2ZW50cyAqL1xuICAgIGRpc2FibGVIb3Zlcj86IGJvb2xlYW4sXG4gICAgZGlzYWJsZUF1dG9SZXNpemVXaWR0aD86IGJvb2xlYW4sXG4gICAgZGlzYWJsZUF1dG9SZXNpemVIZWlnaHQ/OiBib29sZWFuLFxuICAgIGhpZGVSb3dUaXRsZT86IGJvb2xlYW4sXG5cbiAgICAvKiogQGRlcHJlY2F0ZWQgZGVwcmVjYXRlZCBmb3IgZm9jdXNSYWRpdXNEZWx0YSAqL1xuICAgIGhvdmVyUmFkaXVzRGVsdGE/OiBudW1iZXIsXG4gICAgZm9jdXNSYWRpdXNEZWx0YT86IG51bWJlcixcblxuICAgIC8vIHNhdmUgcmVuZGVyZWQgdmlld3MgYXMgaW1hZ2UgaWYgcG9zc2libGVcbiAgICBlbmFibGVTYXZlQXNJbWFnZT86IGJvb2xlYW4sXG5cbiAgICAvLyBhdXRvIHBpY2sgYSBkZWZhdWx0IHJlbmRlcmVyIHVubGVzcyBmb3JjZWQgYnkgdGhlc2UgZmxhZ3NcbiAgICBmb3JjZVN2Z1JlbmRlcmVyPzogYm9vbGVhbixcbiAgICBmb3JjZUNhbnZhc1JlbmRlcmVyPzogYm9vbGVhbixcblxuICAgIC8qKiBAZGVwcmVjYXRlZCBXZWJHTCBpcyBub3cgdGhlIGRlZmF1bHQgaW4gUElYSSBzbyB3ZSBoYXZlIHRvIGZvcmNlIHRoZSBjYW52YXMgcmVuZGVyZXIgKi9cbiAgICBmb3JjZVdlYkdMUmVuZGVyZXI/OiBib29sZWFuLFxuXG4gICAgLyoqIGJydXNoIG9wdGlvbnMgKi9cbiAgICBkaXNhYmxlQnJ1c2g/OiBib29sZWFuLFxuICAgIGZvcmNlQnJ1c2hUb0Zyb250PzogYm9vbGVhbixcblxuICAgIC8qKiBhbmltYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMsIGRlZmF1bHRzIHRvIDEwMDAgKiovXG4gICAgYW5pbWF0ZUR1cmF0aW9uPzogbnVtYmVyLFxuICAgIGVuYWJsZVhZWm9vbT86IGJvb2xlYW4sXG4gICAgZGlzYWJsZVpvb21WaWV3VXBkYXRlPzogYm9vbGVhbixcbiAgICBkaXNhYmxlWm9vbU1vdXNlV2hlZWw/OiBib29sZWFuO1xuICAgIHNob3dTZWxlY3Rpb25Bc092ZXJsYXk/OiBib29sZWFuLFxuXG4gICAgLyoqIGhhbmRsZSByZXNpemUgY29udHJvbHMgKi9cbiAgICBkaXNhYmxlUmVzaXplPzogYm9vbGVhbixcbiAgICBkaXNhYmxlUmVzaXplUmlnaHQ/OiBib29sZWFuLFxuICAgIGRpc2FibGVSZXNpemVCb3R0b20/OiBib29sZWFuLFxuICAgIGRpc2FibGVSZXNpemVMZWZ0PzogYm9vbGVhbixcblxuICAgIC8qKiB0b29sdGlwIGJlaGF2aW9yICovXG4gICAgZGlzYWJsZUhvdmVyVG9vbHRpcD86IGJvb2xlYW4sIC8vIERFUFJFQ0FURUQgZm9yIGRpc2FibGVUb29sdGlwXG4gICAgZGlzYWJsZVRvb2x0aXA/OiBib29sZWFuLFxuICAgIHRvb2x0aXBEZWxheT86IG51bWJlcjtcblxuICAgIC8qKiBhc3luYyBkaXNwbGF5IGJlaGF2aW9yICovXG4gICAgZW5hYmxlV2ViV29ya2Vycz86IGJvb2xlYW47XG4gICAgLyoqIERFUFJFQ0FURUQgKi9cbiAgICBkaXNhYmxlV2ViV29ya2Vycz86IGJvb2xlYW47XG4gICAgZGlzYWJsZVByb2dyZXNzU3Bpbm5lcj86IGJvb2xlYW47XG5cbiAgICBoZWlnaHQ/OiBhbnksXG4gICAgd2lkdGg/OiBhbnksXG5cbiAgICB4U3RhcnQ/OiBudW1iZXIsXG4gICAgeEVuZD86IG51bWJlcixcbiAgICB5U3RhcnQ/OiBudW1iZXIsXG4gICAgeUVuZD86IG51bWJlcixcbiAgICB0b3BNYXJnaW4/OiBudW1iZXIsXG4gICAgYm90dG9tTWFyZ2luPzogbnVtYmVyLFxuICAgIGxlZnRNYXJnaW4/OiBudW1iZXIsXG4gICAgcmlnaHRNYXJnaW4/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnVmZmVyPERhdGFUeXBlPiB7XG4gICAgcHVzaChkOiBEYXRhVHlwZSk6IHZvaWQ7XG4gICAgZ2V0KGluZGV4OiBudW1iZXIpOiBEYXRhVHlwZTtcbiAgICBsZW5ndGgoKTogbnVtYmVyO1xuICAgIGdldERhdGEoKTogRGF0YVR5cGVbXTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVsYXRpdmUgYWxpZ25tZW50XG4qL1xuZXhwb3J0IGVudW0gQWxpZ25tZW50IHtcbiAgICBMZWZ0ID0gMSxcbiAgICBSaWdodCA9IDIsXG4gICAgVG9wID0gNCxcbiAgICBCb3R0b20gPSA4LFxuICAgIE5vbmUgPSAwXG59OyAgIC8vIGJpdG1hc2sgUG9zaXRpb25cblxuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBDdXJzb3JTdGFydCxcbiAgICBDdXJzb3JNb3ZlLFxuICAgIEN1cnNvckVuZCxcbiAgICBCcnVzaFN0YXJ0LFxuICAgIEJydXNoTW92ZSxcbiAgICBCcnVzaEVuZCxcbiAgICBIb3ZlclN0YXJ0LFxuICAgIEhvdmVyRW5kLFxuICAgIEhvdmVyQ2xlYXIsXG4gICAgRm9jdXNTdGFydCA9IEhvdmVyU3RhcnQsXG4gICAgRm9jdXNFbmQgPSBIb3ZlckVuZCxcbiAgICBGb2N1c0NsZWFyID0gSG92ZXJDbGVhcixcbiAgICBTZWxlY3RBZGQsXG4gICAgU2VsZWN0UmVtb3ZlLFxuICAgIFNlbGVjdFN0YXJ0ID0gU2VsZWN0QWRkLFxuICAgIFNlbGVjdEVuZCA9IFNlbGVjdFJlbW92ZSxcbiAgICBTZWxlY3RDbGVhcixcbiAgICBab29tLFxuICAgIENsaWNrLFxuICAgIERvdWJsZUNsaWNrLFxuICAgIFJhbmdlVXBkYXRlXG59XG5cbmV4cG9ydCBlbnVtIFVJVHlwZSB7XG4gICAgVW5yZW5kZXJlZCxcbiAgICBDYXJ0ZXNpYW4sXG4gICAgUGllLFxuICAgIEdyaWQsXG4gICAgRmxvd0RpYWdyYW0sXG4gICAgRm9yY2VEaXJlY3RlZEdyYXBoLFxuICAgIFN1bmJ1cnN0LFxuICAgIEhpZXJhcmNoeUdyYXBoLFxuICAgIFBvcnREaWFncmFtLFxuICAgIFNpbXBsZUdyYXBoLFxuICAgIFRyZWVNYXAsXG4gICAgQXhpcyxcbiAgICBSYWRhclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb250ZXh0TWVudUl0ZW0ge1xuICAgIC8qKiBhZGQgYSBjbGlja2FibGUgaXRlbSB0aXRsZSAqL1xuICAgIHRpdGxlPzogc3RyaW5nLFxuXG4gICAgLyoqIGFkZCBhIGNsaWNrYWJsZSBpdGVtIGNhbGxiYWNrICovXG4gICAgYWN0aW9uPzogKGVsZW06IGFueSwgZGF0YTogYW55LCBpbmRleDogYW55KSA9PiB2b2lkO1xuXG4gICAgLyoqIGRpc2FibGUgdGhpcyBjbGlja2FibGUgaXRlbSAqL1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcblxuICAgIC8qKiB1c2VkIHRvIGFkZCBhIGRpdmlkZXIgKi9cbiAgICBkaXZpZGVyPzogYm9vbGVhbjtcblxuICAgIHN1Ym1lbnU/OiBJQ29udGV4dE1lbnVJdGVtW107XG4gICAgc3VibWVudURpdj86IEhUTUxEaXZFbGVtZW50O1xufVxuXG5leHBvcnQgZW51bSBMZWdlbmRUeXBlIHtcbiAgICBEaXNjcmV0ZSxcbiAgICBHcmFkaWVudFxufVxuXG5leHBvcnQgZW51bSBMZWdlbmRPcmllbnRhdGlvbiB7XG4gICAgVmVydGljYWwsXG4gICAgSG9yaXpvbnRhbFxufVxuXG5leHBvcnQgZW51bSBMZWdlbmRJdGVtU2hhcGUge1xuICAgIFJlY3RhbmdsZSxcbiAgICBMaW5lLFxuICAgIENpcmNsZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdlbmRJdGVtIHtcbiAgICBrZXk6IGFueSxcbiAgICBuYW1lPzogc3RyaW5nLFxuICAgIGNvbG9yPzogc3RyaW5nLFxuICAgIG9wYWNpdHk/OiBzdHJpbmcsXG4gICAgc2hhcGU/OiBzdHJpbmcgfCBMZWdlbmRJdGVtU2hhcGUsXG4gICAgdmFsdWU/OiBhbnksXG4gICAgdW5pdHM/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnZW5kRGVmaW5pdGlvbiB7XG4gICAgaXRlbXM6IElMZWdlbmRJdGVtW107XG4gICAgdHlwZT86IExlZ2VuZFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2VuZCB7XG4gICAgYWxpZ25tZW50OiBBbGlnbm1lbnQ7XG4gICAgb3JpZW50YXRpb24/OiBMZWdlbmRPcmllbnRhdGlvbjtcbiAgICBzaG93VmFsdWU/OiBib29sZWFuO1xuICAgIGRlZmluaXRpb24/OiBJTGVnZW5kRGVmaW5pdGlvbjtcblxuICAgIC8qKiBicnVzaCBzZWxlY3RvaW4gcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIGNvbnRleHQgbWVudSAqL1xuICAgIGNvbnRleHRNZW51SXRlbXM/OiBJQ29udGV4dE1lbnVJdGVtW107XG5cbiAgICAvKiogY2FsbGJhY2sgd2hlbiB1c2VyIGNsaWNrcyBvbiBhbiBpdGVtICovXG4gICAgb25DbGljaz86IChldmVudDogSUV2ZW50KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGVja2JveFRyZWVOb2RlIHtcbiAgICBpZDogYW55O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjaGlsZHJlbjogSUNoZWNrYm94VHJlZU5vZGVbXTtcbiAgICBwYXJlbnQ/OiBJQ2hlY2tib3hUcmVlTm9kZTtcbiAgICBvcGVuPzogYm9vbGVhbjtcbiAgICBjaGVja2VkPzogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgICBwcm9wb2dhdGVDaGFuZ2U/OiBib29sZWFuO1xuICAgIG5vdENoZWNrYWJsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVUlSZW5kZXJlciB7XG4gICAgLyoqIGZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCAqL1xuICAgIGRlc3Ryb3k/OiAoY2FsbGVyOiBVSUVsZW1lbnQpID0+IHZvaWQ7XG5cbiAgICBzZXREaXY/OiBhbnk7XG5cbiAgICBzZXRPblJlbmRlckNhbGxiYWNrPzogKGNhbGxiYWNrOiAoZWxlbTogVUlFbGVtZW50LCBvcHRpb25zOiBJT3B0aW9ucykgPT4gdm9pZCkgPT4gdm9pZDtcblxuICAgIC8qKiBjYWxsYmFja3MgZm9yIHdoZW4gdGhpcyBlbGVtZW50IGhhcyBiZWVuIHVwZGF0ZWQsIHVzZWQgc28gdGhlIHJlbmRlciBvd25lclxuICAgICAqIGNhbiBtYWludGFpbiBzdGF0ZSBpZiB0aGV5IHdhbnQgb2YgZWFjaCBlbGVtZW50XG4gICAgICovXG4gICAgb25SZW5kZXI/OiAoY2FsbGVyOiBVSUVsZW1lbnQsIG9wdGlvbnM6IElPcHRpb25zKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgKCdEZXByZWNhdGVkIHNpbmNlIDEuMTQuMCBpbiBmYXZvciBvZiBmb2N1cy4gIFdpbGwgYmUgcmVtb3ZlZCBpbiAyLngnKVxuICAgICAqIGhvdmVyIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCB0byBmaXJlIHRoZSBob3ZlciBldmVudCBvblxuICAgICAqIEBwYXJhbSBldmVudCBhbnkgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBob3Zlcj8oZWxlbWVudDogVUlFbGVtZW50LCBldmVudDogSUV2ZW50KTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIGZvY3VzIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCB0byBmaXJlIHRoZSBmb2N1cyBldmVudCBvblxuICAgICAqIEBwYXJhbSBldmVudCBhbnkgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBmb2N1cz8oZWxlbWVudDogVUlFbGVtZW50LCBldmVudDogSUV2ZW50KTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIHNlbGVjdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgdG8gZmlyZSB0aGUgY2xpY2sgZXZlbnQgb25cbiAgICAgKiBAcGFyYW0gZXZlbnQgYW55IGV2ZW50IHRvIHBhc3MgdG8gdGhlIHJlbmRlcmVyXG4gICAgICovXG4gICAgc2VsZWN0PyhlbGVtZW50OiBVSUVsZW1lbnQsIGV2ZW50OiBJRXZlbnQpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogem9vbSBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgdG8gZmlyZSB0aGUgem9vbSBldmVudCBvblxuICAgICAqIEBwYXJhbSBldmVudCBhbnkgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgKi9cbiAgICB6b29tPyhlbGVtZW50OiBVSUVsZW1lbnQsIGV2ZW50OiBJRXZlbnQpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogYnJ1c2ggZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IHRvIGZpcmUgdGhlIGJydXNoIGV2ZW50IG9uXG4gICAgICogQHBhcmFtIGV2ZW50IGFueSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIGJydXNoPyhlbGVtZW50OiBVSUVsZW1lbnQsIGV2ZW50OiBJRXZlbnQpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogY3Vyc29yIG1vdmVkIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCB0byBmaXJlIHRoZSBtb3ZlIGV2ZW50IG9uXG4gICAgICogQHBhcmFtIGV2ZW50IGFueSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIGN1cnNvckNoYW5nZT8oZWxlbWVudDogVUlFbGVtZW50LCBldmVudDogSUV2ZW50KTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIFJlbmRlciB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHRoZSBlbGVtZW50IHRvIHJlbmRlclxuICAgICAqL1xuICAgIHJlbmRlcihlbGVtZW50OiBVSUVsZW1lbnQsIG9wdGlvbnM/OiBJT3B0aW9ucyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBJbnZhbGlkYXRlIHRoZSBnaXZlbiBlbGVtZW50LiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbVxuICAgICAqIHJlbmRlciBpbiB0aGF0IGl0IGNvbXBsZXRlbHkgcmVkcmF3cyB0aGUgZWxlbWVudCBpbnN0ZWFkIG9mXG4gICAgICoganVzdCByZS1yZW5kZXJpbmcgaXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZWxlbWVudCB0byBpbnZhbGlkYXRlXG4gICAgICovXG4gICAgaW52YWxpZGF0ZShlbGVtZW50OiBVSUVsZW1lbnQsIG9wdGlvbnM/OiBJT3B0aW9ucyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGNzcyBhY3R1YWxseSByZW5kZXJlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIGxlZ2VuZCBzd2F0Y2hlc1xuICAgICAqIGFuZCB0aGUgbGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZWxlbWVudCB0byBnZXQgdGhlIHJlbmRlcmVkIENTUyBpbmZvcm1hdGlvbiBmb3JcbiAgICAgKlxuICAgICAqIEByZXR1cm4gVGhlIGNzcyByZW5kZXJlZCwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCBiZWZvcmUgdGhlIGNoYXJ0IGlzXG4gICAgICogICByZW5kZXJlZFxuICAgICAqL1xuICAgIGdldFJlbmRlcmVkQ3NzPyhlbGVtZW50OiBVSUVsZW1lbnQpOiBDc3M7XG5cbiAgICAvKipcbiAgICAgKiB0b29sdGlwIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbmRlcmVyIGFuIElSZW5kZXJlciBvYmplY3QgdGhhdCBoYXMgdGhlIHRvb2x0aXBcbiAgICAgKiBAcGFyYW0gZXZlbnQgYW55IGV2ZW50IHRvIHBhc3MgdG8gdGhlIHJlbmRlcmVyXG4gICAgICovXG4gICAgZ2V0VG9vbHRpcERhdGE/KGVsZW1lbnQ6IFVJRWxlbWVudCwgZXZlbnQ6IElFdmVudCk6IElUb29sdGlwRGF0YVtdO1xuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSBvcHRpb25zIHRoZSByZW5kZXJlciBpcyB1c2luZyBmb3IgdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZWxlbWVudCB0byBpbnZhbGlkYXRlXG4gICAgICovXG4gICAgZ2V0T3B0aW9ucyhlbGVtZW50OiBVSUVsZW1lbnQpOiBJT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgY29sb3JzIHRoZSByZW5kZXJlciBpcyB1c2luZyBmb3IgdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZWxlbWVudCB0byBpbnZhbGlkYXRlXG4gICAgICovXG4gICAgZ2V0Q29sb3JNYW5hZ2VyKCk6IENvbG9yTWFuYWdlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVSUVsZW1lbnQge1xuICAgIHR5cGU/OiBVSVR5cGU7XG4gICAgb3B0aW9ucz86IElPcHRpb25zO1xuICAgIHJlbmRlcmVyPzogVUlSZW5kZXJlcjtcbiAgICBtYW5hZ2VyPzogVUlFbGVtZW50TWFuYWdlcjtcblxuICAgIGFwaT86IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkICgnRGVwcmVjYXRlZCBzaW5jZSAxLjE0LjAgaW4gZmF2b3Igb2YgZm9jdXMuICBXaWxsIGJlIHJlbW92ZWQgaW4gMi54JylcbiAgICAgICAgICogZmlyZSBhIGhvdmVyIGV2ZW50IGZvciB0aGlzIGVsZW1lbnRcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGV2ZW50IGFueSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAgICAgKi9cbiAgICAgICAgaG92ZXI/OiAoZXZlbnQ/OiBJRXZlbnQpID0+IHZvaWQ7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZpcmUgYSBmb2N1cyBldmVudCBmb3IgdGhpcyBlbGVtZW50XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBldmVudCBhbnkgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgICAgICovXG4gICAgICAgIGZvY3VzPzogKGV2ZW50PzogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBmaXJlIGEgc2VsZWN0IGV2ZW50IGZvciB0aGlzIGVsZW1lbnRcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGV2ZW50IGFueSBldmVudCB0byBwYXNzIHRvIHRoZSByZW5kZXJlclxuICAgICAgICAgKi9cbiAgICAgICAgc2VsZWN0PzogKGV2ZW50PzogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBmaXJlIGEgem9vbSBldmVudCBmb3IgdGhpcyBlbGVtZW50XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBldmVudCBhbnkgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgICAgICovXG4gICAgICAgIHpvb20/OiAoZXZlbnQ/OiBJRXZlbnQpID0+IHZvaWQ7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZpcmUgYSBtb3VzZS90b3VjaCBjaGFuZ2UgZXZlbnQgZm9yIHRoaXMgZWxlbWVudFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZXZlbnQgYW55IGV2ZW50IHRvIHBhc3MgdG8gdGhlIHJlbmRlcmVyXG4gICAgICAgICAqL1xuICAgICAgICBjdXJzb3JDaGFuZ2U/OiAoZXZlbnQ/OiBJRXZlbnQpID0+IHZvaWQ7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZpcmUgYSBicnVzaCBldmVudCBmb3IgdGhpcyBlbGVtZW50XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBldmVudCBhbnkgZXZlbnQgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgICAgICovXG4gICAgICAgIGJydXNoPzogKGV2ZW50PzogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBwYW4gdG8gYSBnaXZlbiBldmVudCBsb2NhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgcGFuPzogKGV2ZW50PzogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW5kZXIgdGhlIGVsZW1lbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSByZW5kZXJlciBhbiBJUmVuZGVyZXIgb2JqZWN0IHRoYXQgY2FuIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgYW55IG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgcmVuZGVyZXJcbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcj86IChyZW5kZXJlcj86IFVJUmVuZGVyZXIsIG9wdGlvbnM/OiBJT3B0aW9ucykgPT4gUHJvbWlzZTxhbnk+O1xuXG4gICAgICAgIGdldE9wdGlvbnM/OiAoKSA9PiBJT3B0aW9ucztcbiAgICAgICAgc2F2ZUltYWdlPzogKCkgPT4gdm9pZDtcbiAgICAgICAgY3JlYXRlSW1hZ2U/OiAoKSA9PiB2b2lkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCB0b29sdGlwIGRhdGEgZm9yIHRoZSBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgYW55IGV2ZW50IHRvIHBhc3MgdG8gdGhlIHJlbmRlcmVyXG4gICAgICovXG4gICAgZ2V0VG9vbHRpcD86IChldmVudD86IElFdmVudCkgPT4gSVRvb2x0aXBEYXRhW107XG5cbiAgICAvKipcbiAgICAgKiBjYWxsYmFjayB3aGVuIGEgdG9vbHRpcCBvY2N1cnMgaW4gdGhpcyBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHJlbGF0ZWQgdG8gdGhpcyBjYWxsYmFja1xuICAgICAqL1xuICAgIG9uVG9vbHRpcD86IChldmVudDogSUV2ZW50KSA9PiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBjYWxsYmFjayB3aGVuIGEgaG92ZXIgb2NjdXJzIGluIHRoaXMgZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCByZWxhdGVkIHRvIHRoaXMgY2FsbGJhY2tcbiAgICAgKi9cbiAgICBvbkhvdmVyPzogKGV2ZW50OiBJRXZlbnQpID0+IHZvaWQ7XG5cbiAgICAvKiogY2FsbGJhY2sgd2hlbiB1c2VyIGNsaWNrcyBvbiBhbiBpdGVtICovXG4gICAgb25DbGljaz86IChldmVudDogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgLyoqIHRoZSBjYWxsYmFjayB3aGVuIGFuIGl0ZW0gaW4gdGhpcyBkYXRhIGlzIGRvdWJsZSBjbGlja2VkXG4gICAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgaXRlbSB0aGF0IHdhcyBjbGlja2VkXG4gICAgICovXG4gICAgb25Eb3VibGVDbGljaz86IChldmVudDogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogY2FsbGJhY2sgd2hlbiBhIHpvb20gYWN0aW9uIG9jY3VycyBpbiB0aGlzIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgcmVsYXRlZCB0byB0aGlzIGNhbGxiYWNrXG4gICAgICovXG4gICAgb25ab29tPzogKGV2ZW50OiBJRXZlbnQpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBjYWxsYmFjayB3aGVuIGEgYnJ1c2ggYWN0aW9uIG9jY3VycyBpbiB0aGlzIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgcmVsYXRlZCB0byB0aGlzIGNhbGxiYWNrXG4gICAgICovXG4gICAgb25CcnVzaD86IChldmVudDogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogY2FsbGJhY2sgd2hlbiB0aGUgY3Vyc29yIGNoYW5nZSBvY2N1cnMgaW4gdGhpcyBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHJlbGF0ZWQgdG8gdGhpcyBjYWxsYmFja1xuICAgICAqL1xuICAgIG9uQ3Vyc29yQ2hhbmdlZD86IChldmVudDogSUV2ZW50KSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogY2FsbGJhY2sgd2hlbiBhIHJlLXJlbmRlciBvY2N1cnMgaW4gdGhpcyBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyB1c2VkIHdoZW4gcmVuZGVyIHdhcyBjYWxsZWRcbiAgICAgKi9cbiAgICBvblJlbmRlcj86IChvcHRpb25zOiBJT3B0aW9ucykgPT4gdm9pZDtcblxuICAgIGhhbmRsZVVwZGF0ZT86IChjYWxsZXI6IFVJRWxlbWVudCwgb3B0aW9uczogSU9wdGlvbnMpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBnZXQgYWxsIGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVuZGVyIGNhbGwgb2YgdGhpcyBVSUVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRFbGVtZW50cz86ICgpID0+IFVJRWxlbWVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZWN0IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgcmlnaHQ/OiBudW1iZXI7XG4gICAgYm90dG9tPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDc3Mge1xuICAgIGNsYXNzZXM/OiB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbiB9O1xuICAgIHN0eWxlPzogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSYW5nZSB7XG4gICAgbWluOiBudW1iZXI7XG4gICAgbWF4OiBudW1iZXI7XG59XG5cbi8vIFJlcHJlc2VudHMgYSByZWN0YW5ndWxhciBhcmVhLlxuZXhwb3J0IGNsYXNzIFJlY3QgaW1wbGVtZW50cyBJUmVjdCB7XG4gICAgcHVibGljIHg6IG51bWJlciA9IDA7XG4gICAgcHVibGljIHk6IG51bWJlciA9IDA7XG4gICAgcHVibGljIHdpZHRoOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBoZWlnaHQ6IG51bWJlciA9IDA7XG5cbiAgICBjb25zdHJ1Y3Rvcih4PzogbnVtYmVyLCB5PzogbnVtYmVyLCB3aWR0aD86IG51bWJlciwgaGVpZ2h0PzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByZWN0YW5nbGUgY29udGFpbnMgKHgseSkuXG4gICAgcHVibGljIGNvbnRhaW5zKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoICYmXG4gICAgICAgICAgICB5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59XG5cbi8qKlxuICogVXNlZCB0byBtYW5pcHVsYXRlIENTUyBjbGFzcyBhbmQgc3R5bGUgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIENzcyBpbXBsZW1lbnRzIElDc3Mge1xuICAgIHB1YmxpYyBjbGFzc2VzOiB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbiB9O1xuICAgIHB1YmxpYyBzdHlsZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9O1xuXG4gICAgY29uc3RydWN0b3IoY2xhc3Nlcz86IHN0cmluZywgc3R5bGU/OiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0pIHtcbiAgICAgICAgaWYgKGNsYXNzZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2xhc3NlcyhjbGFzc2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NlcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlID0ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGQgYSBjbGFzcyB0byB0aGUgY2xhc3MgbGlzdFxuICAgICAqIEBwYXJhbSBjbGFzc2VzIHRvIGFkZCwgY2FuIGJlIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IHNwYWNlc1xuICAgICAqXG4gICAgICogQHJldHVybiB0aGUgbWFuYWdlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRDbGFzc2VzKGNsYXNzZXNTdHI6IHN0cmluZyk6IENzcyB7XG4gICAgICAgIGxldCBjbGFzc2VzID0gY2xhc3Nlc1N0ci5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3Nlc1tjbGFzc2VzW2ldXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIGEgc2V0IG9mIHN0eWxlcyB0byB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICogQHBhcmFtIHN0eWxlIGEgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHRoZSBtYW5hZ2VyIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIGFkZFN0eWxlcyhzdHlsZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9KTogQ3NzIHtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlW2tleV0gPSBzdHlsZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKiBzZXQgdGhlIGNvbG9yIHZhbHVlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29sb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2xvciB0byB1c2VcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q29sb3IoY29sb3I6IHN0cmluZyk6IENzcyB7XG4gICAgICAgIHRoaXMuYWRkU3R5bGVzKHsgY29sb3I6IGNvbG9yIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogc2V0IHRoZSBvcGNhaXR5IHZhbHVlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BjYWl0eSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbG9yIHRvIHVzZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRPcGFjaXR5KG9wYWNpdHk6IG51bWJlcik6IENzcyB7XG4gICAgICAgIHRoaXMuYWRkU3R5bGVzKHsgb3BhY2l0eTogb3BhY2l0eSB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIGEgY2xhc3MgZnJvbSB0aGUgY2xhc3MgbGlzdFxuICAgICAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIGNsYXNzIHRvIHJlbW92ZVxuICAgICAqXG4gICAgICogQHJldHVybiB0aGUgbWFuYWdlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IENzcyB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNsYXNzZXNbY2xhc3NOYW1lXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIGEgc3R5bGUgZnJvbSB0aGUgc3R5bGUgbWFwXG4gICAgICogQHBhcmFtIGtleSB0aGUgbmFtZSBvZiB0aGUgc3R5bGUgdG8gcmVtb3ZlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHRoZSBtYW5hZ2VyIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZVN0eWxlKGtleTogc3RyaW5nKTogQ3NzIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3R5bGVba2V5XTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSBsaXN0IG9mIGNsYXNzZXNcbiAgICAgKlxuICAgICAqIEByZXR1cm4gYSBsaXN0IG9mIGNsYXNzZXMgZm9yIHRoaXMgbWFuYWdlclxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2xhc3Nlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaGVscGVyIHRvIGdldCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXNcbiAgICAgKlxuICAgICAqIEByZXR1cm4gYSBzdHJpbmcgbGlzdCBvZiBjbGFzc2VzIGZvciB0aGlzIG1hbmFnZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2xhc3NTdHJpbmcoKSB7XG4gICAgICAgIGxldCByZXQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgY2xhc3NOYW1lIGluIHRoaXMuY2xhc3Nlcykge1xuICAgICAgICAgICAgcmV0ICs9IGNsYXNzTmFtZSArICcgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgc3R5bGUgbWFwXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGtleS92YWx1ZSBzdHlsZSBwYWlyc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdHlsZXMoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaGVscGVyIHRvIGdldCBhIGpzb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0eWxlIG1hcFxuICAgICAqXG4gICAgICogQHJldHVybiB0aGUganNvbiBzdHJpbmcgb2YgdGhlIHN0eWxlIG1hcFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdHlsZVN0cmluZygpOiBhbnkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5zdHlsZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBpbXBsZW1lbnRlZCBhIGJhc2ljIEFQSSBvbiB0b3Agb2YgdGhlIElSYW5nZSBvYmplY3RcbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlIGltcGxlbWVudHMgSVJhbmdlIHtcbiAgICBwdWJsaWMgbWluOiBudW1iZXI7XG4gICAgcHVibGljIG1heDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXQgdGhlIG1pbiB2YWx1ZSBmb3IgdGhlIHJhbmdlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHRoZSBtaW4gcmFuZ2UgdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0TWluKG1pbjogbnVtYmVyKTogUmFuZ2Uge1xuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSBtaW4gdmFsdWUgZm9yIHRoZSByYW5nZVxuICAgICAqXG4gICAgICogQHJldHVybiB0aGUgbWluIHJhbmdlIHZhbHVlXG4gICAgICovXG4gICAgcHVibGljIGdldE1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldCB0aGUgbWF4IHZhbHVlIGZvciB0aGUgcmFuZ2VcbiAgICAgKlxuICAgICAqIEByZXR1cm4gdGhlIG1heCByYW5nZSB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRNYXgobWF4OiBudW1iZXIpOiBSYW5nZSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIG1heCB2YWx1ZSBmb3IgdGhlIHJhbmdlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHRoZSBtYXggcmFuZ2UgdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXg7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVJRWxlbWVudE1hbmFnZXIge1xuICAgIC8qKlxuICAgICAqIGFkZCBhIGVsZW0gdG8gdGhlIG1hbmFnZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIGFkZGVkXG4gICAgICogQHBhcmFtIHRvb2x0aXBHcm91cE5hbWUgLSBOYW1lIG9mIHRoZSBncm91cCB0aGF0IHRoaXMgZWxlbSBzaG91bGQgYmUgXCJnYW5nZWRcIlxuICAgICAqICAgd2l0aCB3aGVuIHNob3dpbmcgdG9vbHRpcHMuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGlzIGVsZW0gd2lsbCBub3QgYmUgXCJnYW5nZWRcIiB3aXRoIGFueVxuICAgICAqICAgb3RoZXIgZWxlbS5cbiAgICAgKiBAcGFyYW0gaGlnaGxpZ2h0R3JvdXBOYW1lIC0gTmFtZSBvZiB0aGUgZ3JvdXAgdGhhdCB0aGlzIGVsZW0gc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiAgIHdpdGggd2hlbiBkb2luZyBoaWdobGlnaHRpbmcuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGlzIGVsZW0gd2lsbCBub3QgYmUgXCJnYW5nZWRcIiB3aXRoIGFueVxuICAgICAqICAgb3RoZXIgZWxlbS5cbiAgICAgKiBAcGFyYW0gcmVuZGVyR3JvdXBOYW1lIC0gTmFtZSBvZiB0aGUgZ3JvdXAgdGhhdCB0aGlzIGVsZW0gc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiAgIHdpdGggd2hlbiByZXJlbmRlcmluZy4gIElmIG5vdCBzcGVjaWZpZWQsIHRoaXMgZWxlbSB3aWxsIG5vdCBiZSBcImdhbmdlZFwiIHdpdGggYW55XG4gICAgICogICBvdGhlciBlbGVtLlxuICAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGFkZEVsZW1lbnQoZWxlbTogVUlFbGVtZW50LCB0b29sdGlwR3JvdXBOYW1lPzogc3RyaW5nLFxuICAgICAgICBoaWdobGlnaHRHcm91cE5hbWU/OiBzdHJpbmcsIHJlbmRlckdyb3VwTmFtZT86IHN0cmluZyk6IFVJRWxlbWVudE1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiByZW1vdmUgYSBlbGVtIGZyb20gdGhlIG1hbmFnZXIsIHJlbW92ZXMgaXQgZnJvbSBhbGwgZ3JvdXBzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbSAtIHRoZSBlbGVtIHRoYXQgc2hvdWxkIHNob3VsZCBiZSByZW1vdmVkXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIC0gVGhlIGVsZW0gbWFuYWdlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICByZW1vdmVFbGVtZW50KGVsZW06IFVJRWxlbWVudCk6IFVJRWxlbWVudE1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWxsIHRoZSBlbGVtcyBpbiB0aGlzIGxpc3RcbiAgICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGVsZW1zXG4gICAgICovXG4gICAgZ2V0RWxlbWVudHMoKTogVUlFbGVtZW50W107XG5cbiAgICAvKipcbiAgICAgKiB1c2VyIGNhbGxiYWNrIGNhbGxlZCB3aGVuIGEgaG92ZXIgZXZlbnQgaGFwcGVuc1xuICAgICAqXG4gICAgICogQHBhcmFtIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICAgKi9cbiAgICBzZXRIb3ZlckNhbGxiYWNrKGNhbGxiYWNrOiAoZ3JvdXA6IFVJRWxlbWVudFtdLCBldmVudDogSUV2ZW50KSA9PiB2b2lkKTogVUlFbGVtZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIHVzZXIgY2FsbGJhY2sgY2FsbGVkIHdoZW4gYSB0b29sdGlwIGlzIGNyZWF0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZnVuY3Rpb3RuIHRvIGJlIGNhbGxlZFxuICAgICAqL1xuICAgIHNldFRvb2x0aXBDYWxsYmFjayhjYWxsYmFjazogKGdyb3VwOiBVSUVsZW1lbnRbXSwgZXZlbnQ6IElFdmVudCkgPT4gSVRvb2x0aXBEYXRhKTogVUlFbGVtZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIHVzZXIgY2FsbGJhY2sgY2FsbGVkIHdoZW4gYSBzZWxlY3Rpb24gZXZlbnQgaGFwcGVuc1xuICAgICAqXG4gICAgICogQHBhcmFtIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICAgKi9cbiAgICBzZXRCcnVzaENhbGxiYWNrKGNhbGxiYWNrOiAoZ3JvdXA6IFVJRWxlbWVudFtdLCBldmVudDogSUV2ZW50KSA9PiB2b2lkKTogVUlFbGVtZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIHNldCB0aGUgZ3JvdXAgdGhpcyB0b29sdGlwIGlzIGFzc29jaWF0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW0gLSB0aGUgZWxlbSB0aGF0IHNob3VsZCBzaG91bGQgYmUgXCJnYW5nZWRcIlxuICAgICAqIEBwYXJhbSBncm91cE5hbWUgLSBOYW1lIG9mIHRoZSBncm91cCB0aGF0IHRoaXMgZWxlbSBzaG91bGQgYmUgXCJnYW5nZWRcIlxuICAgICAqICAgd2l0aC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGFkZFRvVG9vbHRpcEdyb3VwKGVsZW06IFVJRWxlbWVudCwgZ3JvdXBOYW1lOiBzdHJpbmcpOiBVSUVsZW1lbnRNYW5hZ2VyO1xuICAgIC8qKlxuICAgICAqIHJlbW92ZSB0aGUgZWxlbSBmcm9tIHRoZSB0b29sdGlwIGdyb3VwIGl0IGlzIGluXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbSAtIHRoZSBlbGVtIHRoYXQgc2hvdWxkIHNob3VsZCBiZSBcInVuZ2FuZ2VkXCJcbiAgICAgKlxuICAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHJlbW92ZUZyb21Ub29sdGlwR3JvdXAoZWxlbTogVUlFbGVtZW50KTogVUlFbGVtZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIHNldCB0aGUgZ3JvdXAgdG8gc2VsZWN0IHRoaXMgZWxlbSB3aXRoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbSAtIHRoZSBlbGVtIHRoYXQgc2hvdWxkIHNob3VsZCBiZSBcImdhbmdlZFwiXG4gICAgICogQHBhcmFtIGdyb3VwTmFtZSAtIE5hbWUgb2YgdGhlIGdyb3VwIHRoYXQgdGhpcyBlbGVtIHNob3VsZCBiZSBcImdhbmdlZFwiXG4gICAgICogICB3aXRoLlxuICAgICAqXG4gICAgICogQHJldHVybiAtIFRoZSBlbGVtIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgYWRkVG9IaWdobGlnaHRHcm91cChlbGVtOiBVSUVsZW1lbnQsIGdyb3VwTmFtZTogc3RyaW5nKTogVUlFbGVtZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZSB0aGUgZWxlbSBmcm9tIHRoZSB6b29tIGdyb3VwIGl0IGlzIGluXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbSAtIHRoZSBlbGVtIHRoYXQgc2hvdWxkIHNob3VsZCBiZSBcInVuZ2FuZ2VkXCJcbiAgICAgKlxuICAgICAqIEByZXR1cm4gLSBUaGUgZWxlbSBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHJlbW92ZUZyb21IaWdobGlnaHRHcm91cChlbGVtOiBVSUVsZW1lbnQpOiBVSUVsZW1lbnRNYW5hZ2VyO1xuXG4gICAgLyoqXG4gICAgICogc2V0IHRoZSBncm91cCB0byBzZWxlY3QgdGhpcyBlbGVtIHdpdGhcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiBAcGFyYW0gZ3JvdXBOYW1lIC0gTmFtZSBvZiB0aGUgZ3JvdXAgdGhhdCB0aGlzIGVsZW0gc2hvdWxkIGJlIFwiZ2FuZ2VkXCJcbiAgICAgKiAgIHdpdGguXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIC0gVGhlIGVsZW0gbWFuYWdlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBhZGRUb1JlbmRlckdyb3VwKGVsZW06IFVJRWxlbWVudCwgZ3JvdXBOYW1lOiBzdHJpbmcpOiBVSUVsZW1lbnRNYW5hZ2VyO1xuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIHRoZSBlbGVtIGZyb20gdGhlIHpvb20gZ3JvdXAgaXQgaXMgaW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtIC0gdGhlIGVsZW0gdGhhdCBzaG91bGQgc2hvdWxkIGJlIFwidW5nYW5nZWRcIlxuICAgICAqXG4gICAgICogQHJldHVybiAtIFRoZSBlbGVtIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcmVtb3ZlRnJvbVJlbmRlckdyb3VwKGVsZW06IFVJRWxlbWVudCk6IFVJRWxlbWVudE1hbmFnZXI7XG5cbiAgICAvKiogY2xlYXIgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QgKi9cbiAgICBjbGVhcigpOiB2b2lkO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQVNBO0FBc0dBOztBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFtQkE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFrVEE7QUFDQTtBQU1BO0FBTEE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBO0FBb0JBOztBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1SEE7QUE0SEE7QUFFQTs7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/interface/ui-base.ts\n");

/***/ }),

/***/ "./third-party/d3-legend-master/indexRollupNext.js":
/*!*********************************************************!*\
  !*** ./third-party/d3-legend-master/indexRollupNext.js ***!
  \*********************************************************/
/*! exports provided: legendColor, legendSize, legendSymbol, legendHelpers, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"legendColor\", function() { return color; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"legendSize\", function() { return size; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"legendSymbol\", function() { return symbol; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"legendHelpers\", function() { return legendHelpers; });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/index.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ \"./node_modules/d3-format/src/index.js\");\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-dispatch */ \"./node_modules/d3-dispatch/src/index.js\");\n/* harmony import */ var d3_scale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-scale */ \"./node_modules/d3-scale/src/index.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-array */ \"./node_modules/d3-array/src/index.js\");\n\n\n\n\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar d3_identity = function d3_identity(d) {\n  return d;\n};\n\nvar d3_reverse = function d3_reverse(arr) {\n  var mirror = [];\n  for (var i = 0, l = arr.length; i < l; i++) {\n    mirror[i] = arr[l - i - 1];\n  }\n  return mirror;\n};\n\n//Text wrapping code adapted from Mike Bostock\nvar d3_textWrapping = function d3_textWrapping(text, width) {\n  text.each(function () {\n    var text = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"select\"])(this),\n        words = text.text().split(/\\s+/).reverse(),\n        word,\n        line = [],\n        lineNumber = 0,\n        lineHeight = 1.2,\n        //ems\n    y = text.attr(\"y\"),\n        dy = parseFloat(text.attr(\"dy\")) || 0,\n        tspan = text.text(null).append(\"tspan\").attr(\"x\", 0).attr(\"dy\", dy + \"em\");\n\n    while (word = words.pop()) {\n      line.push(word);\n      tspan.text(line.join(\" \"));\n      if (tspan.node().getComputedTextLength() > width && line.length > 1) {\n        line.pop();\n        tspan.text(line.join(\" \"));\n        line = [word];\n        tspan = text.append(\"tspan\").attr(\"x\", 0).attr(\"dy\", lineHeight + dy + \"em\").text(word);\n      }\n    }\n  });\n};\n\nvar d3_mergeLabels = function d3_mergeLabels() {\n  var gen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var labels = arguments[1];\n  var domain = arguments[2];\n  var range = arguments[3];\n  var labelDelimiter = arguments[4];\n\n  if ((typeof labels === \"undefined\" ? \"undefined\" : _typeof(labels)) === \"object\") {\n    if (labels.length === 0) return gen;\n\n    var i = labels.length;\n    for (; i < gen.length; i++) {\n      labels.push(gen[i]);\n    }\n    return labels;\n  } else if (typeof labels === \"function\") {\n    var customLabels = [];\n    var genLength = gen.length;\n    for (var _i = 0; _i < genLength; _i++) {\n      customLabels.push(labels({\n        i: _i,\n        genLength: genLength,\n        generatedLabels: gen,\n        domain: domain,\n        range: range,\n        labelDelimiter: labelDelimiter\n      }));\n    }\n    return customLabels;\n  }\n\n  return gen;\n};\n\nvar d3_linearLegend = function d3_linearLegend(scale, cells, labelFormat) {\n  var data = [];\n\n  if (cells.length > 1) {\n    data = cells;\n  } else {\n    var domain = scale.domain(),\n        increment = (domain[domain.length - 1] - domain[0]) / (cells - 1);\n    var i = 0;\n\n    for (; i < cells; i++) {\n      data.push(domain[0] + i * increment);\n    }\n  }\n\n  var labels = data.map(labelFormat);\n  return {\n    data: data,\n    labels: labels,\n    feature: function feature(d) {\n      return scale(d);\n    }\n  };\n};\n\nvar d3_quantLegend = function d3_quantLegend(scale, labelFormat, labelDelimiter) {\n  var labels = scale.range().map(function (d) {\n    var invert = scale.invertExtent(d);\n    return labelFormat(invert[0]) + \" \" + labelDelimiter + \" \" + labelFormat(invert[1]);\n  });\n\n  return {\n    data: scale.range(),\n    labels: labels,\n    feature: d3_identity\n  };\n};\n\nvar d3_ordinalLegend = function d3_ordinalLegend(scale) {\n  return {\n    data: scale.domain(),\n    labels: scale.domain(),\n    feature: function feature(d) {\n      return scale(d);\n    }\n  };\n};\n\nvar d3_cellOver = function d3_cellOver(cellDispatcher, d, obj) {\n  cellDispatcher.call(\"cellover\", obj, d);\n};\n\nvar d3_cellOut = function d3_cellOut(cellDispatcher, d, obj) {\n  cellDispatcher.call(\"cellout\", obj, d);\n};\n\nvar d3_cellClick = function d3_cellClick(cellDispatcher, d, obj) {\n  cellDispatcher.call(\"cellclick\", obj, d);\n};\n\nvar d3_contextmenu = function d3_contextmenu(cellDispatcher, d, obj) {\n  cellDispatcher.call(\"cellcontextmenu\", obj, d);\n};\n\nvar helper = {\n  d3_drawShapes: function d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path) {\n    if (shape === \"rect\") {\n      shapes.attr(\"height\", shapeHeight).attr(\"width\", shapeWidth);\n    } else if (shape === \"circle\") {\n      shapes.attr(\"r\", shapeRadius);\n    } else if (shape === \"line\") {\n      shapes.attr(\"x1\", 0).attr(\"x2\", shapeWidth).attr(\"y1\", 0).attr(\"y2\", 0);\n    } else if (shape === \"path\") {\n      shapes.attr(\"d\", path);\n    }\n  },\n\n  d3_addText: function d3_addText(svg, enter, labels, classPrefix, labelWidth) {\n    enter.append(\"text\").attr(\"class\", classPrefix + \"label\");\n    var text = svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\").data(labels).text(d3_identity);\n\n    if (labelWidth) {\n      svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\").call(d3_textWrapping, labelWidth);\n    }\n\n    return text;\n  },\n\n  d3_calcType: function d3_calcType(scale, ascending, cells, labels, labelFormat, labelDelimiter) {\n    var type = scale.invertExtent ? d3_quantLegend(scale, labelFormat, labelDelimiter) : scale.ticks ? d3_linearLegend(scale, cells, labelFormat) : d3_ordinalLegend(scale);\n\n    //for d3.scaleSequential that doesn't have a range function\n    var range = scale.range && scale.range() || scale.domain();\n    type.labels = d3_mergeLabels(type.labels, labels, scale.domain(), range, labelDelimiter);\n\n    if (ascending) {\n      type.labels = d3_reverse(type.labels);\n      type.data = d3_reverse(type.data);\n    }\n\n    return type;\n  },\n\n  d3_filterCells: function d3_filterCells(type, cellFilter) {\n    var filterCells = type.data.map(function (d, i) {\n      return { data: d, label: type.labels[i] };\n    }).filter(cellFilter);\n    var dataValues = filterCells.map(function (d) {\n      return d.data;\n    });\n    var labelValues = filterCells.map(function (d) {\n      return d.label;\n    });\n    type.data = type.data.filter(function (d) {\n      return dataValues.indexOf(d) !== -1;\n    });\n    type.labels = type.labels.filter(function (d) {\n      return labelValues.indexOf(d) !== -1;\n    });\n    return type;\n  },\n\n  d3_placement: function d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign, labelPosition) {\n    cell.attr(\"transform\", cellTrans);\n    text.attr(\"transform\", textTrans);\n    if (orient === \"horizontal\" && labelPosition === \"below\") {\n      text.style(\"text-anchor\", labelAlign);\n    }\n  },\n\n  d3_addEvents: function d3_addEvents(cells, dispatcher) {\n    cells.on(\"mouseover.legend\", function (d) {\n      d3_cellOver(dispatcher, d, this);\n    }).on(\"mouseout.legend\", function (d) {\n      d3_cellOut(dispatcher, d, this);\n    }).on(\"click.legend\", function (d) {\n      d3_cellClick(dispatcher, d, this);\n    }).on(\"contextmenu.legend\", function (d) {\n      d3_contextmenu(dispatcher, d, this);\n    });\n  },\n\n  d3_title: function d3_title(svg, title, classPrefix, titleWidth) {\n    if (title !== \"\") {\n      var titleText = svg.selectAll(\"text.\" + classPrefix + \"legendTitle\");\n\n      titleText.data([title]).enter().append(\"text\").attr(\"class\", classPrefix + \"legendTitle\");\n\n      svg.selectAll(\"text.\" + classPrefix + \"legendTitle\").text(title);\n\n      if (titleWidth) {\n        svg.selectAll(\"text.\" + classPrefix + \"legendTitle\").call(d3_textWrapping, titleWidth);\n      }\n\n      var cellsSvg = svg.select(\".\" + classPrefix + \"legendCells\");\n      var yOffset = svg.select(\".\" + classPrefix + \"legendTitle\").nodes().map(function (d) {\n        return d.getBBox().height;\n      })[0],\n          xOffset = -cellsSvg.nodes().map(function (d) {\n        return d.getBBox().x;\n      })[0];\n      cellsSvg.attr(\"transform\", \"translate(\" + xOffset + \",\" + yOffset + \")\");\n    }\n  },\n\n  d3_defaultLocale: {\n    format: d3_format__WEBPACK_IMPORTED_MODULE_1__[\"format\"],\n    formatPrefix: d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatPrefix\"]\n  },\n\n  d3_defaultFormatSpecifier: \".01f\",\n\n  d3_defaultDelimiter: \"to\"\n};\n\nfunction color() {\n  var scale = Object(d3_scale__WEBPACK_IMPORTED_MODULE_3__[\"scaleLinear\"])(),\n      shape = \"rect\",\n      shapeWidth = 15,\n      shapeHeight = 15,\n      shapeRadius = 10,\n      shapePadding = 2,\n      cells = [5],\n      cellFilter = void 0,\n      labels = [],\n      classPrefix = \"\",\n      useClass = false,\n      title = \"\",\n      locale = helper.d3_defaultLocale,\n      specifier = helper.d3_defaultFormatSpecifier,\n      labelOffset = 10,\n      labelAlign = \"middle\",\n      labelPosition = \"below\",\n      labelDelimiter = helper.d3_defaultDelimiter,\n      labelWrap = void 0,\n      orient = \"vertical\",\n      ascending = false,\n      path = void 0,\n      titleWidth = void 0,\n      legendDispatcher = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_2__[\"dispatch\"])(\"cellover\", \"cellout\", \"cellclick\", \"cellcontextmenu\");\n\n  function legend(svg) {\n    var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n        legendG = svg.selectAll(\"g\").data([scale]);\n\n    legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n    if (cellFilter) {\n      helper.d3_filterCells(type, cellFilter);\n    }\n\n    var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n\n    var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n    cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n    var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\").data(type.data);\n\n    //add event handlers\n    helper.d3_addEvents(cellEnter, legendDispatcher);\n\n    cell.exit().transition().style(\"opacity\", 0).remove();\n    shapes.exit().transition().style(\"opacity\", 0).remove();\n\n    shapes = shapes.merge(shapes);\n\n    helper.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path);\n    var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n    // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n    cell = cellEnter.merge(cell);\n\n    // sets placement\n    var textSize = text.nodes().map(function (d) {\n      return d.getBBox();\n    }),\n        shapeSize = shapes.nodes().map(function (d) {\n      return d.getBBox();\n    });\n    //sets scale\n    //everything is fill except for line which is stroke,\n    if (!useClass) {\n      if (shape == \"line\") {\n        shapes.style(\"stroke\", type.feature);\n      } else {\n        shapes.style(\"fill\", type.feature);\n      }\n    } else {\n      shapes.attr(\"class\", function (d) {\n        return classPrefix + \"swatch \" + type.feature(d);\n      });\n    }\n\n    var cellTrans = void 0,\n        textTrans = void 0,\n        textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n    //positions cells and text\n    if (orient === \"vertical\") {\n      var cellSize = textSize.map(function (d, i) {\n        return Math.max(d.height, shapeSize[i].height);\n      });\n\n      cellTrans = function cellTrans(d, i) {\n        var height = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__[\"sum\"])(cellSize.slice(0, i));\n        return \"translate(0, \" + (height + i * shapePadding) + \")\";\n      };\n\n      textTrans = function textTrans(d, i) {\n        return \"translate( \" + (shapeSize[i].width + shapeSize[i].x + labelOffset) + \", \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n      };\n    } else if (orient === \"horizontal\") {\n      cellTrans = function cellTrans(d, i) {\n        return \"translate(\" + i * (shapeSize[i].width + shapePadding) + \",0)\";\n      };\n      if (labelPosition === \"below\") {\n        textTrans = function textTrans(d, i) {\n          return \"translate(\" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n          \" + (shapeSize[i].height + shapeSize[i].y + labelOffset + 8) + \")\";\n        };\n      } else if (labelPosition === \"right\") {\n        textTrans = function textTrans(d, i) {\n          return \"translate(\" + (shapeSize[i].width + shapeSize[i].x + 4) + \",\\n            \" + (shapeSize[i].height + shapeSize[i].y) + \")\";\n        };\n      }\n    }\n    helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign, labelPosition);\n    helper.d3_title(svg, title, classPrefix, titleWidth);\n\n    cell.transition().style(\"opacity\", 1);\n  }\n\n  legend.scale = function (_) {\n    if (!arguments.length) return scale;\n    scale = _;\n    return legend;\n  };\n\n  legend.cells = function (_) {\n    if (!arguments.length) return cells;\n    if (_.length > 1 || _ >= 2) {\n      cells = _;\n    }\n    return legend;\n  };\n\n  legend.cellFilter = function (_) {\n    if (!arguments.length) return cellFilter;\n    cellFilter = _;\n    return legend;\n  };\n\n  legend.shape = function (_, d) {\n    if (!arguments.length) return shape;\n    if (_ == \"rect\" || _ == \"circle\" || _ == \"line\" || _ == \"path\" && typeof d === \"string\") {\n      shape = _;\n      path = d;\n    }\n    return legend;\n  };\n\n  legend.shapeWidth = function (_) {\n    if (!arguments.length) return shapeWidth;\n    shapeWidth = +_;\n    return legend;\n  };\n\n  legend.shapeHeight = function (_) {\n    if (!arguments.length) return shapeHeight;\n    shapeHeight = +_;\n    return legend;\n  };\n\n  legend.shapeRadius = function (_) {\n    if (!arguments.length) return shapeRadius;\n    shapeRadius = +_;\n    return legend;\n  };\n\n  legend.shapePadding = function (_) {\n    if (!arguments.length) return shapePadding;\n    shapePadding = +_;\n    return legend;\n  };\n\n  legend.labels = function (_) {\n    if (!arguments.length) return labels;\n    labels = _;\n    return legend;\n  };\n\n  legend.labelAlign = function (_) {\n    if (!arguments.length) return labelAlign;\n    if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n      labelAlign = _;\n    }\n    return legend;\n  };\n\n  legend.labelPosition = function (_) {\n    if (!arguments.length) return labelPosition;\n    if (_ == \"below\" || _ == \"right\") {\n      labelPosition = _;\n    }\n    return legend;\n  };\n\n  legend.locale = function (_) {\n    if (!arguments.length) return locale;\n    locale = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatLocale\"])(_);\n    return legend;\n  };\n\n  legend.labelFormat = function (_) {\n    if (!arguments.length) return legend.locale().format(specifier);\n    specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatSpecifier\"])(_);\n    return legend;\n  };\n\n  legend.labelOffset = function (_) {\n    if (!arguments.length) return labelOffset;\n    labelOffset = +_;\n    return legend;\n  };\n\n  legend.labelDelimiter = function (_) {\n    if (!arguments.length) return labelDelimiter;\n    labelDelimiter = _;\n    return legend;\n  };\n\n  legend.labelWrap = function (_) {\n    if (!arguments.length) return labelWrap;\n    labelWrap = _;\n    return legend;\n  };\n\n  legend.useClass = function (_) {\n    if (!arguments.length) return useClass;\n    if (_ === true || _ === false) {\n      useClass = _;\n    }\n    return legend;\n  };\n\n  legend.orient = function (_) {\n    if (!arguments.length) return orient;\n    _ = _.toLowerCase();\n    if (_ == \"horizontal\" || _ == \"vertical\") {\n      orient = _;\n    }\n    return legend;\n  };\n\n  legend.ascending = function (_) {\n    if (!arguments.length) return ascending;\n    ascending = !!_;\n    return legend;\n  };\n\n  legend.classPrefix = function (_) {\n    if (!arguments.length) return classPrefix;\n    classPrefix = _;\n    return legend;\n  };\n\n  legend.title = function (_) {\n    if (!arguments.length) return title;\n    title = _;\n    return legend;\n  };\n\n  legend.titleWidth = function (_) {\n    if (!arguments.length) return titleWidth;\n    titleWidth = _;\n    return legend;\n  };\n\n  legend.textWrap = function (_) {\n    if (!arguments.length) return textWrap;\n    textWrap = _;\n    return legend;\n  };\n\n  legend.on = function () {\n    var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n    return value === legendDispatcher ? legend : value;\n  };\n\n  return legend;\n}\n\nfunction size() {\n  var scale = Object(d3_scale__WEBPACK_IMPORTED_MODULE_3__[\"scaleLinear\"])(),\n      shape = \"rect\",\n      shapeWidth = 15,\n      shapePadding = 2,\n      cells = [5],\n      cellFilter = void 0,\n      labels = [],\n      classPrefix = \"\",\n      title = \"\",\n      locale = helper.d3_defaultLocale,\n      specifier = helper.d3_defaultFormatSpecifier,\n      labelOffset = 10,\n      labelAlign = \"middle\",\n      labelPosition = \"below\",\n      labelDelimiter = helper.d3_defaultDelimiter,\n      labelWrap = void 0,\n      orient = \"vertical\",\n      ascending = false,\n      path = void 0,\n      titleWidth = void 0,\n      legendDispatcher = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_2__[\"dispatch\"])(\"cellover\", \"cellout\", \"cellclick\", \"cellcontextmenu\");\n\n  function legend(svg) {\n    var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n        legendG = svg.selectAll(\"g\").data([scale]);\n\n    if (cellFilter) {\n      helper.d3_filterCells(type, cellFilter);\n    }\n\n    legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n    var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n    var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n    cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n    var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\");\n\n    //add event handlers\n    helper.d3_addEvents(cellEnter, legendDispatcher);\n\n    cell.exit().transition().style(\"opacity\", 0).remove();\n\n    shapes.exit().transition().style(\"opacity\", 0).remove();\n    shapes = shapes.merge(shapes);\n\n    //creates shape\n    if (shape === \"line\") {\n      helper.d3_drawShapes(shape, shapes, 0, shapeWidth);\n      shapes.attr(\"stroke-width\", type.feature);\n    } else {\n      helper.d3_drawShapes(shape, shapes, type.feature, type.feature, type.feature, path);\n    }\n\n    var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n    // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n    cell = cellEnter.merge(cell);\n\n    //sets placement\n\n    var textSize = text.nodes().map(function (d) {\n      return d.getBBox();\n    }),\n        shapeSize = shapes.nodes().map(function (d, i) {\n      var bbox = d.getBBox();\n      var stroke = scale(type.data[i]);\n\n      if (shape === \"line\" && orient === \"horizontal\") {\n        bbox.height = bbox.height + stroke;\n      } else if (shape === \"line\" && orient === \"vertical\") {\n        bbox.width = bbox.width;\n      }\n      return bbox;\n    });\n\n    var maxH = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(shapeSize, function (d) {\n      return d.height + d.y;\n    }),\n        maxW = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(shapeSize, function (d) {\n      return d.width + d.x;\n    });\n\n    var cellTrans = void 0,\n        textTrans = void 0,\n        textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n    //positions cells and text\n    if (orient === \"vertical\") {\n      var cellSize = textSize.map(function (d, i) {\n        return Math.max(d.height, shapeSize[i].height);\n      });\n      var y = shape == \"circle\" || shape == \"line\" ? shapeSize[0].height / 2 : 0;\n      cellTrans = function cellTrans(d, i) {\n        var height = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__[\"sum\"])(cellSize.slice(0, i));\n\n        return \"translate(0, \" + (y + height + i * shapePadding) + \")\";\n      };\n\n      textTrans = function textTrans(d, i) {\n        return \"translate( \" + (maxW + labelOffset) + \",\\n          \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n      };\n    } else if (orient === \"horizontal\") {\n      cellTrans = function cellTrans(d, i) {\n        var width = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__[\"sum\"])(shapeSize.slice(0, i), function (d) {\n          return d.width;\n        });\n        var y = shape == \"circle\" || shape == \"line\" ? maxH / 2 : 0;\n        return \"translate(\" + (width + i * shapePadding) + \", \" + y + \")\";\n      };\n\n      var offset = shape == \"line\" ? maxH / 2 : maxH;\n      textTrans = function textTrans(d, i) {\n        return \"translate( \" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n              \" + (offset + labelOffset) + \")\";\n      };\n    }\n\n    helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n    helper.d3_title(svg, title, classPrefix, titleWidth);\n\n    cell.transition().style(\"opacity\", 1);\n  }\n\n  legend.scale = function (_) {\n    if (!arguments.length) return scale;\n    scale = _;\n    return legend;\n  };\n\n  legend.cells = function (_) {\n    if (!arguments.length) return cells;\n    if (_.length > 1 || _ >= 2) {\n      cells = _;\n    }\n    return legend;\n  };\n\n  legend.cellFilter = function (_) {\n    if (!arguments.length) return cellFilter;\n    cellFilter = _;\n    return legend;\n  };\n\n  legend.shape = function (_, d) {\n    if (!arguments.length) return shape;\n    if (_ == \"rect\" || _ == \"circle\" || _ == \"line\") {\n      shape = _;\n      path = d;\n    }\n    return legend;\n  };\n\n  legend.shapeWidth = function (_) {\n    if (!arguments.length) return shapeWidth;\n    shapeWidth = +_;\n    return legend;\n  };\n\n  legend.shapePadding = function (_) {\n    if (!arguments.length) return shapePadding;\n    shapePadding = +_;\n    return legend;\n  };\n\n  legend.labels = function (_) {\n    if (!arguments.length) return labels;\n    labels = _;\n    return legend;\n  };\n\n  legend.labelAlign = function (_) {\n    if (!arguments.length) return labelAlign;\n    if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n      labelAlign = _;\n    }\n    return legend;\n  };\n\n  legend.locale = function (_) {\n    if (!arguments.length) return locale;\n    locale = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatLocale\"])(_);\n    return legend;\n  };\n\n  legend.labelFormat = function (_) {\n    if (!arguments.length) return legend.locale().format(specifier);\n    specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatSpecifier\"])(_);\n    return legend;\n  };\n\n  legend.labelOffset = function (_) {\n    if (!arguments.length) return labelOffset;\n    labelOffset = +_;\n    return legend;\n  };\n\n  legend.labelDelimiter = function (_) {\n    if (!arguments.length) return labelDelimiter;\n    labelDelimiter = _;\n    return legend;\n  };\n\n  legend.labelWrap = function (_) {\n    if (!arguments.length) return labelWrap;\n    labelWrap = _;\n    return legend;\n  };\n\n  legend.orient = function (_) {\n    if (!arguments.length) return orient;\n    _ = _.toLowerCase();\n    if (_ == \"horizontal\" || _ == \"vertical\") {\n      orient = _;\n    }\n    return legend;\n  };\n\n  legend.ascending = function (_) {\n    if (!arguments.length) return ascending;\n    ascending = !!_;\n    return legend;\n  };\n\n  legend.classPrefix = function (_) {\n    if (!arguments.length) return classPrefix;\n    classPrefix = _;\n    return legend;\n  };\n\n  legend.title = function (_) {\n    if (!arguments.length) return title;\n    title = _;\n    return legend;\n  };\n\n  legend.titleWidth = function (_) {\n    if (!arguments.length) return titleWidth;\n    titleWidth = _;\n    return legend;\n  };\n\n  legend.on = function () {\n    var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n    return value === legendDispatcher ? legend : value;\n  };\n\n  return legend;\n}\n\nfunction symbol() {\n  var scale = Object(d3_scale__WEBPACK_IMPORTED_MODULE_3__[\"scaleLinear\"])(),\n      shape = \"path\",\n      shapeWidth = 15,\n      shapeHeight = 15,\n      shapeRadius = 10,\n      shapePadding = 5,\n      cells = [5],\n      cellFilter = void 0,\n      labels = [],\n      classPrefix = \"\",\n      title = \"\",\n      locale = helper.d3_defaultLocale,\n      specifier = helper.d3_defaultFormatSpecifier,\n      labelAlign = \"middle\",\n      labelPosition = \"below\",\n      labelOffset = 10,\n      labelDelimiter = helper.d3_defaultDelimiter,\n      labelWrap = void 0,\n      orient = \"vertical\",\n      ascending = false,\n      titleWidth = void 0,\n      legendDispatcher = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_2__[\"dispatch\"])(\"cellover\", \"cellout\", \"cellclick\", \"cellcontextmenu\");\n\n  function legend(svg) {\n    var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n        legendG = svg.selectAll(\"g\").data([scale]);\n\n    if (cellFilter) {\n      helper.d3_filterCells(type, cellFilter);\n    }\n\n    legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n    var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n    var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n    cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n    var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\");\n\n    //add event handlers\n    helper.d3_addEvents(cellEnter, legendDispatcher);\n\n    //remove old shapes\n    cell.exit().transition().style(\"opacity\", 0).remove();\n    shapes.exit().transition().style(\"opacity\", 0).remove();\n    shapes = shapes.merge(shapes);\n\n    helper.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, type.feature);\n    var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n    // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n    cell = cellEnter.merge(cell);\n\n    // sets placement\n    var textSize = text.nodes().map(function (d) {\n      return d.getBBox();\n    }),\n        shapeSize = shapes.nodes().map(function (d) {\n      return d.getBBox();\n    });\n\n    var maxH = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(shapeSize, function (d) {\n      return d.height;\n    }),\n        maxW = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(shapeSize, function (d) {\n      return d.width;\n    });\n\n    var cellTrans = void 0,\n        textTrans = void 0,\n        textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n    //positions cells and text\n    if (orient === \"vertical\") {\n      var cellSize = textSize.map(function (d, i) {\n        return Math.max(maxH, d.height);\n      });\n\n      cellTrans = function cellTrans(d, i) {\n        var height = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__[\"sum\"])(cellSize.slice(0, i));\n        return \"translate(0, \" + (height + i * shapePadding) + \" )\";\n      };\n      textTrans = function textTrans(d, i) {\n        return \"translate( \" + (maxW + labelOffset) + \",\\n              \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n      };\n    } else if (orient === \"horizontal\") {\n      cellTrans = function cellTrans(d, i) {\n        return \"translate( \" + i * (maxW + shapePadding) + \",0)\";\n      };\n      textTrans = function textTrans(d, i) {\n        return \"translate( \" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n              \" + (maxH + labelOffset) + \")\";\n      };\n    }\n\n    helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n    helper.d3_title(svg, title, classPrefix, titleWidth);\n    cell.transition().style(\"opacity\", 1);\n  }\n\n  legend.scale = function (_) {\n    if (!arguments.length) return scale;\n    scale = _;\n    return legend;\n  };\n\n  legend.cells = function (_) {\n    if (!arguments.length) return cells;\n    if (_.length > 1 || _ >= 2) {\n      cells = _;\n    }\n    return legend;\n  };\n\n  legend.cellFilter = function (_) {\n    if (!arguments.length) return cellFilter;\n    cellFilter = _;\n    return legend;\n  };\n\n  legend.shapePadding = function (_) {\n    if (!arguments.length) return shapePadding;\n    shapePadding = +_;\n    return legend;\n  };\n\n  legend.labels = function (_) {\n    if (!arguments.length) return labels;\n    labels = _;\n    return legend;\n  };\n\n  legend.labelAlign = function (_) {\n    if (!arguments.length) return labelAlign;\n    if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n      labelAlign = _;\n    }\n    return legend;\n  };\n\n  legend.locale = function (_) {\n    if (!arguments.length) return locale;\n    locale = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatLocale\"])(_);\n    return legend;\n  };\n\n  legend.labelFormat = function (_) {\n    if (!arguments.length) return legend.locale().format(specifier);\n    specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__[\"formatSpecifier\"])(_);\n    return legend;\n  };\n\n  legend.labelOffset = function (_) {\n    if (!arguments.length) return labelOffset;\n    labelOffset = +_;\n    return legend;\n  };\n\n  legend.labelDelimiter = function (_) {\n    if (!arguments.length) return labelDelimiter;\n    labelDelimiter = _;\n    return legend;\n  };\n\n  legend.labelWrap = function (_) {\n    if (!arguments.length) return labelWrap;\n    labelWrap = _;\n    return legend;\n  };\n\n  legend.orient = function (_) {\n    if (!arguments.length) return orient;\n    _ = _.toLowerCase();\n    if (_ == \"horizontal\" || _ == \"vertical\") {\n      orient = _;\n    }\n    return legend;\n  };\n\n  legend.ascending = function (_) {\n    if (!arguments.length) return ascending;\n    ascending = !!_;\n    return legend;\n  };\n\n  legend.classPrefix = function (_) {\n    if (!arguments.length) return classPrefix;\n    classPrefix = _;\n    return legend;\n  };\n\n  legend.title = function (_) {\n    if (!arguments.length) return title;\n    title = _;\n    return legend;\n  };\n\n  legend.titleWidth = function (_) {\n    if (!arguments.length) return titleWidth;\n    titleWidth = _;\n    return legend;\n  };\n\n  legend.on = function () {\n    var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n    return value === legendDispatcher ? legend : value;\n  };\n\n  return legend;\n}\n\nvar thresholdLabels = function thresholdLabels(_ref) {\n  var i = _ref.i,\n      genLength = _ref.genLength,\n      generatedLabels = _ref.generatedLabels,\n      labelDelimiter = _ref.labelDelimiter;\n\n  if (i === 0) {\n    var values = generatedLabels[i].split(\" \" + labelDelimiter + \" \");\n    return \"Less than \" + values[1];\n  } else if (i === genLength - 1) {\n    var _values = generatedLabels[i].split(\" \" + labelDelimiter + \" \");\n    return _values[0] + \" or more\";\n  }\n  return generatedLabels[i];\n};\n\nvar legendHelpers = {\n  thresholdLabels: thresholdLabels\n};\n\nvar index = {\n  legendColor: color,\n  legendSize: size,\n  legendSymbol: symbol,\n  legendHelpers: legendHelpers\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n//# sourceMappingURL=indexRollupNext.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi90aGlyZC1wYXJ0eS9kMy1sZWdlbmQtbWFzdGVyL2luZGV4Um9sbHVwTmV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC8uL3RoaXJkLXBhcnR5L2QzLWxlZ2VuZC1tYXN0ZXIvaW5kZXhSb2xsdXBOZXh0LmpzPzBmMzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCB7IGZvcm1hdCwgZm9ybWF0TG9jYWxlLCBmb3JtYXRQcmVmaXgsIGZvcm1hdFNwZWNpZmllciB9IGZyb20gJ2QzLWZvcm1hdCc7XG5pbXBvcnQgeyBkaXNwYXRjaCB9IGZyb20gJ2QzLWRpc3BhdGNoJztcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHsgbWF4LCBzdW0gfSBmcm9tICdkMy1hcnJheSc7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuXG52YXIgZDNfaWRlbnRpdHkgPSBmdW5jdGlvbiBkM19pZGVudGl0eShkKSB7XG4gIHJldHVybiBkO1xufTtcblxudmFyIGQzX3JldmVyc2UgPSBmdW5jdGlvbiBkM19yZXZlcnNlKGFycikge1xuICB2YXIgbWlycm9yID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG1pcnJvcltpXSA9IGFycltsIC0gaSAtIDFdO1xuICB9XG4gIHJldHVybiBtaXJyb3I7XG59O1xuXG4vL1RleHQgd3JhcHBpbmcgY29kZSBhZGFwdGVkIGZyb20gTWlrZSBCb3N0b2NrXG52YXIgZDNfdGV4dFdyYXBwaW5nID0gZnVuY3Rpb24gZDNfdGV4dFdyYXBwaW5nKHRleHQsIHdpZHRoKSB7XG4gIHRleHQuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRleHQgPSBzZWxlY3QodGhpcyksXG4gICAgICAgIHdvcmRzID0gdGV4dC50ZXh0KCkuc3BsaXQoL1xccysvKS5yZXZlcnNlKCksXG4gICAgICAgIHdvcmQsXG4gICAgICAgIGxpbmUgPSBbXSxcbiAgICAgICAgbGluZU51bWJlciA9IDAsXG4gICAgICAgIGxpbmVIZWlnaHQgPSAxLjIsXG4gICAgICAgIC8vZW1zXG4gICAgeSA9IHRleHQuYXR0cihcInlcIiksXG4gICAgICAgIGR5ID0gcGFyc2VGbG9hdCh0ZXh0LmF0dHIoXCJkeVwiKSkgfHwgMCxcbiAgICAgICAgdHNwYW4gPSB0ZXh0LnRleHQobnVsbCkuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcInhcIiwgMCkuYXR0cihcImR5XCIsIGR5ICsgXCJlbVwiKTtcblxuICAgIHdoaWxlICh3b3JkID0gd29yZHMucG9wKCkpIHtcbiAgICAgIGxpbmUucHVzaCh3b3JkKTtcbiAgICAgIHRzcGFuLnRleHQobGluZS5qb2luKFwiIFwiKSk7XG4gICAgICBpZiAodHNwYW4ubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpID4gd2lkdGggJiYgbGluZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxpbmUucG9wKCk7XG4gICAgICAgIHRzcGFuLnRleHQobGluZS5qb2luKFwiIFwiKSk7XG4gICAgICAgIGxpbmUgPSBbd29yZF07XG4gICAgICAgIHRzcGFuID0gdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwiZHlcIiwgbGluZUhlaWdodCArIGR5ICsgXCJlbVwiKS50ZXh0KHdvcmQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgZDNfbWVyZ2VMYWJlbHMgPSBmdW5jdGlvbiBkM19tZXJnZUxhYmVscygpIHtcbiAgdmFyIGdlbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gIHZhciBsYWJlbHMgPSBhcmd1bWVudHNbMV07XG4gIHZhciBkb21haW4gPSBhcmd1bWVudHNbMl07XG4gIHZhciByYW5nZSA9IGFyZ3VtZW50c1szXTtcbiAgdmFyIGxhYmVsRGVsaW1pdGVyID0gYXJndW1lbnRzWzRdO1xuXG4gIGlmICgodHlwZW9mIGxhYmVscyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKGxhYmVscykpID09PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDApIHJldHVybiBnZW47XG5cbiAgICB2YXIgaSA9IGxhYmVscy5sZW5ndGg7XG4gICAgZm9yICg7IGkgPCBnZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxhYmVscy5wdXNoKGdlbltpXSk7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbHM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGxhYmVscyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGN1c3RvbUxhYmVscyA9IFtdO1xuICAgIHZhciBnZW5MZW5ndGggPSBnZW4ubGVuZ3RoO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBnZW5MZW5ndGg7IF9pKyspIHtcbiAgICAgIGN1c3RvbUxhYmVscy5wdXNoKGxhYmVscyh7XG4gICAgICAgIGk6IF9pLFxuICAgICAgICBnZW5MZW5ndGg6IGdlbkxlbmd0aCxcbiAgICAgICAgZ2VuZXJhdGVkTGFiZWxzOiBnZW4sXG4gICAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgICByYW5nZTogcmFuZ2UsXG4gICAgICAgIGxhYmVsRGVsaW1pdGVyOiBsYWJlbERlbGltaXRlclxuICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gY3VzdG9tTGFiZWxzO1xuICB9XG5cbiAgcmV0dXJuIGdlbjtcbn07XG5cbnZhciBkM19saW5lYXJMZWdlbmQgPSBmdW5jdGlvbiBkM19saW5lYXJMZWdlbmQoc2NhbGUsIGNlbGxzLCBsYWJlbEZvcm1hdCkge1xuICB2YXIgZGF0YSA9IFtdO1xuXG4gIGlmIChjZWxscy5sZW5ndGggPiAxKSB7XG4gICAgZGF0YSA9IGNlbGxzO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb21haW4gPSBzY2FsZS5kb21haW4oKSxcbiAgICAgICAgaW5jcmVtZW50ID0gKGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0gLSBkb21haW5bMF0pIC8gKGNlbGxzIC0gMSk7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yICg7IGkgPCBjZWxsczsgaSsrKSB7XG4gICAgICBkYXRhLnB1c2goZG9tYWluWzBdICsgaSAqIGluY3JlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxhYmVscyA9IGRhdGEubWFwKGxhYmVsRm9ybWF0KTtcbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIGxhYmVsczogbGFiZWxzLFxuICAgIGZlYXR1cmU6IGZ1bmN0aW9uIGZlYXR1cmUoZCkge1xuICAgICAgcmV0dXJuIHNjYWxlKGQpO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBkM19xdWFudExlZ2VuZCA9IGZ1bmN0aW9uIGQzX3F1YW50TGVnZW5kKHNjYWxlLCBsYWJlbEZvcm1hdCwgbGFiZWxEZWxpbWl0ZXIpIHtcbiAgdmFyIGxhYmVscyA9IHNjYWxlLnJhbmdlKCkubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgdmFyIGludmVydCA9IHNjYWxlLmludmVydEV4dGVudChkKTtcbiAgICByZXR1cm4gbGFiZWxGb3JtYXQoaW52ZXJ0WzBdKSArIFwiIFwiICsgbGFiZWxEZWxpbWl0ZXIgKyBcIiBcIiArIGxhYmVsRm9ybWF0KGludmVydFsxXSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZGF0YTogc2NhbGUucmFuZ2UoKSxcbiAgICBsYWJlbHM6IGxhYmVscyxcbiAgICBmZWF0dXJlOiBkM19pZGVudGl0eVxuICB9O1xufTtcblxudmFyIGQzX29yZGluYWxMZWdlbmQgPSBmdW5jdGlvbiBkM19vcmRpbmFsTGVnZW5kKHNjYWxlKSB7XG4gIHJldHVybiB7XG4gICAgZGF0YTogc2NhbGUuZG9tYWluKCksXG4gICAgbGFiZWxzOiBzY2FsZS5kb21haW4oKSxcbiAgICBmZWF0dXJlOiBmdW5jdGlvbiBmZWF0dXJlKGQpIHtcbiAgICAgIHJldHVybiBzY2FsZShkKTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgZDNfY2VsbE92ZXIgPSBmdW5jdGlvbiBkM19jZWxsT3ZlcihjZWxsRGlzcGF0Y2hlciwgZCwgb2JqKSB7XG4gIGNlbGxEaXNwYXRjaGVyLmNhbGwoXCJjZWxsb3ZlclwiLCBvYmosIGQpO1xufTtcblxudmFyIGQzX2NlbGxPdXQgPSBmdW5jdGlvbiBkM19jZWxsT3V0KGNlbGxEaXNwYXRjaGVyLCBkLCBvYmopIHtcbiAgY2VsbERpc3BhdGNoZXIuY2FsbChcImNlbGxvdXRcIiwgb2JqLCBkKTtcbn07XG5cbnZhciBkM19jZWxsQ2xpY2sgPSBmdW5jdGlvbiBkM19jZWxsQ2xpY2soY2VsbERpc3BhdGNoZXIsIGQsIG9iaikge1xuICBjZWxsRGlzcGF0Y2hlci5jYWxsKFwiY2VsbGNsaWNrXCIsIG9iaiwgZCk7XG59O1xuXG52YXIgZDNfY29udGV4dG1lbnUgPSBmdW5jdGlvbiBkM19jb250ZXh0bWVudShjZWxsRGlzcGF0Y2hlciwgZCwgb2JqKSB7XG4gIGNlbGxEaXNwYXRjaGVyLmNhbGwoXCJjZWxsY29udGV4dG1lbnVcIiwgb2JqLCBkKTtcbn07XG5cbnZhciBoZWxwZXIgPSB7XG4gIGQzX2RyYXdTaGFwZXM6IGZ1bmN0aW9uIGQzX2RyYXdTaGFwZXMoc2hhcGUsIHNoYXBlcywgc2hhcGVIZWlnaHQsIHNoYXBlV2lkdGgsIHNoYXBlUmFkaXVzLCBwYXRoKSB7XG4gICAgaWYgKHNoYXBlID09PSBcInJlY3RcIikge1xuICAgICAgc2hhcGVzLmF0dHIoXCJoZWlnaHRcIiwgc2hhcGVIZWlnaHQpLmF0dHIoXCJ3aWR0aFwiLCBzaGFwZVdpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHNoYXBlID09PSBcImNpcmNsZVwiKSB7XG4gICAgICBzaGFwZXMuYXR0cihcInJcIiwgc2hhcGVSYWRpdXMpO1xuICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwibGluZVwiKSB7XG4gICAgICBzaGFwZXMuYXR0cihcIngxXCIsIDApLmF0dHIoXCJ4MlwiLCBzaGFwZVdpZHRoKS5hdHRyKFwieTFcIiwgMCkuYXR0cihcInkyXCIsIDApO1xuICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwicGF0aFwiKSB7XG4gICAgICBzaGFwZXMuYXR0cihcImRcIiwgcGF0aCk7XG4gICAgfVxuICB9LFxuXG4gIGQzX2FkZFRleHQ6IGZ1bmN0aW9uIGQzX2FkZFRleHQoc3ZnLCBlbnRlciwgbGFiZWxzLCBjbGFzc1ByZWZpeCwgbGFiZWxXaWR0aCkge1xuICAgIGVudGVyLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJsYWJlbFwiKTtcbiAgICB2YXIgdGV4dCA9IHN2Zy5zZWxlY3RBbGwoXCJnLlwiICsgY2xhc3NQcmVmaXggKyBcImNlbGwgdGV4dC5cIiArIGNsYXNzUHJlZml4ICsgXCJsYWJlbFwiKS5kYXRhKGxhYmVscykudGV4dChkM19pZGVudGl0eSk7XG5cbiAgICBpZiAobGFiZWxXaWR0aCkge1xuICAgICAgc3ZnLnNlbGVjdEFsbChcImcuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbCB0ZXh0LlwiICsgY2xhc3NQcmVmaXggKyBcImxhYmVsXCIpLmNhbGwoZDNfdGV4dFdyYXBwaW5nLCBsYWJlbFdpZHRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfSxcblxuICBkM19jYWxjVHlwZTogZnVuY3Rpb24gZDNfY2FsY1R5cGUoc2NhbGUsIGFzY2VuZGluZywgY2VsbHMsIGxhYmVscywgbGFiZWxGb3JtYXQsIGxhYmVsRGVsaW1pdGVyKSB7XG4gICAgdmFyIHR5cGUgPSBzY2FsZS5pbnZlcnRFeHRlbnQgPyBkM19xdWFudExlZ2VuZChzY2FsZSwgbGFiZWxGb3JtYXQsIGxhYmVsRGVsaW1pdGVyKSA6IHNjYWxlLnRpY2tzID8gZDNfbGluZWFyTGVnZW5kKHNjYWxlLCBjZWxscywgbGFiZWxGb3JtYXQpIDogZDNfb3JkaW5hbExlZ2VuZChzY2FsZSk7XG5cbiAgICAvL2ZvciBkMy5zY2FsZVNlcXVlbnRpYWwgdGhhdCBkb2Vzbid0IGhhdmUgYSByYW5nZSBmdW5jdGlvblxuICAgIHZhciByYW5nZSA9IHNjYWxlLnJhbmdlICYmIHNjYWxlLnJhbmdlKCkgfHwgc2NhbGUuZG9tYWluKCk7XG4gICAgdHlwZS5sYWJlbHMgPSBkM19tZXJnZUxhYmVscyh0eXBlLmxhYmVscywgbGFiZWxzLCBzY2FsZS5kb21haW4oKSwgcmFuZ2UsIGxhYmVsRGVsaW1pdGVyKTtcblxuICAgIGlmIChhc2NlbmRpbmcpIHtcbiAgICAgIHR5cGUubGFiZWxzID0gZDNfcmV2ZXJzZSh0eXBlLmxhYmVscyk7XG4gICAgICB0eXBlLmRhdGEgPSBkM19yZXZlcnNlKHR5cGUuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH0sXG5cbiAgZDNfZmlsdGVyQ2VsbHM6IGZ1bmN0aW9uIGQzX2ZpbHRlckNlbGxzKHR5cGUsIGNlbGxGaWx0ZXIpIHtcbiAgICB2YXIgZmlsdGVyQ2VsbHMgPSB0eXBlLmRhdGEubWFwKGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiBkLCBsYWJlbDogdHlwZS5sYWJlbHNbaV0gfTtcbiAgICB9KS5maWx0ZXIoY2VsbEZpbHRlcik7XG4gICAgdmFyIGRhdGFWYWx1ZXMgPSBmaWx0ZXJDZWxscy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLmRhdGE7XG4gICAgfSk7XG4gICAgdmFyIGxhYmVsVmFsdWVzID0gZmlsdGVyQ2VsbHMubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gZC5sYWJlbDtcbiAgICB9KTtcbiAgICB0eXBlLmRhdGEgPSB0eXBlLmRhdGEuZmlsdGVyKGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gZGF0YVZhbHVlcy5pbmRleE9mKGQpICE9PSAtMTtcbiAgICB9KTtcbiAgICB0eXBlLmxhYmVscyA9IHR5cGUubGFiZWxzLmZpbHRlcihmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGxhYmVsVmFsdWVzLmluZGV4T2YoZCkgIT09IC0xO1xuICAgIH0pO1xuICAgIHJldHVybiB0eXBlO1xuICB9LFxuXG4gIGQzX3BsYWNlbWVudDogZnVuY3Rpb24gZDNfcGxhY2VtZW50KG9yaWVudCwgY2VsbCwgY2VsbFRyYW5zLCB0ZXh0LCB0ZXh0VHJhbnMsIGxhYmVsQWxpZ24sIGxhYmVsUG9zaXRpb24pIHtcbiAgICBjZWxsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgY2VsbFRyYW5zKTtcbiAgICB0ZXh0LmF0dHIoXCJ0cmFuc2Zvcm1cIiwgdGV4dFRyYW5zKTtcbiAgICBpZiAob3JpZW50ID09PSBcImhvcml6b250YWxcIiAmJiBsYWJlbFBvc2l0aW9uID09PSBcImJlbG93XCIpIHtcbiAgICAgIHRleHQuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBsYWJlbEFsaWduKTtcbiAgICB9XG4gIH0sXG5cbiAgZDNfYWRkRXZlbnRzOiBmdW5jdGlvbiBkM19hZGRFdmVudHMoY2VsbHMsIGRpc3BhdGNoZXIpIHtcbiAgICBjZWxscy5vbihcIm1vdXNlb3Zlci5sZWdlbmRcIiwgZnVuY3Rpb24gKGQpIHtcbiAgICAgIGQzX2NlbGxPdmVyKGRpc3BhdGNoZXIsIGQsIHRoaXMpO1xuICAgIH0pLm9uKFwibW91c2VvdXQubGVnZW5kXCIsIGZ1bmN0aW9uIChkKSB7XG4gICAgICBkM19jZWxsT3V0KGRpc3BhdGNoZXIsIGQsIHRoaXMpO1xuICAgIH0pLm9uKFwiY2xpY2subGVnZW5kXCIsIGZ1bmN0aW9uIChkKSB7XG4gICAgICBkM19jZWxsQ2xpY2soZGlzcGF0Y2hlciwgZCwgdGhpcyk7XG4gICAgfSkub24oXCJjb250ZXh0bWVudS5sZWdlbmRcIiwgZnVuY3Rpb24gKGQpIHtcbiAgICAgIGQzX2NvbnRleHRtZW51KGRpc3BhdGNoZXIsIGQsIHRoaXMpO1xuICAgIH0pO1xuICB9LFxuXG4gIGQzX3RpdGxlOiBmdW5jdGlvbiBkM190aXRsZShzdmcsIHRpdGxlLCBjbGFzc1ByZWZpeCwgdGl0bGVXaWR0aCkge1xuICAgIGlmICh0aXRsZSAhPT0gXCJcIikge1xuICAgICAgdmFyIHRpdGxlVGV4dCA9IHN2Zy5zZWxlY3RBbGwoXCJ0ZXh0LlwiICsgY2xhc3NQcmVmaXggKyBcImxlZ2VuZFRpdGxlXCIpO1xuXG4gICAgICB0aXRsZVRleHQuZGF0YShbdGl0bGVdKS5lbnRlcigpLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRUaXRsZVwiKTtcblxuICAgICAgc3ZnLnNlbGVjdEFsbChcInRleHQuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIikudGV4dCh0aXRsZSk7XG5cbiAgICAgIGlmICh0aXRsZVdpZHRoKSB7XG4gICAgICAgIHN2Zy5zZWxlY3RBbGwoXCJ0ZXh0LlwiICsgY2xhc3NQcmVmaXggKyBcImxlZ2VuZFRpdGxlXCIpLmNhbGwoZDNfdGV4dFdyYXBwaW5nLCB0aXRsZVdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNlbGxzU3ZnID0gc3ZnLnNlbGVjdChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKTtcbiAgICAgIHZhciB5T2Zmc2V0ID0gc3ZnLnNlbGVjdChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRUaXRsZVwiKS5ub2RlcygpLm1hcChmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gZC5nZXRCQm94KCkuaGVpZ2h0O1xuICAgICAgfSlbMF0sXG4gICAgICAgICAgeE9mZnNldCA9IC1jZWxsc1N2Zy5ub2RlcygpLm1hcChmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gZC5nZXRCQm94KCkueDtcbiAgICAgIH0pWzBdO1xuICAgICAgY2VsbHNTdmcuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHhPZmZzZXQgKyBcIixcIiArIHlPZmZzZXQgKyBcIilcIik7XG4gICAgfVxuICB9LFxuXG4gIGQzX2RlZmF1bHRMb2NhbGU6IHtcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9LFxuXG4gIGQzX2RlZmF1bHRGb3JtYXRTcGVjaWZpZXI6IFwiLjAxZlwiLFxuXG4gIGQzX2RlZmF1bHREZWxpbWl0ZXI6IFwidG9cIlxufTtcblxuZnVuY3Rpb24gY29sb3IoKSB7XG4gIHZhciBzY2FsZSA9IHNjYWxlTGluZWFyKCksXG4gICAgICBzaGFwZSA9IFwicmVjdFwiLFxuICAgICAgc2hhcGVXaWR0aCA9IDE1LFxuICAgICAgc2hhcGVIZWlnaHQgPSAxNSxcbiAgICAgIHNoYXBlUmFkaXVzID0gMTAsXG4gICAgICBzaGFwZVBhZGRpbmcgPSAyLFxuICAgICAgY2VsbHMgPSBbNV0sXG4gICAgICBjZWxsRmlsdGVyID0gdm9pZCAwLFxuICAgICAgbGFiZWxzID0gW10sXG4gICAgICBjbGFzc1ByZWZpeCA9IFwiXCIsXG4gICAgICB1c2VDbGFzcyA9IGZhbHNlLFxuICAgICAgdGl0bGUgPSBcIlwiLFxuICAgICAgbG9jYWxlID0gaGVscGVyLmQzX2RlZmF1bHRMb2NhbGUsXG4gICAgICBzcGVjaWZpZXIgPSBoZWxwZXIuZDNfZGVmYXVsdEZvcm1hdFNwZWNpZmllcixcbiAgICAgIGxhYmVsT2Zmc2V0ID0gMTAsXG4gICAgICBsYWJlbEFsaWduID0gXCJtaWRkbGVcIixcbiAgICAgIGxhYmVsUG9zaXRpb24gPSBcImJlbG93XCIsXG4gICAgICBsYWJlbERlbGltaXRlciA9IGhlbHBlci5kM19kZWZhdWx0RGVsaW1pdGVyLFxuICAgICAgbGFiZWxXcmFwID0gdm9pZCAwLFxuICAgICAgb3JpZW50ID0gXCJ2ZXJ0aWNhbFwiLFxuICAgICAgYXNjZW5kaW5nID0gZmFsc2UsXG4gICAgICBwYXRoID0gdm9pZCAwLFxuICAgICAgdGl0bGVXaWR0aCA9IHZvaWQgMCxcbiAgICAgIGxlZ2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaChcImNlbGxvdmVyXCIsIFwiY2VsbG91dFwiLCBcImNlbGxjbGlja1wiLCBcImNlbGxjb250ZXh0bWVudVwiKTtcblxuICBmdW5jdGlvbiBsZWdlbmQoc3ZnKSB7XG4gICAgdmFyIHR5cGUgPSBoZWxwZXIuZDNfY2FsY1R5cGUoc2NhbGUsIGFzY2VuZGluZywgY2VsbHMsIGxhYmVscywgbG9jYWxlLmZvcm1hdChzcGVjaWZpZXIpLCBsYWJlbERlbGltaXRlciksXG4gICAgICAgIGxlZ2VuZEcgPSBzdmcuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKFtzY2FsZV0pO1xuXG4gICAgbGVnZW5kRy5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKTtcblxuICAgIGlmIChjZWxsRmlsdGVyKSB7XG4gICAgICBoZWxwZXIuZDNfZmlsdGVyQ2VsbHModHlwZSwgY2VsbEZpbHRlcik7XG4gICAgfVxuXG4gICAgdmFyIGNlbGwgPSBzdmcuc2VsZWN0KFwiLlwiICsgY2xhc3NQcmVmaXggKyBcImxlZ2VuZENlbGxzXCIpLnNlbGVjdEFsbChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpLmRhdGEodHlwZS5kYXRhKTtcblxuICAgIHZhciBjZWxsRW50ZXIgPSBjZWxsLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NQcmVmaXggKyBcImNlbGxcIik7XG4gICAgY2VsbEVudGVyLmFwcGVuZChzaGFwZSkuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJzd2F0Y2hcIik7XG5cbiAgICB2YXIgc2hhcGVzID0gc3ZnLnNlbGVjdEFsbChcImcuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbCBcIiArIHNoYXBlICsgXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwic3dhdGNoXCIpLmRhdGEodHlwZS5kYXRhKTtcblxuICAgIC8vYWRkIGV2ZW50IGhhbmRsZXJzXG4gICAgaGVscGVyLmQzX2FkZEV2ZW50cyhjZWxsRW50ZXIsIGxlZ2VuZERpc3BhdGNoZXIpO1xuXG4gICAgY2VsbC5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKFwib3BhY2l0eVwiLCAwKS5yZW1vdmUoKTtcbiAgICBzaGFwZXMuZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMCkucmVtb3ZlKCk7XG5cbiAgICBzaGFwZXMgPSBzaGFwZXMubWVyZ2Uoc2hhcGVzKTtcblxuICAgIGhlbHBlci5kM19kcmF3U2hhcGVzKHNoYXBlLCBzaGFwZXMsIHNoYXBlSGVpZ2h0LCBzaGFwZVdpZHRoLCBzaGFwZVJhZGl1cywgcGF0aCk7XG4gICAgdmFyIHRleHQgPSBoZWxwZXIuZDNfYWRkVGV4dChzdmcsIGNlbGxFbnRlciwgdHlwZS5sYWJlbHMsIGNsYXNzUHJlZml4LCBsYWJlbFdyYXApO1xuXG4gICAgLy8gd2UgbmVlZCB0byBtZXJnZSB0aGUgc2VsZWN0aW9uLCBvdGhlcndpc2UgY2hhbmdlcyBpbiB0aGUgbGVnZW5kIChlLmcuIGNoYW5nZSBvZiBvcmllbnRhdGlvbikgYXJlIGFwcGxpZWQgb25seSB0byB0aGUgbmV3IGNlbGxzIGFuZCBub3QgdGhlIGV4aXN0aW5nIG9uZXMuXG4gICAgY2VsbCA9IGNlbGxFbnRlci5tZXJnZShjZWxsKTtcblxuICAgIC8vIHNldHMgcGxhY2VtZW50XG4gICAgdmFyIHRleHRTaXplID0gdGV4dC5ub2RlcygpLm1hcChmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGQuZ2V0QkJveCgpO1xuICAgIH0pLFxuICAgICAgICBzaGFwZVNpemUgPSBzaGFwZXMubm9kZXMoKS5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLmdldEJCb3goKTtcbiAgICB9KTtcbiAgICAvL3NldHMgc2NhbGVcbiAgICAvL2V2ZXJ5dGhpbmcgaXMgZmlsbCBleGNlcHQgZm9yIGxpbmUgd2hpY2ggaXMgc3Ryb2tlLFxuICAgIGlmICghdXNlQ2xhc3MpIHtcbiAgICAgIGlmIChzaGFwZSA9PSBcImxpbmVcIikge1xuICAgICAgICBzaGFwZXMuc3R5bGUoXCJzdHJva2VcIiwgdHlwZS5mZWF0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNoYXBlcy5zdHlsZShcImZpbGxcIiwgdHlwZS5mZWF0dXJlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2hhcGVzLmF0dHIoXCJjbGFzc1wiLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gY2xhc3NQcmVmaXggKyBcInN3YXRjaCBcIiArIHR5cGUuZmVhdHVyZShkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBjZWxsVHJhbnMgPSB2b2lkIDAsXG4gICAgICAgIHRleHRUcmFucyA9IHZvaWQgMCxcbiAgICAgICAgdGV4dEFsaWduID0gbGFiZWxBbGlnbiA9PSBcInN0YXJ0XCIgPyAwIDogbGFiZWxBbGlnbiA9PSBcIm1pZGRsZVwiID8gMC41IDogMTtcblxuICAgIC8vcG9zaXRpb25zIGNlbGxzIGFuZCB0ZXh0XG4gICAgaWYgKG9yaWVudCA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICB2YXIgY2VsbFNpemUgPSB0ZXh0U2l6ZS5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGQuaGVpZ2h0LCBzaGFwZVNpemVbaV0uaGVpZ2h0KTtcbiAgICAgIH0pO1xuXG4gICAgICBjZWxsVHJhbnMgPSBmdW5jdGlvbiBjZWxsVHJhbnMoZCwgaSkge1xuICAgICAgICB2YXIgaGVpZ2h0ID0gc3VtKGNlbGxTaXplLnNsaWNlKDAsIGkpKTtcbiAgICAgICAgcmV0dXJuIFwidHJhbnNsYXRlKDAsIFwiICsgKGhlaWdodCArIGkgKiBzaGFwZVBhZGRpbmcpICsgXCIpXCI7XG4gICAgICB9O1xuXG4gICAgICB0ZXh0VHJhbnMgPSBmdW5jdGlvbiB0ZXh0VHJhbnMoZCwgaSkge1xuICAgICAgICByZXR1cm4gXCJ0cmFuc2xhdGUoIFwiICsgKHNoYXBlU2l6ZVtpXS53aWR0aCArIHNoYXBlU2l6ZVtpXS54ICsgbGFiZWxPZmZzZXQpICsgXCIsIFwiICsgKHNoYXBlU2l6ZVtpXS55ICsgc2hhcGVTaXplW2ldLmhlaWdodCAvIDIgKyA1KSArIFwiKVwiO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgIGNlbGxUcmFucyA9IGZ1bmN0aW9uIGNlbGxUcmFucyhkLCBpKSB7XG4gICAgICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIGkgKiAoc2hhcGVTaXplW2ldLndpZHRoICsgc2hhcGVQYWRkaW5nKSArIFwiLDApXCI7XG4gICAgICB9O1xuICAgICAgaWYgKGxhYmVsUG9zaXRpb24gPT09IFwiYmVsb3dcIikge1xuICAgICAgICB0ZXh0VHJhbnMgPSBmdW5jdGlvbiB0ZXh0VHJhbnMoZCwgaSkge1xuICAgICAgICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIChzaGFwZVNpemVbaV0ud2lkdGggKiB0ZXh0QWxpZ24gKyBzaGFwZVNpemVbaV0ueCkgKyBcIixcXG4gICAgICAgICAgXCIgKyAoc2hhcGVTaXplW2ldLmhlaWdodCArIHNoYXBlU2l6ZVtpXS55ICsgbGFiZWxPZmZzZXQgKyA4KSArIFwiKVwiO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChsYWJlbFBvc2l0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgdGV4dFRyYW5zID0gZnVuY3Rpb24gdGV4dFRyYW5zKGQsIGkpIHtcbiAgICAgICAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAoc2hhcGVTaXplW2ldLndpZHRoICsgc2hhcGVTaXplW2ldLnggKyA0KSArIFwiLFxcbiAgICAgICAgICAgIFwiICsgKHNoYXBlU2l6ZVtpXS5oZWlnaHQgKyBzaGFwZVNpemVbaV0ueSkgKyBcIilcIjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaGVscGVyLmQzX3BsYWNlbWVudChvcmllbnQsIGNlbGwsIGNlbGxUcmFucywgdGV4dCwgdGV4dFRyYW5zLCBsYWJlbEFsaWduLCBsYWJlbFBvc2l0aW9uKTtcbiAgICBoZWxwZXIuZDNfdGl0bGUoc3ZnLCB0aXRsZSwgY2xhc3NQcmVmaXgsIHRpdGxlV2lkdGgpO1xuXG4gICAgY2VsbC50cmFuc2l0aW9uKCkuc3R5bGUoXCJvcGFjaXR5XCIsIDEpO1xuICB9XG5cbiAgbGVnZW5kLnNjYWxlID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZTtcbiAgICBzY2FsZSA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuY2VsbHMgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNlbGxzO1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF87XG4gICAgfVxuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNlbGxGaWx0ZXI7XG4gICAgY2VsbEZpbHRlciA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuc2hhcGUgPSBmdW5jdGlvbiAoXywgZCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNoYXBlO1xuICAgIGlmIChfID09IFwicmVjdFwiIHx8IF8gPT0gXCJjaXJjbGVcIiB8fCBfID09IFwibGluZVwiIHx8IF8gPT0gXCJwYXRoXCIgJiYgdHlwZW9mIGQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHNoYXBlID0gXztcbiAgICAgIHBhdGggPSBkO1xuICAgIH1cbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5zaGFwZVdpZHRoID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZVdpZHRoO1xuICAgIHNoYXBlV2lkdGggPSArXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5zaGFwZUhlaWdodCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVIZWlnaHQ7XG4gICAgc2hhcGVIZWlnaHQgPSArXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5zaGFwZVJhZGl1cyA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVSYWRpdXM7XG4gICAgc2hhcGVSYWRpdXMgPSArXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5zaGFwZVBhZGRpbmcgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNoYXBlUGFkZGluZztcbiAgICBzaGFwZVBhZGRpbmcgPSArXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5sYWJlbHMgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVscztcbiAgICBsYWJlbHMgPSBfO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxhYmVsQWxpZ24gPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsQWxpZ247XG4gICAgaWYgKF8gPT0gXCJzdGFydFwiIHx8IF8gPT0gXCJlbmRcIiB8fCBfID09IFwibWlkZGxlXCIpIHtcbiAgICAgIGxhYmVsQWxpZ24gPSBfO1xuICAgIH1cbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5sYWJlbFBvc2l0aW9uID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbFBvc2l0aW9uO1xuICAgIGlmIChfID09IFwiYmVsb3dcIiB8fCBfID09IFwicmlnaHRcIikge1xuICAgICAgbGFiZWxQb3NpdGlvbiA9IF87XG4gICAgfVxuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxvY2FsZSA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbG9jYWxlO1xuICAgIGxvY2FsZSA9IGZvcm1hdExvY2FsZShfKTtcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5sYWJlbEZvcm1hdCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGVnZW5kLmxvY2FsZSgpLmZvcm1hdChzcGVjaWZpZXIpO1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihfKTtcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5sYWJlbE9mZnNldCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxPZmZzZXQ7XG4gICAgbGFiZWxPZmZzZXQgPSArXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5sYWJlbERlbGltaXRlciA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxEZWxpbWl0ZXI7XG4gICAgbGFiZWxEZWxpbWl0ZXIgPSBfO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxhYmVsV3JhcCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxXcmFwO1xuICAgIGxhYmVsV3JhcCA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQudXNlQ2xhc3MgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHVzZUNsYXNzO1xuICAgIGlmIChfID09PSB0cnVlIHx8IF8gPT09IGZhbHNlKSB7XG4gICAgICB1c2VDbGFzcyA9IF87XG4gICAgfVxuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLm9yaWVudCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gb3JpZW50O1xuICAgIF8gPSBfLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKF8gPT0gXCJob3Jpem9udGFsXCIgfHwgXyA9PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIG9yaWVudCA9IF87XG4gICAgfVxuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmFzY2VuZGluZyA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gYXNjZW5kaW5nO1xuICAgIGFzY2VuZGluZyA9ICEhXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5jbGFzc1ByZWZpeCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2xhc3NQcmVmaXg7XG4gICAgY2xhc3NQcmVmaXggPSBfO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLnRpdGxlID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aXRsZTtcbiAgICB0aXRsZSA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQudGl0bGVXaWR0aCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGl0bGVXaWR0aDtcbiAgICB0aXRsZVdpZHRoID0gXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC50ZXh0V3JhcCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGV4dFdyYXA7XG4gICAgdGV4dFdyYXAgPSBfO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLm9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IGxlZ2VuZERpc3BhdGNoZXIub24uYXBwbHkobGVnZW5kRGlzcGF0Y2hlciwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxlZ2VuZERpc3BhdGNoZXIgPyBsZWdlbmQgOiB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gbGVnZW5kO1xufVxuXG5mdW5jdGlvbiBzaXplKCkge1xuICB2YXIgc2NhbGUgPSBzY2FsZUxpbmVhcigpLFxuICAgICAgc2hhcGUgPSBcInJlY3RcIixcbiAgICAgIHNoYXBlV2lkdGggPSAxNSxcbiAgICAgIHNoYXBlUGFkZGluZyA9IDIsXG4gICAgICBjZWxscyA9IFs1XSxcbiAgICAgIGNlbGxGaWx0ZXIgPSB2b2lkIDAsXG4gICAgICBsYWJlbHMgPSBbXSxcbiAgICAgIGNsYXNzUHJlZml4ID0gXCJcIixcbiAgICAgIHRpdGxlID0gXCJcIixcbiAgICAgIGxvY2FsZSA9IGhlbHBlci5kM19kZWZhdWx0TG9jYWxlLFxuICAgICAgc3BlY2lmaWVyID0gaGVscGVyLmQzX2RlZmF1bHRGb3JtYXRTcGVjaWZpZXIsXG4gICAgICBsYWJlbE9mZnNldCA9IDEwLFxuICAgICAgbGFiZWxBbGlnbiA9IFwibWlkZGxlXCIsXG4gICAgICBsYWJlbFBvc2l0aW9uID0gXCJiZWxvd1wiLFxuICAgICAgbGFiZWxEZWxpbWl0ZXIgPSBoZWxwZXIuZDNfZGVmYXVsdERlbGltaXRlcixcbiAgICAgIGxhYmVsV3JhcCA9IHZvaWQgMCxcbiAgICAgIG9yaWVudCA9IFwidmVydGljYWxcIixcbiAgICAgIGFzY2VuZGluZyA9IGZhbHNlLFxuICAgICAgcGF0aCA9IHZvaWQgMCxcbiAgICAgIHRpdGxlV2lkdGggPSB2b2lkIDAsXG4gICAgICBsZWdlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2goXCJjZWxsb3ZlclwiLCBcImNlbGxvdXRcIiwgXCJjZWxsY2xpY2tcIiwgXCJjZWxsY29udGV4dG1lbnVcIik7XG5cbiAgZnVuY3Rpb24gbGVnZW5kKHN2Zykge1xuICAgIHZhciB0eXBlID0gaGVscGVyLmQzX2NhbGNUeXBlKHNjYWxlLCBhc2NlbmRpbmcsIGNlbGxzLCBsYWJlbHMsIGxvY2FsZS5mb3JtYXQoc3BlY2lmaWVyKSwgbGFiZWxEZWxpbWl0ZXIpLFxuICAgICAgICBsZWdlbmRHID0gc3ZnLnNlbGVjdEFsbChcImdcIikuZGF0YShbc2NhbGVdKTtcblxuICAgIGlmIChjZWxsRmlsdGVyKSB7XG4gICAgICBoZWxwZXIuZDNfZmlsdGVyQ2VsbHModHlwZSwgY2VsbEZpbHRlcik7XG4gICAgfVxuXG4gICAgbGVnZW5kRy5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKTtcblxuICAgIHZhciBjZWxsID0gc3ZnLnNlbGVjdChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKS5zZWxlY3RBbGwoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbFwiKS5kYXRhKHR5cGUuZGF0YSk7XG4gICAgdmFyIGNlbGxFbnRlciA9IGNlbGwuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBjbGFzc1ByZWZpeCArIFwiY2VsbFwiKTtcbiAgICBjZWxsRW50ZXIuYXBwZW5kKHNoYXBlKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NQcmVmaXggKyBcInN3YXRjaFwiKTtcblxuICAgIHZhciBzaGFwZXMgPSBzdmcuc2VsZWN0QWxsKFwiZy5cIiArIGNsYXNzUHJlZml4ICsgXCJjZWxsIFwiICsgc2hhcGUgKyBcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJzd2F0Y2hcIik7XG5cbiAgICAvL2FkZCBldmVudCBoYW5kbGVyc1xuICAgIGhlbHBlci5kM19hZGRFdmVudHMoY2VsbEVudGVyLCBsZWdlbmREaXNwYXRjaGVyKTtcblxuICAgIGNlbGwuZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMCkucmVtb3ZlKCk7XG5cbiAgICBzaGFwZXMuZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMCkucmVtb3ZlKCk7XG4gICAgc2hhcGVzID0gc2hhcGVzLm1lcmdlKHNoYXBlcyk7XG5cbiAgICAvL2NyZWF0ZXMgc2hhcGVcbiAgICBpZiAoc2hhcGUgPT09IFwibGluZVwiKSB7XG4gICAgICBoZWxwZXIuZDNfZHJhd1NoYXBlcyhzaGFwZSwgc2hhcGVzLCAwLCBzaGFwZVdpZHRoKTtcbiAgICAgIHNoYXBlcy5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIHR5cGUuZmVhdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlbHBlci5kM19kcmF3U2hhcGVzKHNoYXBlLCBzaGFwZXMsIHR5cGUuZmVhdHVyZSwgdHlwZS5mZWF0dXJlLCB0eXBlLmZlYXR1cmUsIHBhdGgpO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gaGVscGVyLmQzX2FkZFRleHQoc3ZnLCBjZWxsRW50ZXIsIHR5cGUubGFiZWxzLCBjbGFzc1ByZWZpeCwgbGFiZWxXcmFwKTtcblxuICAgIC8vIHdlIG5lZWQgdG8gbWVyZ2UgdGhlIHNlbGVjdGlvbiwgb3RoZXJ3aXNlIGNoYW5nZXMgaW4gdGhlIGxlZ2VuZCAoZS5nLiBjaGFuZ2Ugb2Ygb3JpZW50YXRpb24pIGFyZSBhcHBsaWVkIG9ubHkgdG8gdGhlIG5ldyBjZWxscyBhbmQgbm90IHRoZSBleGlzdGluZyBvbmVzLlxuICAgIGNlbGwgPSBjZWxsRW50ZXIubWVyZ2UoY2VsbCk7XG5cbiAgICAvL3NldHMgcGxhY2VtZW50XG5cbiAgICB2YXIgdGV4dFNpemUgPSB0ZXh0Lm5vZGVzKCkubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gZC5nZXRCQm94KCk7XG4gICAgfSksXG4gICAgICAgIHNoYXBlU2l6ZSA9IHNoYXBlcy5ub2RlcygpLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgdmFyIGJib3ggPSBkLmdldEJCb3goKTtcbiAgICAgIHZhciBzdHJva2UgPSBzY2FsZSh0eXBlLmRhdGFbaV0pO1xuXG4gICAgICBpZiAoc2hhcGUgPT09IFwibGluZVwiICYmIG9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgYmJveC5oZWlnaHQgPSBiYm94LmhlaWdodCArIHN0cm9rZTtcbiAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwibGluZVwiICYmIG9yaWVudCA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGJib3gud2lkdGggPSBiYm94LndpZHRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJib3g7XG4gICAgfSk7XG5cbiAgICB2YXIgbWF4SCA9IG1heChzaGFwZVNpemUsIGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gZC5oZWlnaHQgKyBkLnk7XG4gICAgfSksXG4gICAgICAgIG1heFcgPSBtYXgoc2hhcGVTaXplLCBmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGQud2lkdGggKyBkLng7XG4gICAgfSk7XG5cbiAgICB2YXIgY2VsbFRyYW5zID0gdm9pZCAwLFxuICAgICAgICB0ZXh0VHJhbnMgPSB2b2lkIDAsXG4gICAgICAgIHRleHRBbGlnbiA9IGxhYmVsQWxpZ24gPT0gXCJzdGFydFwiID8gMCA6IGxhYmVsQWxpZ24gPT0gXCJtaWRkbGVcIiA/IDAuNSA6IDE7XG5cbiAgICAvL3Bvc2l0aW9ucyBjZWxscyBhbmQgdGV4dFxuICAgIGlmIChvcmllbnQgPT09IFwidmVydGljYWxcIikge1xuICAgICAgdmFyIGNlbGxTaXplID0gdGV4dFNpemUubWFwKGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChkLmhlaWdodCwgc2hhcGVTaXplW2ldLmhlaWdodCk7XG4gICAgICB9KTtcbiAgICAgIHZhciB5ID0gc2hhcGUgPT0gXCJjaXJjbGVcIiB8fCBzaGFwZSA9PSBcImxpbmVcIiA/IHNoYXBlU2l6ZVswXS5oZWlnaHQgLyAyIDogMDtcbiAgICAgIGNlbGxUcmFucyA9IGZ1bmN0aW9uIGNlbGxUcmFucyhkLCBpKSB7XG4gICAgICAgIHZhciBoZWlnaHQgPSBzdW0oY2VsbFNpemUuc2xpY2UoMCwgaSkpO1xuXG4gICAgICAgIHJldHVybiBcInRyYW5zbGF0ZSgwLCBcIiArICh5ICsgaGVpZ2h0ICsgaSAqIHNoYXBlUGFkZGluZykgKyBcIilcIjtcbiAgICAgIH07XG5cbiAgICAgIHRleHRUcmFucyA9IGZ1bmN0aW9uIHRleHRUcmFucyhkLCBpKSB7XG4gICAgICAgIHJldHVybiBcInRyYW5zbGF0ZSggXCIgKyAobWF4VyArIGxhYmVsT2Zmc2V0KSArIFwiLFxcbiAgICAgICAgICBcIiArIChzaGFwZVNpemVbaV0ueSArIHNoYXBlU2l6ZVtpXS5oZWlnaHQgLyAyICsgNSkgKyBcIilcIjtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBjZWxsVHJhbnMgPSBmdW5jdGlvbiBjZWxsVHJhbnMoZCwgaSkge1xuICAgICAgICB2YXIgd2lkdGggPSBzdW0oc2hhcGVTaXplLnNsaWNlKDAsIGkpLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBkLndpZHRoO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHkgPSBzaGFwZSA9PSBcImNpcmNsZVwiIHx8IHNoYXBlID09IFwibGluZVwiID8gbWF4SCAvIDIgOiAwO1xuICAgICAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAod2lkdGggKyBpICogc2hhcGVQYWRkaW5nKSArIFwiLCBcIiArIHkgKyBcIilcIjtcbiAgICAgIH07XG5cbiAgICAgIHZhciBvZmZzZXQgPSBzaGFwZSA9PSBcImxpbmVcIiA/IG1heEggLyAyIDogbWF4SDtcbiAgICAgIHRleHRUcmFucyA9IGZ1bmN0aW9uIHRleHRUcmFucyhkLCBpKSB7XG4gICAgICAgIHJldHVybiBcInRyYW5zbGF0ZSggXCIgKyAoc2hhcGVTaXplW2ldLndpZHRoICogdGV4dEFsaWduICsgc2hhcGVTaXplW2ldLngpICsgXCIsXFxuICAgICAgICAgICAgICBcIiArIChvZmZzZXQgKyBsYWJlbE9mZnNldCkgKyBcIilcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaGVscGVyLmQzX3BsYWNlbWVudChvcmllbnQsIGNlbGwsIGNlbGxUcmFucywgdGV4dCwgdGV4dFRyYW5zLCBsYWJlbEFsaWduKTtcbiAgICBoZWxwZXIuZDNfdGl0bGUoc3ZnLCB0aXRsZSwgY2xhc3NQcmVmaXgsIHRpdGxlV2lkdGgpO1xuXG4gICAgY2VsbC50cmFuc2l0aW9uKCkuc3R5bGUoXCJvcGFjaXR5XCIsIDEpO1xuICB9XG5cbiAgbGVnZW5kLnNjYWxlID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZTtcbiAgICBzY2FsZSA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuY2VsbHMgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNlbGxzO1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF87XG4gICAgfVxuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNlbGxGaWx0ZXI7XG4gICAgY2VsbEZpbHRlciA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuc2hhcGUgPSBmdW5jdGlvbiAoXywgZCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNoYXBlO1xuICAgIGlmIChfID09IFwicmVjdFwiIHx8IF8gPT0gXCJjaXJjbGVcIiB8fCBfID09IFwibGluZVwiKSB7XG4gICAgICBzaGFwZSA9IF87XG4gICAgICBwYXRoID0gZDtcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuc2hhcGVXaWR0aCA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVXaWR0aDtcbiAgICBzaGFwZVdpZHRoID0gK187XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuc2hhcGVQYWRkaW5nID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZVBhZGRpbmc7XG4gICAgc2hhcGVQYWRkaW5nID0gK187XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQubGFiZWxzID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbHM7XG4gICAgbGFiZWxzID0gXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5sYWJlbEFsaWduID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbEFsaWduO1xuICAgIGlmIChfID09IFwic3RhcnRcIiB8fCBfID09IFwiZW5kXCIgfHwgXyA9PSBcIm1pZGRsZVwiKSB7XG4gICAgICBsYWJlbEFsaWduID0gXztcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQubG9jYWxlID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb2NhbGU7XG4gICAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKF8pO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxhYmVsRm9ybWF0ID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsZWdlbmQubG9jYWxlKCkuZm9ybWF0KHNwZWNpZmllcik7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKF8pO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxhYmVsT2Zmc2V0ID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbE9mZnNldDtcbiAgICBsYWJlbE9mZnNldCA9ICtfO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxhYmVsRGVsaW1pdGVyID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbERlbGltaXRlcjtcbiAgICBsYWJlbERlbGltaXRlciA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQubGFiZWxXcmFwID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbFdyYXA7XG4gICAgbGFiZWxXcmFwID0gXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5vcmllbnQgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudDtcbiAgICBfID0gXy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChfID09IFwiaG9yaXpvbnRhbFwiIHx8IF8gPT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICBvcmllbnQgPSBfO1xuICAgIH1cbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5hc2NlbmRpbmcgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGFzY2VuZGluZztcbiAgICBhc2NlbmRpbmcgPSAhIV87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuY2xhc3NQcmVmaXggPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNsYXNzUHJlZml4O1xuICAgIGNsYXNzUHJlZml4ID0gXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC50aXRsZSA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGl0bGU7XG4gICAgdGl0bGUgPSBfO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLnRpdGxlV2lkdGggPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpdGxlV2lkdGg7XG4gICAgdGl0bGVXaWR0aCA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQub24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gbGVnZW5kRGlzcGF0Y2hlci5vbi5hcHBseShsZWdlbmREaXNwYXRjaGVyLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGVnZW5kRGlzcGF0Y2hlciA/IGxlZ2VuZCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBsZWdlbmQ7XG59XG5cbmZ1bmN0aW9uIHN5bWJvbCgpIHtcbiAgdmFyIHNjYWxlID0gc2NhbGVMaW5lYXIoKSxcbiAgICAgIHNoYXBlID0gXCJwYXRoXCIsXG4gICAgICBzaGFwZVdpZHRoID0gMTUsXG4gICAgICBzaGFwZUhlaWdodCA9IDE1LFxuICAgICAgc2hhcGVSYWRpdXMgPSAxMCxcbiAgICAgIHNoYXBlUGFkZGluZyA9IDUsXG4gICAgICBjZWxscyA9IFs1XSxcbiAgICAgIGNlbGxGaWx0ZXIgPSB2b2lkIDAsXG4gICAgICBsYWJlbHMgPSBbXSxcbiAgICAgIGNsYXNzUHJlZml4ID0gXCJcIixcbiAgICAgIHRpdGxlID0gXCJcIixcbiAgICAgIGxvY2FsZSA9IGhlbHBlci5kM19kZWZhdWx0TG9jYWxlLFxuICAgICAgc3BlY2lmaWVyID0gaGVscGVyLmQzX2RlZmF1bHRGb3JtYXRTcGVjaWZpZXIsXG4gICAgICBsYWJlbEFsaWduID0gXCJtaWRkbGVcIixcbiAgICAgIGxhYmVsUG9zaXRpb24gPSBcImJlbG93XCIsXG4gICAgICBsYWJlbE9mZnNldCA9IDEwLFxuICAgICAgbGFiZWxEZWxpbWl0ZXIgPSBoZWxwZXIuZDNfZGVmYXVsdERlbGltaXRlcixcbiAgICAgIGxhYmVsV3JhcCA9IHZvaWQgMCxcbiAgICAgIG9yaWVudCA9IFwidmVydGljYWxcIixcbiAgICAgIGFzY2VuZGluZyA9IGZhbHNlLFxuICAgICAgdGl0bGVXaWR0aCA9IHZvaWQgMCxcbiAgICAgIGxlZ2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaChcImNlbGxvdmVyXCIsIFwiY2VsbG91dFwiLCBcImNlbGxjbGlja1wiLCBcImNlbGxjb250ZXh0bWVudVwiKTtcblxuICBmdW5jdGlvbiBsZWdlbmQoc3ZnKSB7XG4gICAgdmFyIHR5cGUgPSBoZWxwZXIuZDNfY2FsY1R5cGUoc2NhbGUsIGFzY2VuZGluZywgY2VsbHMsIGxhYmVscywgbG9jYWxlLmZvcm1hdChzcGVjaWZpZXIpLCBsYWJlbERlbGltaXRlciksXG4gICAgICAgIGxlZ2VuZEcgPSBzdmcuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKFtzY2FsZV0pO1xuXG4gICAgaWYgKGNlbGxGaWx0ZXIpIHtcbiAgICAgIGhlbHBlci5kM19maWx0ZXJDZWxscyh0eXBlLCBjZWxsRmlsdGVyKTtcbiAgICB9XG5cbiAgICBsZWdlbmRHLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NQcmVmaXggKyBcImxlZ2VuZENlbGxzXCIpO1xuXG4gICAgdmFyIGNlbGwgPSBzdmcuc2VsZWN0KFwiLlwiICsgY2xhc3NQcmVmaXggKyBcImxlZ2VuZENlbGxzXCIpLnNlbGVjdEFsbChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpLmRhdGEodHlwZS5kYXRhKTtcbiAgICB2YXIgY2VsbEVudGVyID0gY2VsbC5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpO1xuICAgIGNlbGxFbnRlci5hcHBlbmQoc2hhcGUpLmF0dHIoXCJjbGFzc1wiLCBjbGFzc1ByZWZpeCArIFwic3dhdGNoXCIpO1xuXG4gICAgdmFyIHNoYXBlcyA9IHN2Zy5zZWxlY3RBbGwoXCJnLlwiICsgY2xhc3NQcmVmaXggKyBcImNlbGwgXCIgKyBzaGFwZSArIFwiLlwiICsgY2xhc3NQcmVmaXggKyBcInN3YXRjaFwiKTtcblxuICAgIC8vYWRkIGV2ZW50IGhhbmRsZXJzXG4gICAgaGVscGVyLmQzX2FkZEV2ZW50cyhjZWxsRW50ZXIsIGxlZ2VuZERpc3BhdGNoZXIpO1xuXG4gICAgLy9yZW1vdmUgb2xkIHNoYXBlc1xuICAgIGNlbGwuZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMCkucmVtb3ZlKCk7XG4gICAgc2hhcGVzLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoXCJvcGFjaXR5XCIsIDApLnJlbW92ZSgpO1xuICAgIHNoYXBlcyA9IHNoYXBlcy5tZXJnZShzaGFwZXMpO1xuXG4gICAgaGVscGVyLmQzX2RyYXdTaGFwZXMoc2hhcGUsIHNoYXBlcywgc2hhcGVIZWlnaHQsIHNoYXBlV2lkdGgsIHNoYXBlUmFkaXVzLCB0eXBlLmZlYXR1cmUpO1xuICAgIHZhciB0ZXh0ID0gaGVscGVyLmQzX2FkZFRleHQoc3ZnLCBjZWxsRW50ZXIsIHR5cGUubGFiZWxzLCBjbGFzc1ByZWZpeCwgbGFiZWxXcmFwKTtcblxuICAgIC8vIHdlIG5lZWQgdG8gbWVyZ2UgdGhlIHNlbGVjdGlvbiwgb3RoZXJ3aXNlIGNoYW5nZXMgaW4gdGhlIGxlZ2VuZCAoZS5nLiBjaGFuZ2Ugb2Ygb3JpZW50YXRpb24pIGFyZSBhcHBsaWVkIG9ubHkgdG8gdGhlIG5ldyBjZWxscyBhbmQgbm90IHRoZSBleGlzdGluZyBvbmVzLlxuICAgIGNlbGwgPSBjZWxsRW50ZXIubWVyZ2UoY2VsbCk7XG5cbiAgICAvLyBzZXRzIHBsYWNlbWVudFxuICAgIHZhciB0ZXh0U2l6ZSA9IHRleHQubm9kZXMoKS5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLmdldEJCb3goKTtcbiAgICB9KSxcbiAgICAgICAgc2hhcGVTaXplID0gc2hhcGVzLm5vZGVzKCkubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gZC5nZXRCQm94KCk7XG4gICAgfSk7XG5cbiAgICB2YXIgbWF4SCA9IG1heChzaGFwZVNpemUsIGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gZC5oZWlnaHQ7XG4gICAgfSksXG4gICAgICAgIG1heFcgPSBtYXgoc2hhcGVTaXplLCBmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGQud2lkdGg7XG4gICAgfSk7XG5cbiAgICB2YXIgY2VsbFRyYW5zID0gdm9pZCAwLFxuICAgICAgICB0ZXh0VHJhbnMgPSB2b2lkIDAsXG4gICAgICAgIHRleHRBbGlnbiA9IGxhYmVsQWxpZ24gPT0gXCJzdGFydFwiID8gMCA6IGxhYmVsQWxpZ24gPT0gXCJtaWRkbGVcIiA/IDAuNSA6IDE7XG5cbiAgICAvL3Bvc2l0aW9ucyBjZWxscyBhbmQgdGV4dFxuICAgIGlmIChvcmllbnQgPT09IFwidmVydGljYWxcIikge1xuICAgICAgdmFyIGNlbGxTaXplID0gdGV4dFNpemUubWFwKGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChtYXhILCBkLmhlaWdodCk7XG4gICAgICB9KTtcblxuICAgICAgY2VsbFRyYW5zID0gZnVuY3Rpb24gY2VsbFRyYW5zKGQsIGkpIHtcbiAgICAgICAgdmFyIGhlaWdodCA9IHN1bShjZWxsU2l6ZS5zbGljZSgwLCBpKSk7XG4gICAgICAgIHJldHVybiBcInRyYW5zbGF0ZSgwLCBcIiArIChoZWlnaHQgKyBpICogc2hhcGVQYWRkaW5nKSArIFwiIClcIjtcbiAgICAgIH07XG4gICAgICB0ZXh0VHJhbnMgPSBmdW5jdGlvbiB0ZXh0VHJhbnMoZCwgaSkge1xuICAgICAgICByZXR1cm4gXCJ0cmFuc2xhdGUoIFwiICsgKG1heFcgKyBsYWJlbE9mZnNldCkgKyBcIixcXG4gICAgICAgICAgICAgIFwiICsgKHNoYXBlU2l6ZVtpXS55ICsgc2hhcGVTaXplW2ldLmhlaWdodCAvIDIgKyA1KSArIFwiKVwiO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgIGNlbGxUcmFucyA9IGZ1bmN0aW9uIGNlbGxUcmFucyhkLCBpKSB7XG4gICAgICAgIHJldHVybiBcInRyYW5zbGF0ZSggXCIgKyBpICogKG1heFcgKyBzaGFwZVBhZGRpbmcpICsgXCIsMClcIjtcbiAgICAgIH07XG4gICAgICB0ZXh0VHJhbnMgPSBmdW5jdGlvbiB0ZXh0VHJhbnMoZCwgaSkge1xuICAgICAgICByZXR1cm4gXCJ0cmFuc2xhdGUoIFwiICsgKHNoYXBlU2l6ZVtpXS53aWR0aCAqIHRleHRBbGlnbiArIHNoYXBlU2l6ZVtpXS54KSArIFwiLFxcbiAgICAgICAgICAgICAgXCIgKyAobWF4SCArIGxhYmVsT2Zmc2V0KSArIFwiKVwiO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBoZWxwZXIuZDNfcGxhY2VtZW50KG9yaWVudCwgY2VsbCwgY2VsbFRyYW5zLCB0ZXh0LCB0ZXh0VHJhbnMsIGxhYmVsQWxpZ24pO1xuICAgIGhlbHBlci5kM190aXRsZShzdmcsIHRpdGxlLCBjbGFzc1ByZWZpeCwgdGl0bGVXaWR0aCk7XG4gICAgY2VsbC50cmFuc2l0aW9uKCkuc3R5bGUoXCJvcGFjaXR5XCIsIDEpO1xuICB9XG5cbiAgbGVnZW5kLnNjYWxlID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZTtcbiAgICBzY2FsZSA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuY2VsbHMgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNlbGxzO1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF87XG4gICAgfVxuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNlbGxGaWx0ZXI7XG4gICAgY2VsbEZpbHRlciA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuc2hhcGVQYWRkaW5nID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZVBhZGRpbmc7XG4gICAgc2hhcGVQYWRkaW5nID0gK187XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQubGFiZWxzID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbHM7XG4gICAgbGFiZWxzID0gXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5sYWJlbEFsaWduID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbEFsaWduO1xuICAgIGlmIChfID09IFwic3RhcnRcIiB8fCBfID09IFwiZW5kXCIgfHwgXyA9PSBcIm1pZGRsZVwiKSB7XG4gICAgICBsYWJlbEFsaWduID0gXztcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQubG9jYWxlID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb2NhbGU7XG4gICAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKF8pO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxhYmVsRm9ybWF0ID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsZWdlbmQubG9jYWxlKCkuZm9ybWF0KHNwZWNpZmllcik7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKF8pO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxhYmVsT2Zmc2V0ID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbE9mZnNldDtcbiAgICBsYWJlbE9mZnNldCA9ICtfO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLmxhYmVsRGVsaW1pdGVyID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbERlbGltaXRlcjtcbiAgICBsYWJlbERlbGltaXRlciA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQubGFiZWxXcmFwID0gZnVuY3Rpb24gKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbFdyYXA7XG4gICAgbGFiZWxXcmFwID0gXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5vcmllbnQgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudDtcbiAgICBfID0gXy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChfID09IFwiaG9yaXpvbnRhbFwiIHx8IF8gPT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICBvcmllbnQgPSBfO1xuICAgIH1cbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC5hc2NlbmRpbmcgPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGFzY2VuZGluZztcbiAgICBhc2NlbmRpbmcgPSAhIV87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQuY2xhc3NQcmVmaXggPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNsYXNzUHJlZml4O1xuICAgIGNsYXNzUHJlZml4ID0gXztcbiAgICByZXR1cm4gbGVnZW5kO1xuICB9O1xuXG4gIGxlZ2VuZC50aXRsZSA9IGZ1bmN0aW9uIChfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGl0bGU7XG4gICAgdGl0bGUgPSBfO1xuICAgIHJldHVybiBsZWdlbmQ7XG4gIH07XG5cbiAgbGVnZW5kLnRpdGxlV2lkdGggPSBmdW5jdGlvbiAoXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpdGxlV2lkdGg7XG4gICAgdGl0bGVXaWR0aCA9IF87XG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfTtcblxuICBsZWdlbmQub24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gbGVnZW5kRGlzcGF0Y2hlci5vbi5hcHBseShsZWdlbmREaXNwYXRjaGVyLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGVnZW5kRGlzcGF0Y2hlciA/IGxlZ2VuZCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBsZWdlbmQ7XG59XG5cbnZhciB0aHJlc2hvbGRMYWJlbHMgPSBmdW5jdGlvbiB0aHJlc2hvbGRMYWJlbHMoX3JlZikge1xuICB2YXIgaSA9IF9yZWYuaSxcbiAgICAgIGdlbkxlbmd0aCA9IF9yZWYuZ2VuTGVuZ3RoLFxuICAgICAgZ2VuZXJhdGVkTGFiZWxzID0gX3JlZi5nZW5lcmF0ZWRMYWJlbHMsXG4gICAgICBsYWJlbERlbGltaXRlciA9IF9yZWYubGFiZWxEZWxpbWl0ZXI7XG5cbiAgaWYgKGkgPT09IDApIHtcbiAgICB2YXIgdmFsdWVzID0gZ2VuZXJhdGVkTGFiZWxzW2ldLnNwbGl0KFwiIFwiICsgbGFiZWxEZWxpbWl0ZXIgKyBcIiBcIik7XG4gICAgcmV0dXJuIFwiTGVzcyB0aGFuIFwiICsgdmFsdWVzWzFdO1xuICB9IGVsc2UgaWYgKGkgPT09IGdlbkxlbmd0aCAtIDEpIHtcbiAgICB2YXIgX3ZhbHVlcyA9IGdlbmVyYXRlZExhYmVsc1tpXS5zcGxpdChcIiBcIiArIGxhYmVsRGVsaW1pdGVyICsgXCIgXCIpO1xuICAgIHJldHVybiBfdmFsdWVzWzBdICsgXCIgb3IgbW9yZVwiO1xuICB9XG4gIHJldHVybiBnZW5lcmF0ZWRMYWJlbHNbaV07XG59O1xuXG52YXIgbGVnZW5kSGVscGVycyA9IHtcbiAgdGhyZXNob2xkTGFiZWxzOiB0aHJlc2hvbGRMYWJlbHNcbn07XG5cbnZhciBpbmRleCA9IHtcbiAgbGVnZW5kQ29sb3I6IGNvbG9yLFxuICBsZWdlbmRTaXplOiBzaXplLFxuICBsZWdlbmRTeW1ib2w6IHN5bWJvbCxcbiAgbGVnZW5kSGVscGVyczogbGVnZW5kSGVscGVyc1xufTtcblxuZXhwb3J0IHsgY29sb3IgYXMgbGVnZW5kQ29sb3IsIHNpemUgYXMgbGVnZW5kU2l6ZSwgc3ltYm9sIGFzIGxlZ2VuZFN5bWJvbCwgbGVnZW5kSGVscGVycyB9O2V4cG9ydCBkZWZhdWx0IGluZGV4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXhSb2xsdXBOZXh0LmpzLm1hcFxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./third-party/d3-legend-master/indexRollupNext.js\n");

/***/ }),

/***/ "d3":
/*!*********************!*\
  !*** external "d3" ***!
  \*********************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = __WEBPACK_EXTERNAL_MODULE_d3__;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZDMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvZXh0ZXJuYWwgXCJkM1wiPzQzNjMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2QzX187Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///d3\n");

/***/ }),

/***/ "d3-sankey":
/*!***************************************************************************************************!*\
  !*** external {"root":"Sankey","commonjs2":"d3-sankey","amd":"d3-sankey","commonjs":"d3-sankey"} ***!
  \***************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = __WEBPACK_EXTERNAL_MODULE_d3_sankey__;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZDMtc2Fua2V5LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVVdUL2V4dGVybmFsIHtcInJvb3RcIjpcIlNhbmtleVwiLFwiY29tbW9uanMyXCI6XCJkMy1zYW5rZXlcIixcImFtZFwiOlwiZDMtc2Fua2V5XCIsXCJjb21tb25qc1wiOlwiZDMtc2Fua2V5XCJ9PzdiNmQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2QzX3NhbmtleV9fOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///d3-sankey\n");

/***/ }),

/***/ "dagre":
/*!************************!*\
  !*** external "dagre" ***!
  \************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = __WEBPACK_EXTERNAL_MODULE_dagre__;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFncmUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvZXh0ZXJuYWwgXCJkYWdyZVwiPzM1NDAiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2RhZ3JlX187Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///dagre\n");

/***/ }),

/***/ "es6-promise":
/*!******************************!*\
  !*** external "es6-promise" ***!
  \******************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = __WEBPACK_EXTERNAL_MODULE_es6_promise__;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXM2LXByb21pc2UuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9VV1QvZXh0ZXJuYWwgXCJlczYtcHJvbWlzZVwiP2IyMDYiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VzNl9wcm9taXNlX187Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///es6-promise\n");

/***/ }),

/***/ "pixi.js":
/*!*******************************************************************************************!*\
  !*** external {"root":"PIXI","commonjs2":"pixi.js","amd":"pixi.js","commonjs":"pixi.js"} ***!
  \*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = __WEBPACK_EXTERNAL_MODULE_pixi_js__;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl4aS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1VXVC9leHRlcm5hbCB7XCJyb290XCI6XCJQSVhJXCIsXCJjb21tb25qczJcIjpcInBpeGkuanNcIixcImFtZFwiOlwicGl4aS5qc1wiLFwiY29tbW9uanNcIjpcInBpeGkuanNcIn0/ZWIwNCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcGl4aV9qc19fOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///pixi.js\n");

/***/ })

/******/ });
});