@gravityforms/components
Version:
UI components for use in Gravity Forms development. Both React and vanilla js flavors.
32 lines • 77.1 kB
JavaScript
"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(self["webpackChunkgravityforms"] = self["webpackChunkgravityforms"] || []).push([["vendors-node_modules_recharts_es6_chart_AreaChart_js"],{
/***/ "../../../node_modules/recharts/es6/cartesian/Area.js":
/*!************************************************************!*\
!*** ../../../node_modules/recharts/es6/cartesian/Area.js ***!
\************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Area: function() { return /* binding */ Area; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var react_smooth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-smooth */ \"../../../node_modules/react-smooth/es6/index.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/isFunction */ \"../../../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lodash_max__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/max */ \"../../../node_modules/lodash/max.js\");\n/* harmony import */ var lodash_max__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_max__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lodash_isNil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/isNil */ \"../../../node_modules/lodash/isNil.js\");\n/* harmony import */ var lodash_isNil__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isNil__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var lodash_isNaN__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash/isNaN */ \"../../../node_modules/lodash/isNaN.js\");\n/* harmony import */ var lodash_isNaN__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_isNaN__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var lodash_isEqual__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash/isEqual */ \"../../../node_modules/lodash/isEqual.js\");\n/* harmony import */ var lodash_isEqual__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lodash_isEqual__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _shape_Curve__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../shape/Curve */ \"../../../node_modules/recharts/es6/shape/Curve.js\");\n/* harmony import */ var _shape_Dot__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../shape/Dot */ \"../../../node_modules/recharts/es6/shape/Dot.js\");\n/* harmony import */ var _container_Layer__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../container/Layer */ \"../../../node_modules/recharts/es6/container/Layer.js\");\n/* harmony import */ var _component_LabelList__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../component/LabelList */ \"../../../node_modules/recharts/es6/component/LabelList.js\");\n/* harmony import */ var _util_Global__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../util/Global */ \"../../../node_modules/recharts/es6/util/Global.js\");\n/* harmony import */ var _util_DataUtils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../util/DataUtils */ \"../../../node_modules/recharts/es6/util/DataUtils.js\");\n/* harmony import */ var _util_ChartUtils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../util/ChartUtils */ \"../../../node_modules/recharts/es6/util/ChartUtils.js\");\n/* harmony import */ var _util_ReactUtils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../util/ReactUtils */ \"../../../node_modules/recharts/es6/util/ReactUtils.js\");\nvar _excluded = [\"layout\", \"type\", \"stroke\", \"connectNulls\", \"isRange\", \"ref\"];\nvar _Area;\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * @fileOverview Area\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Area = /*#__PURE__*/function (_PureComponent) {\n _inherits(Area, _PureComponent);\n function Area() {\n var _this;\n _classCallCheck(this, Area);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Area, [].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n isAnimationFinished: true\n });\n _defineProperty(_assertThisInitialized(_this), \"id\", (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.uniqueId)('recharts-area-'));\n _defineProperty(_assertThisInitialized(_this), \"handleAnimationEnd\", function () {\n var onAnimationEnd = _this.props.onAnimationEnd;\n _this.setState({\n isAnimationFinished: true\n });\n if (lodash_isFunction__WEBPACK_IMPORTED_MODULE_3___default()(onAnimationEnd)) {\n onAnimationEnd();\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleAnimationStart\", function () {\n var onAnimationStart = _this.props.onAnimationStart;\n _this.setState({\n isAnimationFinished: false\n });\n if (lodash_isFunction__WEBPACK_IMPORTED_MODULE_3___default()(onAnimationStart)) {\n onAnimationStart();\n }\n });\n return _this;\n }\n _createClass(Area, [{\n key: \"renderDots\",\n value: function renderDots(needClip, clipDot, clipPathId) {\n var isAnimationActive = this.props.isAnimationActive;\n var isAnimationFinished = this.state.isAnimationFinished;\n if (isAnimationActive && !isAnimationFinished) {\n return null;\n }\n var _this$props = this.props,\n dot = _this$props.dot,\n points = _this$props.points,\n dataKey = _this$props.dataKey;\n var areaProps = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_15__.filterProps)(this.props, false);\n var customDotProps = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_15__.filterProps)(dot, true);\n var dots = points.map(function (entry, i) {\n var dotProps = _objectSpread(_objectSpread(_objectSpread({\n key: \"dot-\".concat(i),\n r: 3\n }, areaProps), customDotProps), {}, {\n index: i,\n cx: entry.x,\n cy: entry.y,\n dataKey: dataKey,\n value: entry.value,\n payload: entry.payload,\n points: points\n });\n return Area.renderDotItem(dot, dotProps);\n });\n var dotsProps = {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipDot ? '' : 'dots-').concat(clipPathId, \")\") : null\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_container_Layer__WEBPACK_IMPORTED_MODULE_10__.Layer, _extends({\n className: \"recharts-area-dots\"\n }, dotsProps), dots);\n }\n }, {\n key: \"renderHorizontalRect\",\n value: function renderHorizontalRect(alpha) {\n var _this$props2 = this.props,\n baseLine = _this$props2.baseLine,\n points = _this$props2.points,\n strokeWidth = _this$props2.strokeWidth;\n var startX = points[0].x;\n var endX = points[points.length - 1].x;\n var width = alpha * Math.abs(startX - endX);\n var maxY = lodash_max__WEBPACK_IMPORTED_MODULE_4___default()(points.map(function (entry) {\n return entry.y || 0;\n }));\n if ((0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.isNumber)(baseLine) && typeof baseLine === 'number') {\n maxY = Math.max(baseLine, maxY);\n } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {\n maxY = Math.max(lodash_max__WEBPACK_IMPORTED_MODULE_4___default()(baseLine.map(function (entry) {\n return entry.y || 0;\n })), maxY);\n }\n if ((0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.isNumber)(maxY)) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n x: startX < endX ? startX : startX - width,\n y: 0,\n width: width,\n height: Math.floor(maxY + (strokeWidth ? parseInt(\"\".concat(strokeWidth), 10) : 1))\n });\n }\n return null;\n }\n }, {\n key: \"renderVerticalRect\",\n value: function renderVerticalRect(alpha) {\n var _this$props3 = this.props,\n baseLine = _this$props3.baseLine,\n points = _this$props3.points,\n strokeWidth = _this$props3.strokeWidth;\n var startY = points[0].y;\n var endY = points[points.length - 1].y;\n var height = alpha * Math.abs(startY - endY);\n var maxX = lodash_max__WEBPACK_IMPORTED_MODULE_4___default()(points.map(function (entry) {\n return entry.x || 0;\n }));\n if ((0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.isNumber)(baseLine) && typeof baseLine === 'number') {\n maxX = Math.max(baseLine, maxX);\n } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {\n maxX = Math.max(lodash_max__WEBPACK_IMPORTED_MODULE_4___default()(baseLine.map(function (entry) {\n return entry.x || 0;\n })), maxX);\n }\n if ((0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.isNumber)(maxX)) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n x: 0,\n y: startY < endY ? startY : startY - height,\n width: maxX + (strokeWidth ? parseInt(\"\".concat(strokeWidth), 10) : 1),\n height: Math.floor(height)\n });\n }\n return null;\n }\n }, {\n key: \"renderClipRect\",\n value: function renderClipRect(alpha) {\n var layout = this.props.layout;\n if (layout === 'vertical') {\n return this.renderVerticalRect(alpha);\n }\n return this.renderHorizontalRect(alpha);\n }\n }, {\n key: \"renderAreaStatically\",\n value: function renderAreaStatically(points, baseLine, needClip, clipPathId) {\n var _this$props4 = this.props,\n layout = _this$props4.layout,\n type = _this$props4.type,\n stroke = _this$props4.stroke,\n connectNulls = _this$props4.connectNulls,\n isRange = _this$props4.isRange,\n ref = _this$props4.ref,\n others = _objectWithoutProperties(_this$props4, _excluded);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_container_Layer__WEBPACK_IMPORTED_MODULE_10__.Layer, {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_shape_Curve__WEBPACK_IMPORTED_MODULE_8__.Curve, _extends({}, (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_15__.filterProps)(others, true), {\n points: points,\n connectNulls: connectNulls,\n type: type,\n baseLine: baseLine,\n layout: layout,\n stroke: \"none\",\n className: \"recharts-area-area\"\n })), stroke !== 'none' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_shape_Curve__WEBPACK_IMPORTED_MODULE_8__.Curve, _extends({}, (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_15__.filterProps)(this.props, false), {\n className: \"recharts-area-curve\",\n layout: layout,\n type: type,\n connectNulls: connectNulls,\n fill: \"none\",\n points: points\n })), stroke !== 'none' && isRange && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_shape_Curve__WEBPACK_IMPORTED_MODULE_8__.Curve, _extends({}, (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_15__.filterProps)(this.props, false), {\n className: \"recharts-area-curve\",\n layout: layout,\n type: type,\n connectNulls: connectNulls,\n fill: \"none\",\n points: baseLine\n })));\n }\n }, {\n key: \"renderAreaWithAnimation\",\n value: function renderAreaWithAnimation(needClip, clipPathId) {\n var _this2 = this;\n var _this$props5 = this.props,\n points = _this$props5.points,\n baseLine = _this$props5.baseLine,\n isAnimationActive = _this$props5.isAnimationActive,\n animationBegin = _this$props5.animationBegin,\n animationDuration = _this$props5.animationDuration,\n animationEasing = _this$props5.animationEasing,\n animationId = _this$props5.animationId;\n var _this$state = this.state,\n prevPoints = _this$state.prevPoints,\n prevBaseLine = _this$state.prevBaseLine;\n // const clipPathId = isNil(id) ? this.id : id;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_smooth__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing,\n from: {\n t: 0\n },\n to: {\n t: 1\n },\n key: \"area-\".concat(animationId),\n onAnimationEnd: this.handleAnimationEnd,\n onAnimationStart: this.handleAnimationStart\n }, function (_ref) {\n var t = _ref.t;\n if (prevPoints) {\n var prevPointsDiffFactor = prevPoints.length / points.length;\n // update animtaion\n var stepPoints = points.map(function (entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n if (prevPoints[prevPointIndex]) {\n var prev = prevPoints[prevPointIndex];\n var interpolatorX = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.interpolateNumber)(prev.x, entry.x);\n var interpolatorY = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.interpolateNumber)(prev.y, entry.y);\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n return entry;\n });\n var stepBaseLine;\n if ((0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.isNumber)(baseLine) && typeof baseLine === 'number') {\n var interpolator = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.interpolateNumber)(prevBaseLine, baseLine);\n stepBaseLine = interpolator(t);\n } else if (lodash_isNil__WEBPACK_IMPORTED_MODULE_5___default()(baseLine) || lodash_isNaN__WEBPACK_IMPORTED_MODULE_6___default()(baseLine)) {\n var _interpolator = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.interpolateNumber)(prevBaseLine, 0);\n stepBaseLine = _interpolator(t);\n } else {\n stepBaseLine = baseLine.map(function (entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n if (prevBaseLine[prevPointIndex]) {\n var prev = prevBaseLine[prevPointIndex];\n var interpolatorX = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.interpolateNumber)(prev.x, entry.x);\n var interpolatorY = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.interpolateNumber)(prev.y, entry.y);\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n return entry;\n });\n }\n return _this2.renderAreaStatically(stepPoints, stepBaseLine, needClip, clipPathId);\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_container_Layer__WEBPACK_IMPORTED_MODULE_10__.Layer, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"defs\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"clipPath\", {\n id: \"animationClipPath-\".concat(clipPathId)\n }, _this2.renderClipRect(t))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_container_Layer__WEBPACK_IMPORTED_MODULE_10__.Layer, {\n clipPath: \"url(#animationClipPath-\".concat(clipPathId, \")\")\n }, _this2.renderAreaStatically(points, baseLine, needClip, clipPathId)));\n });\n }\n }, {\n key: \"renderArea\",\n value: function renderArea(needClip, clipPathId) {\n var _this$props6 = this.props,\n points = _this$props6.points,\n baseLine = _this$props6.baseLine,\n isAnimationActive = _this$props6.isAnimationActive;\n var _this$state2 = this.state,\n prevPoints = _this$state2.prevPoints,\n prevBaseLine = _this$state2.prevBaseLine,\n totalLength = _this$state2.totalLength;\n if (isAnimationActive && points && points.length && (!prevPoints && totalLength > 0 || !lodash_isEqual__WEBPACK_IMPORTED_MODULE_7___default()(prevPoints, points) || !lodash_isEqual__WEBPACK_IMPORTED_MODULE_7___default()(prevBaseLine, baseLine))) {\n return this.renderAreaWithAnimation(needClip, clipPathId);\n }\n return this.renderAreaStatically(points, baseLine, needClip, clipPathId);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _filterProps;\n var _this$props7 = this.props,\n hide = _this$props7.hide,\n dot = _this$props7.dot,\n points = _this$props7.points,\n className = _this$props7.className,\n top = _this$props7.top,\n left = _this$props7.left,\n xAxis = _this$props7.xAxis,\n yAxis = _this$props7.yAxis,\n width = _this$props7.width,\n height = _this$props7.height,\n isAnimationActive = _this$props7.isAnimationActive,\n id = _this$props7.id;\n if (hide || !points || !points.length) {\n return null;\n }\n var isAnimationFinished = this.state.isAnimationFinished;\n var hasSinglePoint = points.length === 1;\n var layerClass = (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('recharts-area', className);\n var needClipX = xAxis && xAxis.allowDataOverflow;\n var needClipY = yAxis && yAxis.allowDataOverflow;\n var needClip = needClipX || needClipY;\n var clipPathId = lodash_isNil__WEBPACK_IMPORTED_MODULE_5___default()(id) ? this.id : id;\n var _ref2 = (_filterProps = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_15__.filterProps)(dot, false)) !== null && _filterProps !== void 0 ? _filterProps : {\n r: 3,\n strokeWidth: 2\n },\n _ref2$r = _ref2.r,\n r = _ref2$r === void 0 ? 3 : _ref2$r,\n _ref2$strokeWidth = _ref2.strokeWidth,\n strokeWidth = _ref2$strokeWidth === void 0 ? 2 : _ref2$strokeWidth;\n var _ref3 = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_15__.isDotProps)(dot) ? dot : {},\n _ref3$clipDot = _ref3.clipDot,\n clipDot = _ref3$clipDot === void 0 ? true : _ref3$clipDot;\n var dotSize = r * 2 + strokeWidth;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_container_Layer__WEBPACK_IMPORTED_MODULE_10__.Layer, {\n className: layerClass\n }, needClipX || needClipY ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"defs\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"clipPath\", {\n id: \"clipPath-\".concat(clipPathId)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n x: needClipX ? left : left - width / 2,\n y: needClipY ? top : top - height / 2,\n width: needClipX ? width : width * 2,\n height: needClipY ? height : height * 2\n })), !clipDot && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"clipPath\", {\n id: \"clipPath-dots-\".concat(clipPathId)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n x: left - dotSize / 2,\n y: top - dotSize / 2,\n width: width + dotSize,\n height: height + dotSize\n }))) : null, !hasSinglePoint ? this.renderArea(needClip, clipPathId) : null, (dot || hasSinglePoint) && this.renderDots(needClip, clipDot, clipPathId), (!isAnimationActive || isAnimationFinished) && _component_LabelList__WEBPACK_IMPORTED_MODULE_11__.LabelList.renderCallByParent(this.props, points));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.animationId !== prevState.prevAnimationId) {\n return {\n prevAnimationId: nextProps.animationId,\n curPoints: nextProps.points,\n curBaseLine: nextProps.baseLine,\n prevPoints: prevState.curPoints,\n prevBaseLine: prevState.curBaseLine\n };\n }\n if (nextProps.points !== prevState.curPoints || nextProps.baseLine !== prevState.curBaseLine) {\n return {\n curPoints: nextProps.points,\n curBaseLine: nextProps.baseLine\n };\n }\n return null;\n }\n }]);\n return Area;\n}(react__WEBPACK_IMPORTED_MODULE_0__.PureComponent);\n_Area = Area;\n_defineProperty(Area, \"displayName\", 'Area');\n_defineProperty(Area, \"defaultProps\", {\n stroke: '#3182bd',\n fill: '#3182bd',\n fillOpacity: 0.6,\n xAxisId: 0,\n yAxisId: 0,\n legendType: 'line',\n connectNulls: false,\n // points of area\n points: [],\n dot: false,\n activeDot: true,\n hide: false,\n isAnimationActive: !_util_Global__WEBPACK_IMPORTED_MODULE_12__.Global.isSsr,\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease'\n});\n_defineProperty(Area, \"getBaseValue\", function (props, item, xAxis, yAxis) {\n var layout = props.layout,\n chartBaseValue = props.baseValue;\n var itemBaseValue = item.props.baseValue;\n\n // The baseValue can be defined both on the AreaChart as well as on the Area.\n // The value for the item takes precedence.\n var baseValue = itemBaseValue !== null && itemBaseValue !== void 0 ? itemBaseValue : chartBaseValue;\n if ((0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_13__.isNumber)(baseValue) && typeof baseValue === 'number') {\n return baseValue;\n }\n var numericAxis = layout === 'horizontal' ? yAxis : xAxis;\n var domain = numericAxis.scale.domain();\n if (numericAxis.type === 'number') {\n var domainMax = Math.max(domain[0], domain[1]);\n var domainMin = Math.min(domain[0], domain[1]);\n if (baseValue === 'dataMin') {\n return domainMin;\n }\n if (baseValue === 'dataMax') {\n return domainMax;\n }\n return domainMax < 0 ? domainMax : Math.max(Math.min(domain[0], domain[1]), 0);\n }\n if (baseValue === 'dataMin') {\n return domain[0];\n }\n if (baseValue === 'dataMax') {\n return domain[1];\n }\n return domain[0];\n});\n_defineProperty(Area, \"getComposedData\", function (_ref4) {\n var props = _ref4.props,\n item = _ref4.item,\n xAxis = _ref4.xAxis,\n yAxis = _ref4.yAxis,\n xAxisTicks = _ref4.xAxisTicks,\n yAxisTicks = _ref4.yAxisTicks,\n bandSize = _ref4.bandSize,\n dataKey = _ref4.dataKey,\n stackedData = _ref4.stackedData,\n dataStartIndex = _ref4.dataStartIndex,\n displayedData = _ref4.displayedData,\n offset = _ref4.offset;\n var layout = props.layout;\n var hasStack = stackedData && stackedData.length;\n var baseValue = _Area.getBaseValue(props, item, xAxis, yAxis);\n var isHorizontalLayout = layout === 'horizontal';\n var isRange = false;\n var points = displayedData.map(function (entry, index) {\n var value;\n if (hasStack) {\n value = stackedData[dataStartIndex + index];\n } else {\n value = (0,_util_ChartUtils__WEBPACK_IMPORTED_MODULE_14__.getValueByDataKey)(entry, dataKey);\n if (!Array.isArray(value)) {\n value = [baseValue, value];\n } else {\n isRange = true;\n }\n }\n var isBreakPoint = value[1] == null || hasStack && (0,_util_ChartUtils__WEBPACK_IMPORTED_MODULE_14__.getValueByDataKey)(entry, dataKey) == null;\n if (isHorizontalLayout) {\n return {\n x: (0,_util_ChartUtils__WEBPACK_IMPORTED_MODULE_14__.getCateCoordinateOfLine)({\n axis: xAxis,\n ticks: xAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n y: isBreakPoint ? null : yAxis.scale(value[1]),\n value: value,\n payload: entry\n };\n }\n return {\n x: isBreakPoint ? null : xAxis.scale(value[1]),\n y: (0,_util_ChartUtils__WEBPACK_IMPORTED_MODULE_14__.getCateCoordinateOfLine)({\n axis: yAxis,\n ticks: yAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n value: value,\n payload: entry\n };\n });\n var baseLine;\n if (hasStack || isRange) {\n baseLine = points.map(function (entry) {\n var x = Array.isArray(entry.value) ? entry.value[0] : null;\n if (isHorizontalLayout) {\n return {\n x: entry.x,\n y: x != null && entry.y != null ? yAxis.scale(x) : null\n };\n }\n return {\n x: x != null ? xAxis.scale(x) : null,\n y: entry.y\n };\n });\n } else {\n baseLine = isHorizontalLayout ? yAxis.scale(baseValue) : xAxis.scale(baseValue);\n }\n return _objectSpread({\n points: points,\n baseLine: baseLine,\n layout: layout,\n isRange: isRange\n }, offset);\n});\n_defineProperty(Area, \"renderDotItem\", function (option, props) {\n var dotItem;\n if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(option)) {\n dotItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(option, props);\n } else if (lodash_isFunction__WEBPACK_IMPORTED_MODULE_3___default()(option)) {\n dotItem = option(props);\n } else {\n var className = (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('recharts-area-dot', typeof option !== 'boolean' ? option.className : '');\n dotItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_shape_Dot__WEBPACK_IMPORTED_MODULE_9__.Dot, _extends({}, props, {\n className: className\n }));\n }\n return dotItem;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlY2hhcnRzL2VzNi9jYXJ0ZXNpYW4vQXJlYS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCLG9HQUFvRyxtQkFBbUIsaUJBQWlCLHNIQUFzSDtBQUMvUyxzREFBc0QsK0JBQStCLDhEQUE4RCxZQUFZLG9DQUFvQyw2REFBNkQsWUFBWSw2QkFBNkIsT0FBTywyQkFBMkIsMENBQTBDLHdFQUF3RSwrQkFBK0I7QUFDNWQsMkRBQTJELCtCQUErQixpQkFBaUIsc0NBQXNDLFlBQVksWUFBWSx1QkFBdUIsT0FBTyxxQkFBcUIsMENBQTBDLDZCQUE2QjtBQUNuUyxzQkFBc0Isc0VBQXNFLGdCQUFnQixzQkFBc0IsT0FBTywyQkFBMkIsMEJBQTBCLHlEQUF5RCxpQ0FBaUMsa0JBQWtCO0FBQzFTLHlCQUF5Qix3QkFBd0Isb0NBQW9DLHlDQUF5QyxrQ0FBa0MsMERBQTBELDBCQUEwQjtBQUNwUCw0QkFBNEIsZ0JBQWdCLHNCQUFzQixPQUFPLGtEQUFrRCxzREFBc0QsOEJBQThCLG1KQUFtSixxRUFBcUUsS0FBSztBQUM1YSxrREFBa0QsMENBQTBDO0FBQzVGLDRDQUE0QyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVEO0FBQy9QLDhEQUE4RCxzRUFBc0UsOERBQThELGtEQUFrRCxpQkFBaUIsR0FBRztBQUN4USwrQkFBK0I7QUFDL0Isa0RBQWtELDBFQUEwRSxlQUFlLDRCQUE0QixtRkFBbUY7QUFDMVAsdUNBQXVDLE1BQU0scUZBQXFGLE1BQU0sYUFBYSwyRUFBMkUsYUFBYTtBQUM3Tyw4QkFBOEIsdUdBQXVHLG1EQUFtRDtBQUN4TCx3Q0FBd0MsdUJBQXVCLHlGQUF5RjtBQUN4SiwyQ0FBMkMsK0RBQStELDZFQUE2RSx5RUFBeUUsZUFBZSx1REFBdUQsR0FBRywrQ0FBK0MsaUJBQWlCLEdBQUc7QUFDNVksaUNBQWlD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O0FBQ3hFO0FBQ0E7QUFDQSxXQUFXLDBFQUF1QjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywwRUFBdUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQSxvQkFBb0IsMkRBQW9CO0FBQ3hDLDJCQUEyQix5REFBa0I7QUFDN0MsSUFBSSxTQUFTLHdEQUFVO0FBQ3ZCO0FBQ0EsSUFBSTtBQUNKLG9CQUFvQixnREFBSTtBQUN4QiwyQkFBMkIsMERBQW1CLENBQUMsMkNBQUcsYUFBYTtBQUMvRDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2dyYXZpdHlmb3Jtcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVjaGFydHMvZXM2L2NhcnRlc2lhbi9BcmVhLmpzP2Y2ZjciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9leGNsdWRlZCA9IFtcImxheW91dFwiLCBcInR5cGVcIiwgXCJzdHJva2VcIiwgXCJjb25uZWN0TnVsbHNcIiwgXCJpc1JhbmdlXCIsIFwicmVmXCJdO1xudmFyIF9BcmVhO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgX3RvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogZmFsc2UgfSk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IFN0cmluZyhpKTsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQGZpbGVPdmVydmlldyBBcmVhXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgQW5pbWF0ZSBmcm9tICdyZWFjdC1zbW9vdGgnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnbG9kYXNoL2lzRnVuY3Rpb24nO1xuaW1wb3J0IG1heCBmcm9tICdsb2Rhc2gvbWF4JztcbmltcG9ydCBpc05pbCBmcm9tICdsb2Rhc2gvaXNOaWwnO1xuaW1wb3J0IGlzTmFuIGZyb20gJ2xvZGFzaC9pc05hTic7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgeyBDdXJ2ZSB9IGZyb20gJy4uL3NoYXBlL0N1cnZlJztcbmltcG9ydCB7IERvdCB9IGZyb20gJy4uL3NoYXBlL0RvdCc7XG5pbXBvcnQgeyBMYXllciB9IGZyb20gJy4uL2NvbnRhaW5lci9MYXllcic7XG5pbXBvcnQgeyBMYWJlbExpc3QgfSBmcm9tICcuLi9jb21wb25lbnQvTGFiZWxMaXN0JztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4uL3V0aWwvR2xvYmFsJztcbmltcG9ydCB7IGlzTnVtYmVyLCB1bmlxdWVJZCwgaW50ZXJwb2xhdGVOdW1iZXIgfSBmcm9tICcuLi91dGlsL0RhdGFVdGlscyc7XG5pbXBvcnQgeyBnZXRDYXRlQ29vcmRpbmF0ZU9mTGluZSwgZ2V0VmFsdWVCeURhdGFLZXkgfSBmcm9tICcuLi91dGlsL0NoYXJ0VXRpbHMnO1xuaW1wb3J0IHsgZmlsdGVyUHJvcHMsIGlzRG90UHJvcHMgfSBmcm9tICcuLi91dGlsL1JlYWN0VXRpbHMnO1xuZXhwb3J0IHZhciBBcmVhID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQXJlYSwgX1B1cmVDb21wb25lbnQpO1xuICBmdW5jdGlvbiBBcmVhKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXJlYSk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgQXJlYSwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaXNBbmltYXRpb25GaW5pc2hlZDogdHJ1ZVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpZFwiLCB1bmlxdWVJZCgncmVjaGFydHMtYXJlYS0nKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUFuaW1hdGlvbkVuZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgb25BbmltYXRpb25FbmQgPSBfdGhpcy5wcm9wcy5vbkFuaW1hdGlvbkVuZDtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNBbmltYXRpb25GaW5pc2hlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoaXNGdW5jdGlvbihvbkFuaW1hdGlvbkVuZCkpIHtcbiAgICAgICAgb25BbmltYXRpb25FbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQW5pbWF0aW9uU3RhcnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uQW5pbWF0aW9uU3RhcnQgPSBfdGhpcy5wcm9wcy5vbkFuaW1hdGlvblN0YXJ0O1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0FuaW1hdGlvbkZpbmlzaGVkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBpZiAoaXNGdW5jdGlvbihvbkFuaW1hdGlvblN0YXJ0KSkge1xuICAgICAgICBvbkFuaW1hdGlvblN0YXJ0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9jcmVhdGVDbGFzcyhBcmVhLCBbe1xuICAgIGtleTogXCJyZW5kZXJEb3RzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckRvdHMobmVlZENsaXAsIGNsaXBEb3QsIGNsaXBQYXRoSWQpIHtcbiAgICAgIHZhciBpc0FuaW1hdGlvbkFjdGl2ZSA9IHRoaXMucHJvcHMuaXNBbmltYXRpb25BY3RpdmU7XG4gICAgICB2YXIgaXNBbmltYXRpb25GaW5pc2hlZCA9IHRoaXMuc3RhdGUuaXNBbmltYXRpb25GaW5pc2hlZDtcbiAgICAgIGlmIChpc0FuaW1hdGlvbkFjdGl2ZSAmJiAhaXNBbmltYXRpb25GaW5pc2hlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGRvdCA9IF90aGlzJHByb3BzLmRvdCxcbiAgICAgICAgcG9pbnRzID0gX3RoaXMkcHJvcHMucG9pbnRzLFxuICAgICAgICBkYXRhS2V5ID0gX3RoaXMkcHJvcHMuZGF0YUtleTtcbiAgICAgIHZhciBhcmVhUHJvcHMgPSBmaWx0ZXJQcm9wcyh0aGlzLnByb3BzLCBmYWxzZSk7XG4gICAgICB2YXIgY3VzdG9tRG90UHJvcHMgPSBmaWx0ZXJQcm9wcyhkb3QsIHRydWUpO1xuICAgICAgdmFyIGRvdHMgPSBwb2ludHMubWFwKGZ1bmN0aW9uIChlbnRyeSwgaSkge1xuICAgICAgICB2YXIgZG90UHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAga2V5OiBcImRvdC1cIi5jb25jYXQoaSksXG4gICAgICAgICAgcjogM1xuICAgICAgICB9LCBhcmVhUHJvcHMpLCBjdXN0b21Eb3RQcm9wcyksIHt9LCB7XG4gICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgY3g6IGVudHJ5LngsXG4gICAgICAgICAgY3k6IGVudHJ5LnksXG4gICAgICAgICAgZGF0YUtleTogZGF0YUtleSxcbiAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUsXG4gICAgICAgICAgcGF5bG9hZDogZW50cnkucGF5bG9hZCxcbiAgICAgICAgICBwb2ludHM6IHBvaW50c1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEFyZWEucmVuZGVyRG90SXRlbShkb3QsIGRvdFByb3BzKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGRvdHNQcm9wcyA9IHtcbiAgICAgICAgY2xpcFBhdGg6IG5lZWRDbGlwID8gXCJ1cmwoI2NsaXBQYXRoLVwiLmNvbmNhdChjbGlwRG90ID8gJycgOiAnZG90cy0nKS5jb25jYXQoY2xpcFBhdGhJZCwgXCIpXCIpIDogbnVsbFxuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMYXllciwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwicmVjaGFydHMtYXJlYS1kb3RzXCJcbiAgICAgIH0sIGRvdHNQcm9wcyksIGRvdHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJIb3Jpem9udGFsUmVjdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJIb3Jpem9udGFsUmVjdChhbHBoYSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGJhc2VMaW5lID0gX3RoaXMkcHJvcHMyLmJhc2VMaW5lLFxuICAgICAgICBwb2ludHMgPSBfdGhpcyRwcm9wczIucG9pbnRzLFxuICAgICAgICBzdHJva2VXaWR0aCA9IF90aGlzJHByb3BzMi5zdHJva2VXaWR0aDtcbiAgICAgIHZhciBzdGFydFggPSBwb2ludHNbMF0ueDtcbiAgICAgIHZhciBlbmRYID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXS54O1xuICAgICAgdmFyIHdpZHRoID0gYWxwaGEgKiBNYXRoLmFicyhzdGFydFggLSBlbmRYKTtcbiAgICAgIHZhciBtYXhZID0gbWF4KHBvaW50cy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeS55IHx8IDA7XG4gICAgICB9KSk7XG4gICAgICBpZiAoaXNOdW1iZXIoYmFzZUxpbmUpICYmIHR5cGVvZiBiYXNlTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbWF4WSA9IE1hdGgubWF4KGJhc2VMaW5lLCBtYXhZKTtcbiAgICAgIH0gZWxzZSBpZiAoYmFzZUxpbmUgJiYgQXJyYXkuaXNBcnJheShiYXNlTGluZSkgJiYgYmFzZUxpbmUubGVuZ3RoKSB7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXgoYmFzZUxpbmUubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgIHJldHVybiBlbnRyeS55IHx8IDA7XG4gICAgICAgIH0pKSwgbWF4WSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNOdW1iZXIobWF4WSkpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgICAgICAgeDogc3RhcnRYIDwgZW5kWCA/IHN0YXJ0WCA6IHN0YXJ0WCAtIHdpZHRoLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogTWF0aC5mbG9vcihtYXhZICsgKHN0cm9rZVdpZHRoID8gcGFyc2VJbnQoXCJcIi5jb25jYXQoc3Ryb2tlV2lkdGgpLCAxMCkgOiAxKSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVmVydGljYWxSZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclZlcnRpY2FsUmVjdChhbHBoYSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGJhc2VMaW5lID0gX3RoaXMkcHJvcHMzLmJhc2VMaW5lLFxuICAgICAgICBwb2ludHMgPSBfdGhpcyRwcm9wczMucG9pbnRzLFxuICAgICAgICBzdHJva2VXaWR0aCA9IF90aGlzJHByb3BzMy5zdHJva2VXaWR0aDtcbiAgICAgIHZhciBzdGFydFkgPSBwb2ludHNbMF0ueTtcbiAgICAgIHZhciBlbmRZID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXS55O1xuICAgICAgdmFyIGhlaWdodCA9IGFscGhhICogTWF0aC5hYnMoc3RhcnRZIC0gZW5kWSk7XG4gICAgICB2YXIgbWF4WCA9IG1heChwb2ludHMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkueCB8fCAwO1xuICAgICAgfSkpO1xuICAgICAgaWYgKGlzTnVtYmVyKGJhc2VMaW5lKSAmJiB0eXBlb2YgYmFzZUxpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIG1heFggPSBNYXRoLm1heChiYXNlTGluZSwgbWF4WCk7XG4gICAgICB9IGVsc2UgaWYgKGJhc2VMaW5lICYmIEFycmF5LmlzQXJyYXkoYmFzZUxpbmUpICYmIGJhc2VMaW5lLmxlbmd0aCkge1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4KGJhc2VMaW5lLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICByZXR1cm4gZW50cnkueCB8fCAwO1xuICAgICAgICB9KSksIG1heFgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzTnVtYmVyKG1heFgpKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogc3RhcnRZIDwgZW5kWSA/IHN0YXJ0WSA6IHN0YXJ0WSAtIGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogbWF4WCArIChzdHJva2VXaWR0aCA/IHBhcnNlSW50KFwiXCIuY29uY2F0KHN0cm9rZVdpZHRoKSwgMTApIDogMSksXG4gICAgICAgICAgaGVpZ2h0OiBNYXRoLmZsb29yKGhlaWdodClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ2xpcFJlY3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ2xpcFJlY3QoYWxwaGEpIHtcbiAgICAgIHZhciBsYXlvdXQgPSB0aGlzLnByb3BzLmxheW91dDtcbiAgICAgIGlmIChsYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVmVydGljYWxSZWN0KGFscGhhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckhvcml6b250YWxSZWN0KGFscGhhKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQXJlYVN0YXRpY2FsbHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQXJlYVN0YXRpY2FsbHkocG9pbnRzLCBiYXNlTGluZSwgbmVlZENsaXAsIGNsaXBQYXRoSWQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczQubGF5b3V0LFxuICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHM0LnR5cGUsXG4gICAgICAgIHN0cm9rZSA9IF90aGlzJHByb3BzNC5zdHJva2UsXG4gICAgICAgIGNvbm5lY3ROdWxscyA9IF90aGlzJHByb3BzNC5jb25uZWN0TnVsbHMsXG4gICAgICAgIGlzUmFuZ2UgPSBfdGhpcyRwcm9wczQuaXNSYW5nZSxcbiAgICAgICAgcmVmID0gX3RoaXMkcHJvcHM0LnJlZixcbiAgICAgICAgb3RoZXJzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzNCwgX2V4Y2x1ZGVkKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMYXllciwge1xuICAgICAgICBjbGlwUGF0aDogbmVlZENsaXAgPyBcInVybCgjY2xpcFBhdGgtXCIuY29uY2F0KGNsaXBQYXRoSWQsIFwiKVwiKSA6IG51bGxcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEN1cnZlLCBfZXh0ZW5kcyh7fSwgZmlsdGVyUHJvcHMob3RoZXJzLCB0cnVlKSwge1xuICAgICAgICBwb2ludHM6IHBvaW50cyxcbiAgICAgICAgY29ubmVjdE51bGxzOiBjb25uZWN0TnVsbHMsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGJhc2VMaW5lOiBiYXNlTGluZSxcbiAgICAgICAgbGF5b3V0OiBsYXlvdXQsXG4gICAgICAgIHN0cm9rZTogXCJub25lXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJyZWNoYXJ0cy1hcmVhLWFyZWFcIlxuICAgICAgfSkpLCBzdHJva2UgIT09ICdub25lJyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDdXJ2ZSwgX2V4dGVuZHMoe30sIGZpbHRlclByb3BzKHRoaXMucHJvcHMsIGZhbHNlKSwge1xuICAgICAgICBjbGFzc05hbWU6IFwicmVjaGFydHMtYXJlYS1jdXJ2ZVwiLFxuICAgICAgICBsYXlvdXQ6IGxheW91dCxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgY29ubmVjdE51bGxzOiBjb25uZWN0TnVsbHMsXG4gICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICBwb2ludHM6IHBvaW50c1xuICAgICAgfSkpLCBzdHJva2UgIT09ICdub25lJyAmJiBpc1JhbmdlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEN1cnZlLCBfZXh0ZW5kcyh7fSwgZmlsdGVyUHJvcHModGhpcy5wcm9wcywgZmFsc2UpLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJyZWNoYXJ0cy1hcmVhLWN1cnZlXCIsXG4gICAgICAgIGxheW91dDogbGF5b3V0LFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBjb25uZWN0TnVsbHM6IGNvbm5lY3ROdWxscyxcbiAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgIHBvaW50czogYmFzZUxpbmVcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckFyZWFXaXRoQW5pbWF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckFyZWFXaXRoQW5pbWF0aW9uKG5lZWRDbGlwLCBjbGlwUGF0aElkKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICBwb2ludHMgPSBfdGhpcyRwcm9wczUucG9pbnRzLFxuICAgICAgICBiYXNlTGluZSA9IF90aGlzJHByb3BzNS5iYXNlTGluZSxcbiAgICAgICAgaXNBbmltYXRpb25BY3RpdmUgPSBfdGhpcyRwcm9wczUuaXNBbmltYXRpb25BY3RpdmUsXG4gICAgICAgIGFuaW1hdGlvbkJlZ2luID0gX3RoaXMkcHJvcHM1LmFuaW1hdGlvbkJlZ2luLFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbiA9IF90aGlzJHByb3BzNS5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgICAgYW5pbWF0aW9uRWFzaW5nID0gX3RoaXMkcHJvcHM1LmFuaW1hdGlvbkVhc2luZyxcbiAgICAgICAgYW5pbWF0aW9uSWQgPSBfdGhpcyRwcm9wczUuYW5pbWF0aW9uSWQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBwcmV2UG9pbnRzID0gX3RoaXMkc3RhdGUucHJldlBvaW50cyxcbiAgICAgICAgcHJldkJhc2VMaW5lID0gX3RoaXMkc3RhdGUucHJldkJhc2VMaW5lO1xuICAgICAgLy8gY29uc3QgY2xpcFBhdGhJZCA9IGlzTmlsKGlkKSA/IHRoaXMuaWQgOiBpZDtcblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFuaW1hdGUsIHtcbiAgICAgICAgYmVnaW46IGFuaW1hdGlvbkJlZ2luLFxuICAgICAgICBkdXJhdGlvbjogYW5pbWF0aW9uRHVyYXRpb24sXG4gICAgICAgIGlzQWN0aXZlOiBpc0FuaW1hdGlvbkFjdGl2ZSxcbiAgICAgICAgZWFzaW5nOiBhbmltYXRpb25FYXNpbmcsXG4gICAgICAgIGZyb206IHtcbiAgICAgICAgICB0OiAwXG4gICAgICAgIH0sXG4gICAgICAgIHRvOiB7XG4gICAgICAgICAgdDogMVxuICAgICAgICB9LFxuICAgICAgICBrZXk6IFwiYXJlYS1cIi5jb25jYXQoYW5pbWF0aW9uSWQpLFxuICAgICAgICBvbkFuaW1hdGlvbkVuZDogdGhpcy5oYW5kbGVBbmltYXRpb25FbmQsXG4gICAgICAgIG9uQW5pbWF0aW9uU3RhcnQ6IHRoaXMuaGFuZGxlQW5pbWF0aW9uU3RhcnRcbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciB0ID0gX3JlZi50O1xuICAgICAgICBpZiAocHJldlBvaW50cykge1xuICAgICAgICAgIHZhciBwcmV2UG9pbnRzRGlmZkZhY3RvciA9IHByZXZQb2ludHMubGVuZ3RoIC8gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgICAvLyB1cGRhdGUgYW5pbXRhaW9uXG4gICAgICAgICAgdmFyIHN0ZXBQb2ludHMgPSBwb2ludHMubWFwKGZ1bmN0aW9uIChlbnRyeSwgaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UG9pbnRJbmRleCA9IE1hdGguZmxvb3IoaW5kZXggKiBwcmV2UG9pbnRzRGlmZkZhY3Rvcik7XG4gICAgICAgICAgICBpZiAocHJldlBvaW50c1twcmV2UG9pbnRJbmRleF0pIHtcbiAgICAgICAgICAgICAgdmFyIHByZXYgPSBwcmV2UG9pbnRzW3ByZXZQb2ludEluZGV4XTtcbiAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRvclggPSBpbnRlcnBvbGF0ZU51bWJlcihwcmV2LngsIGVudHJ5LngpO1xuICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdG9yWSA9IGludGVycG9sYXRlTnVtYmVyKHByZXYueSwgZW50cnkueSk7XG4gICAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVudHJ5KSwge30sIHtcbiAgICAgICAgICAgICAgICB4OiBpbnRlcnBvbGF0b3JYKHQpLFxuICAgICAgICAgICAgICAgIHk6IGludGVycG9sYXRvclkodClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIHN0ZXBCYXNlTGluZTtcbiAgICAgICAgICBpZiAoaXNOdW1iZXIoYmFzZUxpbmUpICYmIHR5cGVvZiBiYXNlTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhciBpbnRlcnBvbGF0b3IgPSBpbnRlcnBvbGF0ZU51bWJlcihwcmV2QmFzZUxpbmUsIGJhc2VMaW5lKTtcbiAgICAgICAgICAgIHN0ZXBCYXNlTGluZSA9IGludGVycG9sYXRvcih0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmlsKGJhc2VMaW5lKSB8fCBpc05hbihiYXNlTGluZSkpIHtcbiAgICAgICAgICAgIHZhciBfaW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdGVOdW1iZXIocHJldkJhc2VMaW5lLCAwKTtcbiAgICAgICAgICAgIHN0ZXBCYXNlTGluZSA9IF9pbnRlcnBvbGF0b3IodCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ZXBCYXNlTGluZSA9IGJhc2VMaW5lLm1hcChmdW5jdGlvbiAoZW50cnksIGluZGV4KSB7XG4gICAgICAgICAgICAgIHZhciBwcmV2UG9pbnRJbmRleCA9IE1hdGguZmxvb3IoaW5kZXggKiBwcmV2UG9pbnRzRGlmZkZhY3Rvcik7XG4gICAgICAgICAgICAgIGlmIChwcmV2QmFzZUxpbmVbcHJldlBvaW50SW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXYgPSBwcmV2QmFzZUxpbmVbcHJldlBvaW50SW5kZXhdO1xuICAgICAgICAgICAgICAgIHZhciBpbnRlcnBvbGF0b3JYID0gaW50ZXJwb2xhdGVOdW1iZXIocHJldi54LCBlbnRyeS54KTtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdG9yWSA9IGludGVycG9sYXRlTnVtYmVyKHByZXYueSwgZW50cnkueSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZW50cnkpLCB7fSwge1xuICAgICAgICAgICAgICAgICAgeDogaW50ZXJwb2xhdG9yWCh0KSxcbiAgICAgICAgICAgICAgICAgIHk6IGludGVycG9sYXRvclkodClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5yZW5kZXJBcmVhU3RhdGljYWxseShzdGVwUG9pbnRzLCBzdGVwQmFzZUxpbmUsIG5lZWRDbGlwLCBjbGlwUGF0aElkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5ZXIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNsaXBQYXRoXCIsIHtcbiAgICAgICAgICBpZDogXCJhbmltYXRpb25DbGlwUGF0aC1cIi5jb25jYXQoY2xpcFBhdGhJZClcbiAgICAgICAgfSwgX3RoaXMyLnJlbmRlckNsaXBSZWN0KHQpKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExheWVyLCB7XG4gICAgICAgICAgY2xpcFBhdGg6IFwidXJsKCNhbmltYXRpb25DbGlwUGF0aC1cIi5jb25jYXQoY2xpcFBhdGhJZCwgXCIpXCIpXG4gICAgICAgIH0sIF90aGlzMi5yZW5kZXJBcmVhU3RhdGljYWxseShwb2ludHMsIGJhc2VMaW5lLCBuZWVkQ2xpcCwgY2xpcFBhdGhJZCkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJBcmVhXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckFyZWEobmVlZENsaXAsIGNsaXBQYXRoSWQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICBwb2ludHMgPSBfdGhpcyRwcm9wczYucG9pbnRzLFxuICAgICAgICBiYXNlTGluZSA9IF90aGlzJHByb3BzNi5iYXNlTGluZSxcbiAgICAgICAgaXNBbmltYXRpb25BY3RpdmUgPSBfdGhpcyRwcm9wczYuaXNBbmltYXRpb25BY3RpdmU7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgcHJldlBvaW50cyA9IF90aGlzJHN0YXRlMi5wcmV2UG9pbnRzLFxuICAgICAgICBwcmV2QmFzZUxpbmUgPSBfdGhpcyRzdGF0ZTIucHJldkJhc2VMaW5lLFxuICAgICAgICB0b3RhbExlbmd0aCA9IF90aGlzJHN0YXRlMi50b3RhbExlbmd0aDtcbiAgICAgIGlmIChpc0FuaW1hdGlvbkFjdGl2ZSAmJiBwb2ludHMgJiYgcG9pbnRzLmxlbmd0aCAmJiAoIXByZXZQb2ludHMgJiYgdG90YWxMZW5ndGggPiAwIHx8ICFpc0VxdWFsKHByZXZQb2ludHMsIHBvaW50cykgfHwgIWlzRXF1YWwocHJldkJhc2VMaW5lLCBiYXNlTGluZSkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckFyZWFXaXRoQW5pbWF0aW9uKG5lZWRDbGlwLCBjbGlwUGF0aElkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckFyZWFTdGF0aWNhbGx5KHBvaW50cywgYmFzZUxpbmUsIG5lZWRDbGlwLCBjbGlwUGF0aElkKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfZmlsdGVyUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaGlkZSA9IF90aGlzJHByb3BzNy5oaWRlLFxuICAgICAgICBkb3QgPSBfdGhpcyRwcm9wczcuZG90LFxuICAgICAgICBwb2ludHMgPSBfdGhpcyRwcm9wczcucG9pbnRzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczcuY2xhc3NOYW1lLFxuICAgICAgICB0b3AgPSBfdGhpcyRwcm9wczcudG9wLFxuICAgICAgICBsZWZ0ID0gX3RoaXMkcHJvcHM3LmxlZnQsXG4gICAgICAgIHhBeGlzID0gX3RoaXMkcHJvcHM3LnhBeGlzLFxuICAgICAgICB5QXhpcyA9IF90aGlzJHByb3BzNy55QXhpcyxcbiAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczcud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNy5oZWlnaHQsXG4gICAgICAgIGlzQW5pbWF0aW9uQWN0aXZlID0gX3RoaXMkcHJvcHM3LmlzQW5pbWF0aW9uQWN0aXZlLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzNy5pZDtcbiAgICAgIGlmIChoaWRlIHx8ICFwb2ludHMgfHwgIXBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgaXNBbmltYXRpb25GaW5pc2hlZCA9IHRoaXMuc3RhdGUuaXNBbmltYXRpb25GaW5pc2hlZDtcbiAgICAgIHZhciBoYXNTaW5nbGVQb2ludCA9IHBvaW50cy5sZW5ndGggPT09IDE7XG4gICAgICB2YXIgbGF5ZXJDbGFzcyA9IGNsc3goJ3JlY2hhcnRzLWFyZWEnLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIG5lZWRDbGlwWCA9IHhBeGlzICYmIHhBeGlzLmFsbG93RGF0YU92ZXJmbG93O1xuICAgICAgdmFyIG5lZWRDbGlwWSA9IHlBeGlzICYmIHlBeGlzLmFsbG93RGF0YU92ZXJmbG93O1xuICAgICAgdmFyIG5lZWRDbGlwID0gbmVlZENsaXBYIHx8IG5lZWRDbGlwWTtcbiAgICAgIHZhciBjbGlwUGF0aElkID0gaXNOaWwoaWQpID8gdGhpcy5pZCA6IGlkO1xuICAgICAgdmFyIF9yZWYyID0gKF9maWx0ZXJQcm9wcyA9IGZpbHRlclByb3BzKGRvdCwgZmFsc2UpKSAhPT0gbnVsbCAmJiBfZmlsdGVyUHJvcHMgIT09IHZvaWQgMCA/IF9maWx0ZXJQcm9wcyA6IHtcbiAgICAgICAgICByOiAzLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICAgIH0sXG4gICAgICAgIF9yZWYyJHIgPSBfcmVmMi5yLFxuICAgICAgICByID0gX3JlZjIkciA9PT0gdm9pZCAwID8gMyA6IF9yZWYyJHIsXG4gICAgICAgIF9yZWYyJHN0cm9rZVdpZHRoID0gX3JlZjIuc3Ryb2tlV2lkdGgsXG4gICAgICAgIHN0cm9rZVdpZHRoID0gX3JlZjIkc3Ryb2tlV2lkdGggPT09IHZvaWQgMCA/IDIgOiBfcmVmMiRzdHJva2VXaWR0aDtcbiAgICAgIHZhciBfcmVmMyA9IGlzRG90UHJvcHMoZG90KSA/IGRvdCA6IHt9LFxuICAgICAgICBfcmVmMyRjbGlwRG90ID0gX3JlZjMuY2xpcERvdCxcbiAgICAgICAgY2xpcERvdCA9IF9yZWYzJGNsaXBEb3QgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMyRjbGlwRG90O1xuICAgICAgdmFyIGRvdFNpemUgPSByICogMiArIHN0cm9rZVdpZHRoO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExheWVyLCB7XG4gICAgICAgIGNsYXNzTmFtZTogbGF5ZXJDbGFzc1xuICAgICAgfSwgbmVlZENsaXBYIHx8IG5lZWRDbGlwWSA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNsaXBQYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiY2xpcFBhdGgtXCIuY29uY2F0KGNsaXBQYXRoSWQpXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgICAgICB4OiBuZWVkQ2xpcFggPyBsZWZ0IDogbGVmdCAtIHdpZHRoIC8gMixcbiAgICAgICAgeTogbmVlZENsaXBZID8gdG9wIDogdG9wIC0gaGVpZ2h0IC8gMixcbiAgICAgICAgd2lkdGg6IG5lZWRDbGlwWCA/IHdpZHRoIDogd2lkdGggKiAyLFxuICAgICAgICBoZWlnaHQ6IG5lZWRDbGlwWSA/IGhlaWdodCA6IGhlaWdodCAqIDJcbiAgICAgIH0pKSwgIWNsaXBEb3QgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjbGlwUGF0aFwiLCB7XG4gICAgICAgIGlkOiBcImNsaXBQYXRoLWRvdHMtXCIuY29uY2F0KGNsaXBQYXRoSWQpXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgICAgICB4OiBsZWZ0IC0gZG90U2l6ZSAvIDIsXG4gICAgICAgIHk6IHRvcCAtIGRvdFNpemUgLyAyLFxuICAgICAgICB3aWR0aDogd2lkdGggKyBkb3RTaXplLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCArIGRvdFNpemVcbiAgICAgIH0pKSkgOiBudWxsLCAhaGFzU2luZ2xlUG9pbnQgPyB0aGlzLnJlbmRlckFyZWEobmVlZENsaXAsIGNsaXBQYXRoSWQpIDogbnVsbCwgKGRvdCB8fCBoYXNTaW5nbGVQb2ludCkgJiYgdGhpcy5yZW5kZXJEb3RzKG5lZWRDbGlwLCBjbGlwRG90LCBjbGlwUGF0aElkKSwgKCFpc0FuaW1hdGlvbkFjdGl2ZSB8fCBpc0FuaW1hdGlvbkZpbmlzaGVkKSAmJiBMYWJlbExpc3QucmVuZGVyQ2FsbEJ5UGFyZW50KHRoaXMucHJvcHMsIHBvaW50cykpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuYW5pbWF0aW9uSWQgIT09IHByZXZTdGF0ZS5wcmV2QW5pbWF0aW9uSWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2QW5pbWF0aW9uSWQ6IG5leHRQcm9wcy5hbmltYXRpb25JZCxcbiAgICAgICAgICBjdXJQb2ludHM6IG5leHRQcm9wcy5wb2ludHMsXG4gICAgICAgICAgY3VyQmFzZUxpbmU6IG5leHRQcm9wcy5iYXNlTGluZSxcbiAgICAgICAgICBwcmV2UG9pbnRzOiBwcmV2U3RhdGUuY3VyUG9pbnRzLFxuICAgICAgICAgIHByZXZCYXNlTGluZTogcHJldlN0YXRlLmN1ckJhc2VMaW5lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAobmV4dFByb3BzLnBvaW50cyAhPT0gcHJldlN0YXRlLmN1clBvaW50cyB8fCBuZXh0UHJvcHMuYmFzZUxpbmUgIT09IHByZXZTdGF0ZS5jdXJCYXNlTGluZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1clBvaW50czogbmV4dFByb3BzLnBvaW50cyxcbiAgICAgICAgICBjdXJCYXNlTGluZTogbmV4dFByb3BzLmJhc2VMaW5lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEFyZWE7XG59KFB1cmVDb21wb25lbnQpO1xuX0FyZWEgPSBBcmVhO1xuX2RlZmluZVByb3BlcnR5KEFyZWEsIFwiZGlzcGxheU5hbWVcIiwgJ0FyZWEnKTtcbl9kZWZpbmVQcm9wZXJ0eShBcmVhLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHN0cm9rZTogJyMzMTgyYmQnLFxuICBmaWxsOiAnIzMxODJiZCcsXG4gIGZpbGxPcGFjaXR5OiAwLjYsXG4gIHhBeGlzSWQ6IDAsXG4gIHlBeGlzSWQ6IDAsXG4gIGxlZ2VuZFR5cGU6ICdsaW5lJyxcbiAgY29ubmVjdE51bGxzOiBmYWxzZSxcbiAgLy8gcG9pbnRzIG9mIGFyZWFcbiAgcG9pbnRzOiBbXSxcbiAgZG90OiBmYWxzZSxcbiAgYWN0aXZlRG90OiB0cnVlLFxuICBoaWRlOiBmYWxzZSxcbiAgaXNBbmltYXRpb25BY3RpdmU6ICFHbG9iYWwuaXNTc3IsXG4gIGFuaW1hdGlvbkJlZ2luOiAwLFxuICBhbmltYXRpb25EdXJhdGlvbjogMTUwMCxcbiAgYW5pbWF0aW9uRWFzaW5nOiAnZWFzZSdcbn0pO1xuX2RlZmluZVByb3BlcnR5KEFyZWEsIFwiZ2V0QmFzZVZhbHVlXCIsIGZ1bmN0aW9uIChwcm9wcywgaXRlbSwgeEF4aXMsIHlBeGlzKSB7XG4gIHZhciBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgY2hhcnRCYXNlVmFsdWUgPSBwcm9wcy5iYXNlVmFsdWU7XG4gIHZhciBpdGVtQmFzZVZhbHVlID0gaXRlbS5wcm9wcy5iYXNlVmFsdWU7XG5cbiAgLy8gVGhlIGJhc2VWYWx1ZSBjYW4gYmUgZGVmaW5lZCBib3RoIG9uIHRoZSBBcmVhQ2hhcnQgYXMgd2VsbCBhcyBvbiB0aGUgQXJlYS5cbiAgLy8gVGhlIHZhbHVlIGZvciB0aGUgaXRlbSB0YWtlcyBwcmVjZWRlbmNlLlxuICB2YXIgYmFzZVZhbHVlID0gaXRlbUJhc2VWYWx1ZSAhPT0gbnVsbCAmJiBpdGVtQmFzZVZhbHVlICE9PSB2b2lkIDAgPyBpdGVtQmFzZVZhbHVlIDogY2hhcnRCYXNlVmFsdWU7XG4gIGlmIChpc051bWJlcihiYXNlVmFsdWUpICYmIHR5cGVvZiBiYXNlVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGJhc2VWYWx1ZTtcbiAgfVxuICB2YXIgbnVtZXJpY0F4aXMgPSBsYXlvdXQgPT09ICdob3Jpem9udGFsJyA/IHlBeGlzIDogeEF4aXM7XG4gIHZhciBkb21haW4gPSBudW1lcmljQXhpcy5zY2FsZS5kb21haW4oKTtcbiAgaWYgKG51bWVyaWNBeGlzLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgdmFyIGRvbWFpbk1heCA9IE1hdGgubWF4KGRvbWFpblswXSwgZG9tYWluWzFdKTtcbiAgICB2YXIgZG9tYWluTWluID0gTWF0aC5taW4oZG9tYWluWzBdLCBkb21haW5bMV0pO1xuICAgIGlmIChiYXNlVmFsdWUgPT09ICdkYXRhTWluJykge1xuICAgICAgcmV0dXJuIGRvbWFpbk1pbjtcbiAgICB9XG4gICAgaWYgKGJhc2VWYWx1ZSA9PT0gJ2RhdGFNYXgnKSB7XG4gICAgICByZXR1cm4gZG9tYWluTWF4O1xuICAgIH1cbiAgICByZXR1cm4gZG9tYWluTWF4IDwgMCA/IGRvbWFpbk1heCA6IE1hdGgubWF4KE1hdGgubWluKGRvbWFpblswXSwgZG9tYWluWzFdKSwgMCk7XG4gIH1cbiAgaWYgKGJhc2VWYWx1ZSA9PT0gJ2RhdGFNaW4nKSB7XG4gICAgcmV0dXJuIGRvbWFpblswXTtcbiAgfVxuICBpZiAoYmFzZVZhbHVlID09PSAnZGF0YU1heCcpIHtcbiAgICByZXR1cm4gZG9tYWluWzFdO1xuICB9XG4gIHJldHVybiBkb21haW5bMF07XG59KTtcbl9kZWZpbmVQcm9wZXJ0eShBcmVhLCBcImdldENvbXBvc2VkRGF0YVwiLCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyIHByb3BzID0gX3JlZjQucHJvcHMsXG4gICAgaXRlbSA9IF9yZWY0Lml0ZW0sXG4gICAgeEF4aXMgPSBfcmVmNC54QXhpcyxcbiAgICB5QXhpcyA9IF9yZWY0LnlBeGlzLFxuICAgIHhBeGlzVGlja3MgPSBfcmVmNC54QXhpc1RpY2tzLFxuICAgIHlBeGlzVGlja3MgPSBfcmVmNC55QXhpc1RpY2tzLFxuICAgIGJhbmRTaXplID0gX3JlZjQuYmFuZFNpemUsXG4gICAgZGF0YUtleSA9IF9yZWY0LmRhdGFLZXksXG4gICAgc3RhY2tlZERhdGEgPSBfcmVmNC5zdGFja2VkRGF0YSxcbiAgICBkYXRhU3RhcnRJbmRleCA9IF9yZWY0LmRhdGFTdGFydEluZGV4LFxuICAgIGRpc3BsYXllZERhdGEgPSBfcmVmNC5kaXNwbGF5ZWREYXRhLFxuICAgIG9mZnNldCA9IF9yZWY0Lm9mZnNldDtcbiAgdmFyIGxheW91dCA9IHByb3BzLmxheW91dDtcbiAgdmFyIGhhc1N0YWNrID0gc3RhY2tlZERhdGEgJiYgc3RhY2tlZERhdGEubGVuZ3RoO1xuICB2YXIgYmFzZVZhbHVlID0gX0FyZWEuZ2V0QmFzZVZhbHVlKHByb3BzLCBpdGVtLCB4QXhpcywgeUF4aXMpO1xuICB2YXIgaXNIb3Jpem9udGFsTGF5b3V0ID0gbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gIHZhciBpc1JhbmdlID0gZmFsc2U7XG4gIHZhciBwb2ludHMgPSBkaXNwbGF5ZWREYXRhLm1hcChmdW5jdGlvbiAoZW50cnksIGluZGV4KSB7XG4gICAgdmFyIHZhbHVlO1xuICAgIGlmIChoYXNTdGFjaykge1xuICAgICAgdmFsdWUgPSBzdGFja2VkRGF0YVtkYXRhU3RhcnRJbmRleCArIGluZGV4XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBnZXRWYWx1ZUJ5RGF0YUtleShlbnRyeSwgZGF0YUtleSk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gW2Jhc2VWYWx1ZSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNSYW5nZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBpc0JyZWFrUG9pbnQgPSB2YWx1ZVsxXSA9PSBudWxsIHx8IGhhc1N0YWNrICYmIGdldFZhbHVlQnlEYXRhS2V5KGVudHJ5LCBkYXRhS2V5KSA9PSBudWxsO1xuICAgIGlmIChpc0hvcml6b250YWxMYXlvdXQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGdldENhdGVDb29yZGluYXRlT2ZMaW5lKHtcbiAgICAgICAgICBheGlzOiB4QXhpcyxcbiAgICAgICAgICB0aWNrczogeEF4aXNUaWNrcyxcbiAgICAgICAgICBiYW5kU2l6ZTogYmFuZFNpemUsXG4gICAgICAgICAgZW50cnk6IGVudHJ5LFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9KSxcbiAgICAgICAgeTogaXNCcmVha1BvaW50ID8gbnVsbCA6IHlBeGlzLnNjYWxlKHZhbHVlWzFdKSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBwYXlsb2FkOiBlbnRyeVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGlzQnJlYWtQb2ludCA/IG51bGwgOiB4QXhpcy5zY2FsZSh2YWx1ZVsxXSksXG4gICAgICB5OiBnZXRDYXRlQ29vcmRpbmF0ZU9mTGluZSh7XG4gICAgICAgIGF4aXM6IHlBeGlzLFxuICAgICAgICB0aWNrczogeUF4aXNUaWNrcyxcbiAgICAgICAgYmFuZFNpemU6IGJhbmRTaXplLFxuICAgICAgICBlbnRyeTogZW50cnksXG4gICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgfSksXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBwYXlsb2FkOiBlbnRyeVxuICAgIH07XG4gIH0pO1xuICB2YXIgYmFzZUxpbmU7XG4gIGlmIChoYXNTdGFjayB8fCBpc1JhbmdlKSB7XG4gICAgYmFzZUxpbmUgPSBwb2ludHMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgdmFyIHggPSBBcnJheS5pc0FycmF5KGVudHJ5LnZhbHVlKSA/IGVudHJ5LnZhbHVlWzBdIDogbnVsbDtcbiAgICAgIGlmIChpc0hvcml6b250YWxMYXlvdXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBlbnRyeS54LFxuICAgICAgICAgIHk6IHggIT0gbnVsbCAmJiBlbnRyeS55ICE9IG51bGwgPyB5QXhpcy5zY2FsZSh4KSA6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggIT0gbnVsbCA/IHhBeGlzLnNjYWxlKHgpIDogbnVsbCxcbiAgICAgICAgeTogZW50cnkueVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlTGluZSA9IGlzSG9yaXpvbnRhbExheW91dCA/IHlBeGlzLnNjYWxlKGJhc2VWYWx1ZSkgOiB4QXhpcy5zY2FsZShiYXNlVmFsdWUpO1xuICB9XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBwb2ludHM6IHBvaW50cyxcbiAgICBiYXNlTGluZTogYmFzZUxpbmUsXG4gICAgbGF5b3V0OiBsYXlvdXQsXG4gICAgaXNSYW5nZTogaXNSYW5nZVxuICB9LCBvZmZzZXQpO1xufSk7XG5fZGVmaW5lUHJvcGVydHkoQXJlYSwgXCJyZW5kZXJEb3RJdGVtXCIsIGZ1bmN0aW9uIChvcHRpb24sIHByb3BzKSB7XG4gIHZhciBkb3RJdGVtO1xuICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChvcHRpb24pKSB7XG4gICAgZG90SXRlbSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQob3B0aW9uLCBwcm9wcyk7XG4gIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihvcHRpb24pKSB7XG4gICAgZG90SXRlbSA9IG9wdGlvbihwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IGNsc3goJ3JlY2hhcnRzLWFyZWEtZG90JywgdHlwZW9mIG9wdGlvbiAhPT0gJ2Jvb2xlYW4nID8gb3B0aW9uLmNsYXNzTmFtZSA6ICcnKTtcbiAgICBkb3RJdGVtID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRG90LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiBkb3RJdGVtO1xufSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/recharts/es6/cartesian/Area.js\n\n}");
/***/ }),
/***/ "../../../node_modules/recharts/es6/chart/AreaChart.js":
/*!*************************************************************!*\
!*** ../../../node_modules/recharts/es6/chart/AreaChart.js ***!
\*************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AreaChart: function() { return /* binding */ AreaChart; }\n/* harmony export */ });\n/* harmony import */ var _generateCategoricalChart__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./generateCategoricalChart */ \"../../../node_modules/recharts/es6/chart/generateCategoricalChart.js\");\n/* harmony import */ var _cartesian_Area__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../cartesian/Area */ \"../../../node_modules/recharts/es6/cartesian/Area.js\");\n/* harmony import */ var _cartesian_XAxis__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../cartesian/XAxis */ \"../../../node_modules/recharts/es6/cartesian/XAxis.js\");\n/* harmony import */ var _cartesian_YAxis__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../cartesian/YAxis */ \"../../../node_modules/recharts/es6/cartesian/YAxis.js\");\n/* harmony import */ var _util_CartesianUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/CartesianUtils */ \"../../../node_modules/recharts/es6/util/CartesianUtils.js\");\n/**\n * @fileOverview Area Chart\n */\n\n\n\n\n\nvar AreaChart = (0,_generateCategoricalChart__WEBPACK_IMPORTED_MODULE_0__.generateCategoricalChart)({\n chartName: 'AreaChart',\n GraphicalChild: _cartesian_Area__WEBPACK_IMPORTED_MODULE_1__.Area,\n axisComponents: [{\n axisType: 'xAxis',\n AxisComp: _cartesian_XAxis__WEBPACK_IMPORTED_MODULE_2__.XAxis\n }, {\n axisType: 'yAxis',\n AxisComp: _cartesian_YAxis__WEBPACK_IMPORTED_MODULE_3__.YAxis\n }],\n formatAxisMap: _util_CartesianUtils__WEBPACK_IMPORTED_MODULE_4__.formatAxisMap\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlY2hhcnRzL2VzNi9jaGFydC9BcmVhQ2hhcnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ3NFO0FBQzdCO0FBQ0U7QUFDQTtBQUNZO0FBQ2hELGdCQUFnQixtRkFBd0I7QUFDL0M7QUFDQSxrQkFBa0IsaURBQUk7QUFDdEI7QUFDQTtBQUNBLGNBQWMsbURBQUs7QUFDbkIsR0FBRztBQUNIO0FBQ0EsY0FBYyxtREFBSztBQUNuQixHQUFHO0FBQ0gsaUJBQWlCLCtEQUFhO0FBQzlCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ncmF2aXR5Zm9ybXMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlY2hhcnRzL2VzNi9jaGFydC9BcmVhQ2hhcnQuanM/NmFmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlT3ZlcnZpZXcgQXJlYSBDaGFydFxuICovXG5pbXBvcnQgeyBnZW5lcmF0ZUNhdGVnb3JpY2FsQ2hhcnQgfSBmcm9tICcuL2dlbmVyYXRlQ2F0ZWdvcmljYWxDaGFydCc7XG5pbXBvcnQgeyBBcmVhIH0gZnJvbSAnLi4vY2FydGVzaWFuL0FyZWEnO1xuaW1wb3J0IHsgWEF4aXMgfSBmcm9tICcuLi9jYXJ0ZXNpYW4vWEF4aXMnO1xuaW1wb3J0IHsgWUF4aXMgfSBmcm9tICcuLi9jYXJ0ZXNpYW4vWUF4aXMnO1xuaW1wb3J0IHsgZm9ybWF0QXhpc01hcCB9IGZyb20gJy4uL3V0aWwvQ2FydGVzaWFuVXRpbHMnO1xuZXhwb3J0IHZhciBBcmVhQ2hhcnQgPSBnZW5lcmF0ZUNhdGVnb3JpY2FsQ2hhcnQoe1xuICBjaGFydE5hbWU6ICdBcmVhQ2hhcnQnLFxuICBHcmFwaGljYWxDaGlsZDogQXJlYSxcbiAgYXhpc0NvbXBvbmVudHM6IFt7XG4gICAgYXhpc1R5cGU6ICd4QXhpcycsXG4gICAgQXhpc0NvbXA6IFhBeGlzXG4gIH0sIHtcbiAgICBheGlzVHlwZTogJ3lBeGlzJyxcbiAgICBBeGlzQ29tcDogWUF4aXNcbiAgfV0sXG4gIGZvcm1hdEF4aXNNYXA6IGZvcm1hdEF4aXNNYXBcbn0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/recharts/es6/chart/AreaChart.js\n\n}");
/***/ })
}]);