(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["chunk-libs"],{
/***/ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
/*!*****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js":
/*!***************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/arrayWithHoles.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js":
/*!*****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js":
/*!***************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/defineProperty.js":
/*!***************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js":
/*!*********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
\*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayLikeToArray; });\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js":
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
\*******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayWithHoles; });\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js":
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***!
\**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _arrayWithoutHoles; });\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return Object(_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":
/*!**************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
\**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _assertThisInitialized; });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js":
/*!*********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.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 _asyncToGenerator; });\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js":
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***!
\*******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _classCallCheck; });\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/classCallCheck.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/createClass.js":
/*!****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/createClass.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _createClass; });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\");\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, Object(_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/createClass.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js":
/*!******************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.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 _createForOfIteratorHelper; });\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (!it) {\n if (Array.isArray(o) || (it = Object(_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n var F = function F() {};\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/createSuper.js":
/*!****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/createSuper.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 _createSuper; });\n/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.reflect.construct.js */ \"./node_modules/core-js/modules/es.reflect.construct.js\");\n/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\");\n/* harmony import */ var _isNativeReflectConstruct_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isNativeReflectConstruct.js */ \"./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js\");\n/* harmony import */ var _possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./possibleConstructorReturn.js */ \"./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js\");\n\n\n\n\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = Object(_isNativeReflectConstruct_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n return function _createSuperInternal() {\n var Super = Object(_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Derived),\n result;\n if (hasNativeReflectConstruct) {\n var NewTarget = Object(_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return Object(_possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this, result);\n };\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/createSuper.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js":
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
\*******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _defineProperty; });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\");\n\nfunction _defineProperty(obj, key, value) {\n key = Object(_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/get.js":
/*!********************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/get.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 _get; });\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.reflect.get.js */ \"./node_modules/core-js/modules/es.reflect.get.js\");\n/* harmony import */ var core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ \"./node_modules/core-js/modules/es.object.get-own-property-descriptor.js\");\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _superPropBase_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./superPropBase.js */ \"./node_modules/@babel/runtime/helpers/esm/superPropBase.js\");\n\n\n\n\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get.bind();\n } else {\n _get = function _get(target, property, receiver) {\n var base = Object(_superPropBase_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n return desc.value;\n };\n }\n return _get.apply(this, arguments);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/get.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js":
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.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 _getPrototypeOf; });\n/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ \"./node_modules/core-js/modules/es.object.set-prototype-of.js\");\n/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.get-prototype-of.js */ \"./node_modules/core-js/modules/es.object.get-prototype-of.js\");\n/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/inherits.js":
/*!*************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/inherits.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 _inherits; });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) Object(_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(subClass, superClass);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/inherits.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js":
/*!***************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.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 _interopRequireWildcard; });\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.weak-map.js */ \"./node_modules/core-js/modules/es.weak-map.js\");\n/* harmony import */ var core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ \"./node_modules/core-js/modules/es.object.get-own-property-descriptor.js\");\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n\n\n\n\n\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || Object(_typeof_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(obj) !== \"object\" && typeof obj !== \"function\") {\n return {\n \"default\": obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj[\"default\"] = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js":
/*!*****************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.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 _isNativeReflectConstruct; });\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.reflect.construct.js */ \"./node_modules/core-js/modules/es.reflect.construct.js\");\n/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js":
/*!********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
\********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _iterableToArray; });\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.array.from.js */ \"./node_modules/core-js/modules/es.array.from.js\");\n/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js":
/*!*************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
\*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _iterableToArrayLimit; });\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js":
/*!********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
\********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _nonIterableRest; });\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js":
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***!
\**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _nonIterableSpread; });\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/objectSpread2.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 _objectSpread2; });\n/* harmony import */ var core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.keys.js */ \"./node_modules/core-js/modules/es.object.keys.js\");\n/* harmony import */ var core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ \"./node_modules/core-js/modules/es.array.filter.js\");\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ \"./node_modules/core-js/modules/es.object.get-own-property-descriptor.js\");\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptors.js */ \"./node_modules/core-js/modules/es.object.get-own-property-descriptors.js\");\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./defineProperty.js */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n Object(_defineProperty_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js":
/*!******************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.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 _possibleConstructorReturn; });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assertThisInitialized.js */ \"./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (Object(_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return Object(_assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(self);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js":
/*!***********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.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 _regeneratorRuntime; });\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.async-iterator.js */ \"./node_modules/core-js/modules/es.symbol.async-iterator.js\");\n/* harmony import */ var core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es_symbol_to_string_tag_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.symbol.to-string-tag.js */ \"./node_modules/core-js/modules/es.symbol.to-string-tag.js\");\n/* harmony import */ var core_js_modules_es_symbol_to_string_tag_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_to_string_tag_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.json.to-string-tag.js */ \"./node_modules/core-js/modules/es.json.to-string-tag.js\");\n/* harmony import */ var core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.math.to-string-tag.js */ \"./node_modules/core-js/modules/es.math.to-string-tag.js\");\n/* harmony import */ var core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.object.get-prototype-of.js */ \"./node_modules/core-js/modules/es.object.get-prototype-of.js\");\n/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ \"./node_modules/core-js/modules/es.object.set-prototype-of.js\");\n/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction _regeneratorRuntime() {\n \"use strict\";\n\n /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n };\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n defineProperty = Object.defineProperty || function (obj, key, desc) {\n obj[key] = desc.value;\n },\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return defineProperty(generator, \"_invoke\", {\n value: makeInvokeMethod(innerFn, self, context)\n }), generator;\n }\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n exports.wrap = wrap;\n var ContinueSentinel = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == Object(_typeof_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"])(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n reject(record.arg);\n }\n var previousPromise;\n defineProperty(this, \"_invoke\", {\n value: function value(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method,\n method = delegate.iterator[methodName];\n if (undefined === method) return context.delegate = null, \"throw\" === methodName && delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method) || \"return\" !== methodName && (context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a '\" + methodName + \"' method\")), ContinueSentinel;\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n return next.value = undefined, next.done = !0, next;\n };\n return next.next = next;\n }\n }\n return {\n next: doneResult\n };\n }\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), defineProperty(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (val) {\n var object = Object(val),\n keys = [];\n for (var key in object) keys.push(key);\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js":
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.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 _setPrototypeOf; });\n/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ \"./node_modules/core-js/modules/es.object.set-prototype-of.js\");\n/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
\******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _slicedToArray; });\n/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ \"./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\");\n/* harmony import */ var _iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit.js */ \"./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\");\n/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ \"./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\");\n\n\n\n\nfunction _slicedToArray(arr, i) {\n return Object(_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || Object(_iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr, i) || Object(_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr, i) || Object(_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/slicedToArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/superPropBase.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/superPropBase.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 _superPropBase; });\n/* harmony import */ var _getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\");\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = Object(_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object);\n if (object === null) break;\n }\n return object;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/superPropBase.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js":
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***!
\**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _toConsumableArray; });\n/* harmony import */ var _arrayWithoutHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithoutHoles.js */ \"./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\");\n/* harmony import */ var _iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\");\n/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableSpread_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableSpread.js */ \"./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\");\n\n\n\n\nfunction _toConsumableArray(arr) {\n return Object(_arrayWithoutHoles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || Object(_iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr) || Object(_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr) || Object(_nonIterableSpread_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/toPrimitive.js":
/*!****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/toPrimitive.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 _toPrimitive; });\n/* harmony import */ var core_js_modules_es_symbol_to_primitive_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.symbol.to-primitive.js */ \"./node_modules/core-js/modules/es.symbol.to-primitive.js\");\n/* harmony import */ var core_js_modules_es_symbol_to_primitive_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_to_primitive_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_date_to_primitive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.date.to-primitive.js */ \"./node_modules/core-js/modules/es.date.to-primitive.js\");\n/* harmony import */ var core_js_modules_es_date_to_primitive_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_primitive_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.number.constructor.js */ \"./node_modules/core-js/modules/es.number.constructor.js\");\n/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n\n\n\n\n\n\n\nfunction _toPrimitive(input, hint) {\n if (Object(_typeof_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (Object(_typeof_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/toPrimitive.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.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 _toPropertyKey; });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toPrimitive.js */ \"./node_modules/@babel/runtime/helpers/esm/toPrimitive.js\");\n\n\nfunction _toPropertyKey(arg) {\n var key = Object(_toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arg, \"string\");\n return Object(_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key) === \"symbol\" ? key : String(key);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/typeof.js":
/*!***********************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***!
\***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _typeof; });\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
\*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _unsupportedIterableToArray; });\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.from.js */ \"./node_modules/core-js/modules/es.array.from.js\");\n/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.regexp.test.js */ \"./node_modules/core-js/modules/es.regexp.test.js\");\n/* harmony import */ var core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\n\n\n\n\n\n\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return Object(_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Object(_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(o, minLen);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js":
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/iterableToArray.js":
/*!****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.array.from.js */ \"./node_modules/core-js/modules/es.array.from.js\");\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":
/*!*********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\nfunction _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/nonIterableRest.js":
/*!****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/nonIterableRest.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js":
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.async-iterator.js */ \"./node_modules/core-js/modules/es.symbol.async-iterator.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.to-string-tag.js */ \"./node_modules/core-js/modules/es.symbol.to-string-tag.js\");\n__webpack_require__(/*! core-js/modules/es.json.to-string-tag.js */ \"./node_modules/core-js/modules/es.json.to-string-tag.js\");\n__webpack_require__(/*! core-js/modules/es.math.to-string-tag.js */ \"./node_modules/core-js/modules/es.math.to-string-tag.js\");\n__webpack_require__(/*! core-js/modules/es.object.get-prototype-of.js */ \"./node_modules/core-js/modules/es.object.get-prototype-of.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n__webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ \"./node_modules/core-js/modules/es.object.set-prototype-of.js\");\n__webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\nvar _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\";\n\n /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n defineProperty = Object.defineProperty || function (obj, key, desc) {\n obj[key] = desc.value;\n },\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return defineProperty(generator, \"_invoke\", {\n value: makeInvokeMethod(innerFn, self, context)\n }), generator;\n }\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n exports.wrap = wrap;\n var ContinueSentinel = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n reject(record.arg);\n }\n var previousPromise;\n defineProperty(this, \"_invoke\", {\n value: function value(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method,\n method = delegate.iterator[methodName];\n if (undefined === method) return context.delegate = null, \"throw\" === methodName && delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method) || \"return\" !== methodName && (context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a '\" + methodName + \"' method\")), ContinueSentinel;\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n return next.value = undefined, next.done = !0, next;\n };\n return next.next = next;\n }\n }\n return {\n next: doneResult\n };\n }\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), defineProperty(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (val) {\n var object = Object(val),\n keys = [];\n for (var key in object) keys.push(key);\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/regeneratorRuntime.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/slicedToArray.js":
/*!**************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/slicedToArray.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ \"./node_modules/@babel/runtime/helpers/arrayWithHoles.js\");\nvar iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ \"./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\nvar nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ \"./node_modules/@babel/runtime/helpers/nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/toConsumableArray.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles.js */ \"./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\");\nvar iterableToArray = __webpack_require__(/*! ./iterableToArray.js */ \"./node_modules/@babel/runtime/helpers/iterableToArray.js\");\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\nvar nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread.js */ \"./node_modules/@babel/runtime/helpers/nonIterableSpread.js\");\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/toPrimitive.js":
/*!************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/toPrimitive.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.symbol.to-primitive.js */ \"./node_modules/core-js/modules/es.symbol.to-primitive.js\");\n__webpack_require__(/*! core-js/modules/es.date.to-primitive.js */ \"./node_modules/core-js/modules/es.date.to-primitive.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.number.constructor.js */ \"./node_modules/core-js/modules/es.number.constructor.js\");\nvar _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/toPrimitive.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/toPropertyKey.js":
/*!**************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/toPropertyKey.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nvar toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ \"./node_modules/@babel/runtime/helpers/toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/toPropertyKey.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/typeof.js":
/*!*******************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/typeof.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":
/*!***************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n__webpack_require__(/*! core-js/modules/es.array.from.js */ \"./node_modules/core-js/modules/es.array.from.js\");\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");\n__webpack_require__(/*! core-js/modules/es.regexp.test.js */ \"./node_modules/core-js/modules/es.regexp.test.js\");\nvar arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js?");
/***/ }),
/***/ "./node_modules/@babel/runtime/regenerator/index.js":
/*!**********************************************************!*\
!*** ./node_modules/@babel/runtime/regenerator/index.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.global-this.js */ \"./node_modules/core-js/modules/es.global-this.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n// TODO(Babel 8): Remove this file.\n\nvar runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ \"./node_modules/@babel/runtime/helpers/regeneratorRuntime.js\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if ((typeof globalThis === \"undefined\" ? \"undefined\" : _typeof(globalThis)) === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/regenerator/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/bezier-curve/lib/core/bezierCurveToPolyline.js":
/*!********************************************************************************!*\
!*** ./node_modules/@jiaminghi/bezier-curve/lib/core/bezierCurveToPolyline.js ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bezierCurveToPolyline = bezierCurveToPolyline;\nexports.getBezierCurveLength = getBezierCurveLength;\nexports[\"default\"] = void 0;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar sqrt = Math.sqrt,\n pow = Math.pow,\n ceil = Math.ceil,\n abs = Math.abs; // Initialize the number of points per curve\n\nvar defaultSegmentPointsNum = 50;\n/**\r\n * @example data structure of bezierCurve\r\n * bezierCurve = [\r\n * // Starting point of the curve\r\n * [10, 10],\r\n * // BezierCurve segment data (controlPoint1, controlPoint2, endPoint)\r\n * [\r\n * [20, 20], [40, 20], [50, 10]\r\n * ],\r\n * ...\r\n * ]\r\n */\n\n/**\r\n * @description Abstract the curve as a polyline consisting of N points\r\n * @param {Array} bezierCurve bezierCurve data\r\n * @param {Number} precision calculation accuracy. Recommended for 1-20. Default = 5\r\n * @return {Object} Calculation results and related data\r\n * @return {Array} Option.segmentPoints Point data that constitutes a polyline after calculation\r\n * @return {Number} Option.cycles Number of iterations\r\n * @return {Number} Option.rounds The number of recursions for the last iteration\r\n */\n\nfunction abstractBezierCurveToPolyline(bezierCurve) {\n var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;\n var segmentsNum = bezierCurve.length - 1;\n var startPoint = bezierCurve[0];\n var endPoint = bezierCurve[segmentsNum][2];\n var segments = bezierCurve.slice(1);\n var getSegmentTPointFuns = segments.map(function (seg, i) {\n var beginPoint = i === 0 ? startPoint : segments[i - 1][2];\n return createGetBezierCurveTPointFun.apply(void 0, [beginPoint].concat((0, _toConsumableArray2[\"default\"])(seg)));\n }); // Initialize the curve to a polyline\n\n var segmentPointsNum = new Array(segmentsNum).fill(defaultSegmentPointsNum);\n var segmentPoints = getSegmentPointsByNum(getSegmentTPointFuns, segmentPointsNum); // Calculate uniformly distributed points by iteratively\n\n var result = calcUniformPointsByIteration(segmentPoints, getSegmentTPointFuns, segments, precision);\n result.segmentPoints.push(endPoint);\n return result;\n}\n/**\r\n * @description Generate a method for obtaining corresponding point by t according to curve data\r\n * @param {Array} beginPoint BezierCurve begin point. [x, y]\r\n * @param {Array} controlPoint1 BezierCurve controlPoint1. [x, y]\r\n * @param {Array} controlPoint2 BezierCurve controlPoint2. [x, y]\r\n * @param {Array} endPoint BezierCurve end point. [x, y]\r\n * @return {Function} Expected function\r\n */\n\n\nfunction createGetBezierCurveTPointFun(beginPoint, controlPoint1, controlPoint2, endPoint) {\n return function (t) {\n var tSubed1 = 1 - t;\n var tSubed1Pow3 = pow(tSubed1, 3);\n var tSubed1Pow2 = pow(tSubed1, 2);\n var tPow3 = pow(t, 3);\n var tPow2 = pow(t, 2);\n return [beginPoint[0] * tSubed1Pow3 + 3 * controlPoint1[0] * t * tSubed1Pow2 + 3 * controlPoint2[0] * tPow2 * tSubed1 + endPoint[0] * tPow3, beginPoint[1] * tSubed1Pow3 + 3 * controlPoint1[1] * t * tSubed1Pow2 + 3 * controlPoint2[1] * tPow2 * tSubed1 + endPoint[1] * tPow3];\n };\n}\n/**\r\n * @description Get the distance between two points\r\n * @param {Array} point1 BezierCurve begin point. [x, y]\r\n * @param {Array} point2 BezierCurve controlPoint1. [x, y]\r\n * @return {Number} Expected distance\r\n */\n\n\nfunction getTwoPointDistance(_ref, _ref2) {\n var _ref3 = (0, _slicedToArray2[\"default\"])(_ref, 2),\n ax = _ref3[0],\n ay = _ref3[1];\n\n var _ref4 = (0, _slicedToArray2[\"default\"])(_ref2, 2),\n bx = _ref4[0],\n by = _ref4[1];\n\n return sqrt(pow(ax - bx, 2) + pow(ay - by, 2));\n}\n/**\r\n * @description Get the sum of the array of numbers\r\n * @param {Array} nums An array of numbers\r\n * @return {Number} Expected sum\r\n */\n\n\nfunction getNumsSum(nums) {\n return nums.reduce(function (sum, num) {\n return sum + num;\n }, 0);\n}\n/**\r\n * @description Get the distance of multiple sets of points\r\n * @param {Array} segmentPoints Multiple sets of point data\r\n * @return {Array} Distance of multiple sets of point data\r\n */\n\n\nfunction getSegmentPointsDistance(segmentPoints) {\n return segmentPoints.map(function (points, i) {\n return new Array(points.length - 1).fill(0).map(function (temp, j) {\n return getTwoPointDistance(points[j], points[j + 1]);\n });\n });\n}\n/**\r\n * @description Get the distance of multiple sets of points\r\n * @param {Array} segmentPoints Multiple sets of point data\r\n * @return {Array} Distance of multiple sets of point data\r\n */\n\n\nfunction getSegmentPointsByNum(getSegmentTPointFuns, segmentPointsNum) {\n return getSegmentTPointFuns.map(function (getSegmentTPointFun, i) {\n var tGap = 1 / segmentPointsNum[i];\n return new Array(segmentPointsNum[i]).fill('').map(function (foo, j) {\n return getSegmentTPointFun(j * tGap);\n });\n });\n}\n/**\r\n * @description Get the sum of deviations between line segment and the average length\r\n * @param {Array} segmentPointsDistance Segment length of polyline\r\n * @param {Number} avgLength Average length of the line segment\r\n * @return {Number} Deviations\r\n */\n\n\nfunction getAllDeviations(segmentPointsDistance, avgLength) {\n return segmentPointsDistance.map(function (seg) {\n return seg.map(function (s) {\n return abs(s - avgLength);\n });\n }).map(function (seg) {\n return getNumsSum(seg);\n }).reduce(function (total, v) {\n return total + v;\n }, 0);\n}\n/**\r\n * @description Calculate uniformly distributed points by iteratively\r\n * @param {Array} segmentPoints Multiple setd of points that make up a polyline\r\n * @param {Array} getSegmentTPointFuns Functions of get a point on the curve with t\r\n * @param {Array} segments BezierCurve data\r\n * @param {Number} precision Calculation accuracy\r\n * @return {Object} Calculation results and related data\r\n * @return {Array} Option.segmentPoints Point data that constitutes a polyline after calculation\r\n * @return {Number} Option.cycles Number of iterations\r\n * @return {Number} Option.rounds The number of recursions for the last iteration\r\n */\n\n\nfunction calcUniformPointsByIteration(segmentPoints, getSegmentTPointFuns, segments, precision) {\n // The number of loops for the current iteration\n var rounds = 4; // Number of iterations\n\n var cycles = 1;\n\n var _loop = function _loop() {\n // Recalculate the number of points per curve based on the last iteration data\n var totalPointsNum = segmentPoints.reduce(function (total, seg) {\n return total + seg.length;\n }, 0); // Add last points of segment to calc exact segment length\n\n segmentPoints.forEach(function (seg, i) {\n return seg.push(segments[i][2]);\n });\n var segmentPointsDistance = getSegmentPointsDistance(segmentPoints);\n var lineSegmentNum = segmentPointsDistance.reduce(function (total, seg) {\n return total + seg.length;\n }, 0);\n var segmentlength = segmentPointsDistance.map(function (seg) {\n return getNumsSum(seg);\n });\n var totalLength = getNumsSum(segmentlength);\n var avgLength = totalLength / lineSegmentNum; // Check if precision is reached\n\n var allDeviations = getAllDeviations(segmentPointsDistance, avgLength);\n if (allDeviations <= precision) return \"break\";\n totalPointsNum = ceil(avgLength / precision * totalPointsNum * 1.1);\n var segmentPointsNum = segmentlength.map(function (length) {\n return ceil(length / totalLength * totalPointsNum);\n }); // Calculate the points after redistribution\n\n segmentPoints = getSegmentPointsByNum(getSegmentTPointFuns, segmentPointsNum);\n totalPointsNum = segmentPoints.reduce(function (total, seg) {\n return total + seg.length;\n }, 0);\n var segmentPointsForLength = JSON.parse(JSON.stringify(segmentPoints));\n segmentPointsForLength.forEach(function (seg, i) {\n return seg.push(segments[i][2]);\n });\n segmentPointsDistance = getSegmentPointsDistance(segmentPointsForLength);\n lineSegmentNum = segmentPointsDistance.reduce(function (total, seg) {\n return total + seg.length;\n }, 0);\n segmentlength = segmentPointsDistance.map(function (seg) {\n return getNumsSum(seg);\n });\n totalLength = getNumsSum(segmentlength);\n avgLength = totalLength / lineSegmentNum;\n var stepSize = 1 / totalPointsNum / 10; // Recursively for each segment of the polyline\n\n getSegmentTPointFuns.forEach(function (getSegmentTPointFun, i) {\n var currentSegmentPointsNum = segmentPointsNum[i];\n var t = new Array(currentSegmentPointsNum).fill('').map(function (foo, j) {\n return j / segmentPointsNum[i];\n }); // Repeated recursive offset\n\n for (var r = 0; r < rounds; r++) {\n var distance = getSegmentPointsDistance([segmentPoints[i]])[0];\n var deviations = distance.map(function (d) {\n return d - avgLength;\n });\n var offset = 0;\n\n for (var j = 0; j < currentSegmentPointsNum; j++) {\n if (j === 0) return;\n offset += deviations[j - 1];\n t[j] -= stepSize * offset;\n if (t[j] > 1) t[j] = 1;\n if (t[j] < 0) t[j] = 0;\n segmentPoints[i][j] = getSegmentTPointFun(t[j]);\n }\n }\n });\n rounds *= 4;\n cycles++;\n };\n\n do {\n var _ret = _loop();\n\n if (_ret === \"break\") break;\n } while (rounds <= 1025);\n\n segmentPoints = segmentPoints.reduce(function (all, seg) {\n return all.concat(seg);\n }, []);\n return {\n segmentPoints: segmentPoints,\n cycles: cycles,\n rounds: rounds\n };\n}\n/**\r\n * @description Get the polyline corresponding to the Bezier curve\r\n * @param {Array} bezierCurve BezierCurve data\r\n * @param {Number} precision Calculation accuracy. Recommended for 1-20. Default = 5\r\n * @return {Array|Boolean} Point data that constitutes a polyline after calculation (Invalid input will return false)\r\n */\n\n\nfunction bezierCurveToPolyline(bezierCurve) {\n var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;\n\n if (!bezierCurve) {\n console.error('bezierCurveToPolyline: Missing parameters!');\n return false;\n }\n\n if (!(bezierCurve instanceof Array)) {\n console.error('bezierCurveToPolyline: Parameter bezierCurve must be an array!');\n return false;\n }\n\n if (typeof precision !== 'number') {\n console.error('bezierCurveToPolyline: Parameter precision must be a number!');\n return false;\n }\n\n var _abstractBezierCurveT = abstractBezierCurveToPolyline(bezierCurve, precision),\n segmentPoints = _abstractBezierCurveT.segmentPoints;\n\n return segmentPoints;\n}\n/**\r\n * @description Get the bezier curve length\r\n * @param {Array} bezierCurve bezierCurve data\r\n * @param {Number} precision calculation accuracy. Recommended for 5-10. Default = 5\r\n * @return {Number|Boolean} BezierCurve length (Invalid input will return false)\r\n */\n\n\nfunction getBezierCurveLength(bezierCurve) {\n var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;\n\n if (!bezierCurve) {\n console.error('getBezierCurveLength: Missing parameters!');\n return false;\n }\n\n if (!(bezierCurve instanceof Array)) {\n console.error('getBezierCurveLength: Parameter bezierCurve must be an array!');\n return false;\n }\n\n if (typeof precision !== 'number') {\n console.error('getBezierCurveLength: Parameter precision must be a number!');\n return false;\n }\n\n var _abstractBezierCurveT2 = abstractBezierCurveToPolyline(bezierCurve, precision),\n segmentPoints = _abstractBezierCurveT2.segmentPoints; // Calculate the total length of the points that make up the polyline\n\n\n var pointsDistance = getSegmentPointsDistance([segmentPoints])[0];\n var length = getNumsSum(pointsDistance);\n return length;\n}\n\nvar _default = bezierCurveToPolyline;\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/bezier-curve/lib/core/bezierCurveToPolyline.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/bezier-curve/lib/core/polylineToBezierCurve.js":
/*!********************************************************************************!*\
!*** ./node_modules/@jiaminghi/bezier-curve/lib/core/polylineToBezierCurve.js ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\n/**\r\n * @description Abstract the polyline formed by N points into a set of bezier curve\r\n * @param {Array} polyline A set of points that make up a polyline\r\n * @param {Boolean} close Closed curve\r\n * @param {Number} offsetA Smoothness\r\n * @param {Number} offsetB Smoothness\r\n * @return {Array|Boolean} A set of bezier curve (Invalid input will return false)\r\n */\nfunction polylineToBezierCurve(polyline) {\n var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var offsetA = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.25;\n var offsetB = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.25;\n\n if (!(polyline instanceof Array)) {\n console.error('polylineToBezierCurve: Parameter polyline must be an array!');\n return false;\n }\n\n if (polyline.length <= 2) {\n console.error('polylineToBezierCurve: Converting to a curve requires at least 3 points!');\n return false;\n }\n\n var startPoint = polyline[0];\n var bezierCurveLineNum = polyline.length - 1;\n var bezierCurvePoints = new Array(bezierCurveLineNum).fill(0).map(function (foo, i) {\n return [].concat((0, _toConsumableArray2[\"default\"])(getBezierCurveLineControlPoints(polyline, i, close, offsetA, offsetB)), [polyline[i + 1]]);\n });\n if (close) closeBezierCurve(bezierCurvePoints, startPoint);\n bezierCurvePoints.unshift(polyline[0]);\n return bezierCurvePoints;\n}\n/**\r\n * @description Get the control points of the Bezier curve\r\n * @param {Array} polyline A set of points that make up a polyline\r\n * @param {Number} index The index of which get controls points's point in polyline\r\n * @param {Boolean} close Closed curve\r\n * @param {Number} offsetA Smoothness\r\n * @param {Number} offsetB Smoothness\r\n * @return {Array} Control points\r\n */\n\n\nfunction getBezierCurveLineControlPoints(polyline, index) {\n var close = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var offsetA = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.25;\n var offsetB = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.25;\n var pointNum = polyline.length;\n if (pointNum < 3 || index >= pointNum) return;\n var beforePointIndex = index - 1;\n if (beforePointIndex < 0) beforePointIndex = close ? pointNum + beforePointIndex : 0;\n var afterPointIndex = index + 1;\n if (afterPointIndex >= pointNum) afterPointIndex = close ? afterPointIndex - pointNum : pointNum - 1;\n var afterNextPointIndex = index + 2;\n if (afterNextPointIndex >= pointNum) afterNextPointIndex = close ? afterNextPointIndex - pointNum : pointNum - 1;\n var pointBefore = polyline[beforePointIndex];\n var pointMiddle = polyline[index];\n var pointAfter = polyline[afterPointIndex];\n var pointAfterNext = polyline[afterNextPointIndex];\n return [[pointMiddle[0] + offsetA * (pointAfter[0] - pointBefore[0]), pointMiddle[1] + offsetA * (pointAfter[1] - pointBefore[1])], [pointAfter[0] - offsetB * (pointAfterNext[0] - pointMiddle[0]), pointAfter[1] - offsetB * (pointAfterNext[1] - pointMiddle[1])]];\n}\n/**\r\n * @description Get the last curve of the closure\r\n * @param {Array} bezierCurve A set of sub-curve\r\n * @param {Array} startPoint Start point\r\n * @return {Array} The last curve for closure\r\n */\n\n\nfunction closeBezierCurve(bezierCurve, startPoint) {\n var firstSubCurve = bezierCurve[0];\n var lastSubCurve = bezierCurve.slice(-1)[0];\n bezierCurve.push([getSymmetryPoint(lastSubCurve[1], lastSubCurve[2]), getSymmetryPoint(firstSubCurve[0], startPoint), startPoint]);\n return bezierCurve;\n}\n/**\r\n * @description Get the symmetry point\r\n * @param {Array} point Symmetric point\r\n * @param {Array} centerPoint Symmetric center\r\n * @return {Array} Symmetric point\r\n */\n\n\nfunction getSymmetryPoint(point, centerPoint) {\n var _point = (0, _slicedToArray2[\"default\"])(point, 2),\n px = _point[0],\n py = _point[1];\n\n var _centerPoint = (0, _slicedToArray2[\"default\"])(centerPoint, 2),\n cx = _centerPoint[0],\n cy = _centerPoint[1];\n\n var minusX = cx - px;\n var minusY = cy - py;\n return [cx + minusX, cy + minusY];\n}\n\nvar _default = polylineToBezierCurve;\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/bezier-curve/lib/core/polylineToBezierCurve.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/bezier-curve/lib/index.js":
/*!***********************************************************!*\
!*** ./node_modules/@jiaminghi/bezier-curve/lib/index.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"bezierCurveToPolyline\", {\n enumerable: true,\n get: function get() {\n return _bezierCurveToPolyline.bezierCurveToPolyline;\n }\n});\nObject.defineProperty(exports, \"getBezierCurveLength\", {\n enumerable: true,\n get: function get() {\n return _bezierCurveToPolyline.getBezierCurveLength;\n }\n});\nObject.defineProperty(exports, \"polylineToBezierCurve\", {\n enumerable: true,\n get: function get() {\n return _polylineToBezierCurve[\"default\"];\n }\n});\nexports[\"default\"] = void 0;\n\nvar _bezierCurveToPolyline = __webpack_require__(/*! ./core/bezierCurveToPolyline */ \"./node_modules/@jiaminghi/bezier-curve/lib/core/bezierCurveToPolyline.js\");\n\nvar _polylineToBezierCurve = _interopRequireDefault(__webpack_require__(/*! ./core/polylineToBezierCurve */ \"./node_modules/@jiaminghi/bezier-curve/lib/core/polylineToBezierCurve.js\"));\n\nvar _default = {\n bezierCurveToPolyline: _bezierCurveToPolyline.bezierCurveToPolyline,\n getBezierCurveLength: _bezierCurveToPolyline.getBezierCurveLength,\n polylineToBezierCurve: _polylineToBezierCurve[\"default\"]\n};\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/bezier-curve/lib/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/c-render/lib/class/crender.class.js":
/*!*********************************************************************!*\
!*** ./node_modules/@jiaminghi/c-render/lib/class/crender.class.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _color = _interopRequireDefault(__webpack_require__(/*! @jiaminghi/color */ \"./node_modules/@jiaminghi/color/es/index.mjs\"));\n\nvar _bezierCurve = _interopRequireDefault(__webpack_require__(/*! @jiaminghi/bezier-curve */ \"./node_modules/@jiaminghi/bezier-curve/lib/index.js\"));\n\nvar _util = __webpack_require__(/*! ../plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _graphs = _interopRequireDefault(__webpack_require__(/*! ../config/graphs */ \"./node_modules/@jiaminghi/c-render/lib/config/graphs.js\"));\n\nvar _graph = _interopRequireDefault(__webpack_require__(/*! ./graph.class */ \"./node_modules/@jiaminghi/c-render/lib/class/graph.class.js\"));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/**\r\n * @description Class of CRender\r\n * @param {Object} canvas Canvas DOM\r\n * @return {CRender} Instance of CRender\r\n */\nvar CRender = function CRender(canvas) {\n (0, _classCallCheck2[\"default\"])(this, CRender);\n\n if (!canvas) {\n console.error('CRender Missing parameters!');\n return;\n }\n\n var ctx = canvas.getContext('2d');\n var clientWidth = canvas.clientWidth,\n clientHeight = canvas.clientHeight;\n var area = [clientWidth, clientHeight];\n canvas.setAttribute('width', clientWidth);\n canvas.setAttribute('height', clientHeight);\n /**\r\n * @description Context of the canvas\r\n * @type {Object}\r\n * @example ctx = canvas.getContext('2d')\r\n */\n\n this.ctx = ctx;\n /**\r\n * @description Width and height of the canvas\r\n * @type {Array}\r\n * @example area = [300,100]\r\n */\n\n this.area = area;\n /**\r\n * @description Whether render is in animation rendering\r\n * @type {Boolean}\r\n * @example animationStatus = true|false\r\n */\n\n this.animationStatus = false;\n /**\r\n * @description Added graph\r\n * @type {[Graph]}\r\n * @example graphs = [Graph, Graph, ...]\r\n */\n\n this.graphs = [];\n /**\r\n * @description Color plugin\r\n * @type {Object}\r\n * @link https://github.com/jiaming743/color\r\n */\n\n this.color = _color[\"default\"];\n /**\r\n * @description Bezier Curve plugin\r\n * @type {Object}\r\n * @link https://github.com/jiaming743/BezierCurve\r\n */\n\n this.bezierCurve = _bezierCurve[\"default\"]; // bind event handler\n\n canvas.addEventListener('mousedown', mouseDown.bind(this));\n canvas.addEventListener('mousemove', mouseMove.bind(this));\n canvas.addEventListener('mouseup', mouseUp.bind(this));\n};\n/**\r\n * @description Clear canvas drawing area\r\n * @return {Undefined} Void\r\n */\n\n\nexports[\"default\"] = CRender;\n\nCRender.prototype.clearArea = function () {\n var _this$ctx;\n\n var area = this.area;\n\n (_this$ctx = this.ctx).clearRect.apply(_this$ctx, [0, 0].concat((0, _toConsumableArray2[\"default\"])(area)));\n};\n/**\r\n * @description Add graph to render\r\n * @param {Object} config Graph configuration\r\n * @return {Graph} Graph instance\r\n */\n\n\nCRender.prototype.add = function () {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var name = config.name;\n\n if (!name) {\n console.error('add Missing parameters!');\n return;\n }\n\n var graphConfig = _graphs[\"default\"].get(name);\n\n if (!graphConfig) {\n console.warn('No corresponding graph configuration found!');\n return;\n }\n\n var graph = new _graph[\"default\"](graphConfig, config);\n if (!graph.validator(graph)) return;\n graph.render = this;\n this.graphs.push(graph);\n this.sortGraphsByIndex();\n this.drawAllGraph();\n return graph;\n};\n/**\r\n * @description Sort the graph by index\r\n * @return {Undefined} Void\r\n */\n\n\nCRender.prototype.sortGraphsByIndex = function () {\n var graphs = this.graphs;\n graphs.sort(function (a, b) {\n if (a.index > b.index) return 1;\n if (a.index === b.index) return 0;\n if (a.index < b.index) return -1;\n });\n};\n/**\r\n * @description Delete graph in render\r\n * @param {Graph} graph The graph to be deleted\r\n * @return {Undefined} Void\r\n */\n\n\nCRender.prototype.delGraph = function (graph) {\n if (typeof graph.delProcessor !== 'function') return;\n graph.delProcessor(this);\n this.graphs = this.graphs.filter(function (graph) {\n return graph;\n });\n this.drawAllGraph();\n};\n/**\r\n * @description Delete all graph in render\r\n * @return {Undefined} Void\r\n */\n\n\nCRender.prototype.delAllGraph = function () {\n var _this = this;\n\n this.graphs.forEach(function (graph) {\n return graph.delProcessor(_this);\n });\n this.graphs = this.graphs.filter(function (graph) {\n return graph;\n });\n this.drawAllGraph();\n};\n/**\r\n * @description Draw all the graphs in the render\r\n * @return {Undefined} Void\r\n */\n\n\nCRender.prototype.drawAllGraph = function () {\n var _this2 = this;\n\n this.clearArea();\n this.graphs.filter(function (graph) {\n return graph && graph.visible;\n }).forEach(function (graph) {\n return graph.drawProcessor(_this2, graph);\n });\n};\n/**\r\n * @description Animate the graph whose animation queue is not empty\r\n * and the animationPause is equal to false\r\n * @return {Promise} Animation Promise\r\n */\n\n\nCRender.prototype.launchAnimation = function () {\n var _this3 = this;\n\n var animationStatus = this.animationStatus;\n if (animationStatus) return;\n this.animationStatus = true;\n return new Promise(function (resolve) {\n animation.call(_this3, function () {\n _this3.animationStatus = false;\n resolve();\n }, Date.now());\n });\n};\n/**\r\n * @description Try to animate every graph\r\n * @param {Function} callback Callback in animation end\r\n * @param {Number} timeStamp Time stamp of animation start\r\n * @return {Undefined} Void\r\n */\n\n\nfunction animation(callback, timeStamp) {\n var graphs = this.graphs;\n\n if (!animationAble(graphs)) {\n callback();\n return;\n }\n\n graphs.forEach(function (graph) {\n return graph.turnNextAnimationFrame(timeStamp);\n });\n this.drawAllGraph();\n requestAnimationFrame(animation.bind(this, callback, timeStamp));\n}\n/**\r\n * @description Find if there are graph that can be animated\r\n * @param {[Graph]} graphs\r\n * @return {Boolean}\r\n */\n\n\nfunction animationAble(graphs) {\n return graphs.find(function (graph) {\n return !graph.animationPause && graph.animationFrameState.length;\n });\n}\n/**\r\n * @description Handler of CRender mousedown event\r\n * @return {Undefined} Void\r\n */\n\n\nfunction mouseDown(e) {\n var graphs = this.graphs;\n var hoverGraph = graphs.find(function (graph) {\n return graph.status === 'hover';\n });\n if (!hoverGraph) return;\n hoverGraph.status = 'active';\n}\n/**\r\n * @description Handler of CRender mousemove event\r\n * @return {Undefined} Void\r\n */\n\n\nfunction mouseMove(e) {\n var offsetX = e.offsetX,\n offsetY = e.offsetY;\n var position = [offsetX, offsetY];\n var graphs = this.graphs;\n var activeGraph = graphs.find(function (graph) {\n return graph.status === 'active' || graph.status === 'drag';\n });\n\n if (activeGraph) {\n if (!activeGraph.drag) return;\n\n if (typeof activeGraph.move !== 'function') {\n console.error('No move method is provided, cannot be dragged!');\n return;\n }\n\n activeGraph.moveProcessor(e);\n activeGraph.status = 'drag';\n return;\n }\n\n var hoverGraph = graphs.find(function (graph) {\n return graph.status === 'hover';\n });\n var hoverAbleGraphs = graphs.filter(function (graph) {\n return graph.hover && (typeof graph.hoverCheck === 'function' || graph.hoverRect);\n });\n var hoveredGraph = hoverAbleGraphs.find(function (graph) {\n return graph.hoverCheckProcessor(position, graph);\n });\n\n if (hoveredGraph) {\n document.body.style.cursor = hoveredGraph.style.hoverCursor;\n } else {\n document.body.style.cursor = 'default';\n }\n\n var hoverGraphMouseOuterIsFun = false,\n hoveredGraphMouseEnterIsFun = false;\n if (hoverGraph) hoverGraphMouseOuterIsFun = typeof hoverGraph.mouseOuter === 'function';\n if (hoveredGraph) hoveredGraphMouseEnterIsFun = typeof hoveredGraph.mouseEnter === 'function';\n if (!hoveredGraph && !hoverGraph) return;\n\n if (!hoveredGraph && hoverGraph) {\n if (hoverGraphMouseOuterIsFun) hoverGraph.mouseOuter(e, hoverGraph);\n hoverGraph.status = 'static';\n return;\n }\n\n if (hoveredGraph && hoveredGraph === hoverGraph) return;\n\n if (hoveredGraph && !hoverGraph) {\n if (hoveredGraphMouseEnterIsFun) hoveredGraph.mouseEnter(e, hoveredGraph);\n hoveredGraph.status = 'hover';\n return;\n }\n\n if (hoveredGraph && hoverGraph && hoveredGraph !== hoverGraph) {\n if (hoverGraphMouseOuterIsFun) hoverGraph.mouseOuter(e, hoverGraph);\n hoverGraph.status = 'static';\n if (hoveredGraphMouseEnterIsFun) hoveredGraph.mouseEnter(e, hoveredGraph);\n hoveredGraph.status = 'hover';\n }\n}\n/**\r\n * @description Handler of CRender mouseup event\r\n * @return {Undefined} Void\r\n */\n\n\nfunction mouseUp(e) {\n var graphs = this.graphs;\n var activeGraph = graphs.find(function (graph) {\n return graph.status === 'active';\n });\n var dragGraph = graphs.find(function (graph) {\n return graph.status === 'drag';\n });\n if (activeGraph && typeof activeGraph.click === 'function') activeGraph.click(e, activeGraph);\n graphs.forEach(function (graph) {\n return graph && (graph.status = 'static');\n });\n if (activeGraph) activeGraph.status = 'hover';\n if (dragGraph) dragGraph.status = 'hover';\n}\n/**\r\n * @description Clone Graph\r\n * @param {Graph} graph The target to be cloned\r\n * @return {Graph} Cloned graph\r\n */\n\n\nCRender.prototype.clone = function (graph) {\n var style = graph.style.getStyle();\n\n var clonedGraph = _objectSpread({}, graph, {\n style: style\n });\n\n delete clonedGraph.render;\n clonedGraph = (0, _util.deepClone)(clonedGraph, true);\n return this.add(clonedGraph);\n};\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/c-render/lib/class/crender.class.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/c-render/lib/class/graph.class.js":
/*!*******************************************************************!*\
!*** ./node_modules/@jiaminghi/c-render/lib/class/graph.class.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _style = _interopRequireDefault(__webpack_require__(/*! ./style.class */ \"./node_modules/@jiaminghi/c-render/lib/class/style.class.js\"));\n\nvar _transition = _interopRequireDefault(__webpack_require__(/*! @jiaminghi/transition */ \"./node_modules/@jiaminghi/transition/lib/index.js\"));\n\nvar _util = __webpack_require__(/*! ../plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\n/**\r\n * @description Class Graph\r\n * @param {Object} graph Graph default configuration\r\n * @param {Object} config Graph config\r\n * @return {Graph} Instance of Graph\r\n */\nvar Graph = function Graph(graph, config) {\n (0, _classCallCheck2[\"default\"])(this, Graph);\n config = (0, _util.deepClone)(config, true);\n var defaultConfig = {\n /**\r\n * @description Weather to render graph\r\n * @type {Boolean}\r\n * @default visible = true\r\n */\n visible: true,\n\n /**\r\n * @description Whether to enable drag\r\n * @type {Boolean}\r\n * @default drag = false\r\n */\n drag: false,\n\n /**\r\n * @description Whether to enable hover\r\n * @type {Boolean}\r\n * @default hover = false\r\n */\n hover: false,\n\n /**\r\n * @description Graph rendering index\r\n * Give priority to index high graph in rendering\r\n * @type {Number}\r\n * @example index = 1\r\n */\n index: 1,\n\n /**\r\n * @description Animation delay time(ms)\r\n * @type {Number}\r\n * @default animationDelay = 0\r\n */\n animationDelay: 0,\n\n /**\r\n * @description Number of animation frames\r\n * @type {Number}\r\n * @default animationFrame = 30\r\n */\n animationFrame: 30,\n\n /**\r\n * @description Animation dynamic curve (Supported by transition)\r\n * @type {String}\r\n * @default animationCurve = 'linear'\r\n * @link https://github.com/jiaming743/Transition\r\n */\n animationCurve: 'linear',\n\n /**\r\n * @description Weather to pause graph animation\r\n * @type {Boolean}\r\n * @default animationPause = false\r\n */\n animationPause: false,\n\n /**\r\n * @description Rectangular hover detection zone\r\n * Use this method for hover detection first\r\n * @type {Null|Array}\r\n * @default hoverRect = null\r\n * @example hoverRect = [0, 0, 100, 100] // [Rect start x, y, Rect width, height]\r\n */\n hoverRect: null,\n\n /**\r\n * @description Mouse enter event handler\r\n * @type {Function|Null}\r\n * @default mouseEnter = null\r\n */\n mouseEnter: null,\n\n /**\r\n * @description Mouse outer event handler\r\n * @type {Function|Null}\r\n * @default mouseOuter = null\r\n */\n mouseOuter: null,\n\n /**\r\n * @description Mouse click event handler\r\n * @type {Function|Null}\r\n * @default click = null\r\n */\n click: null\n };\n var configAbleNot = {\n status: 'static',\n animationRoot: [],\n animationKeys: [],\n animationFrameState: [],\n cache: {}\n };\n if (!config.shape) config.shape = {};\n if (!config.style) config.style = {};\n var shape = Object.assign({}, graph.shape, config.shape);\n Object.assign(defaultConfig, config, configAbleNot);\n Object.assign(this, graph, defaultConfig);\n this.shape = shape;\n this.style = new _style[\"default\"](config.style);\n this.addedProcessor();\n};\n/**\r\n * @description Processor of added\r\n * @return {Undefined} Void\r\n */\n\n\nexports[\"default\"] = Graph;\n\nGraph.prototype.addedProcessor = function () {\n if (typeof this.setGraphCenter === 'function') this.setGraphCenter(null, this); // The life cycle 'added\"\n\n if (typeof this.added === 'function') this.added(this);\n};\n/**\r\n * @description Processor of draw\r\n * @param {CRender} render Instance of CRender\r\n * @param {Graph} graph Instance of Graph\r\n * @return {Undefined} Void\r\n */\n\n\nGraph.prototype.drawProcessor = function (render, graph) {\n var ctx = render.ctx;\n graph.style.initStyle(ctx);\n if (typeof this.beforeDraw === 'function') this.beforeDraw(this, render);\n graph.draw(render, graph);\n if (typeof this.drawed === 'function') this.drawed(this, render);\n graph.style.restoreTransform(ctx);\n};\n/**\r\n * @description Processor of hover check\r\n * @param {Array} position Mouse Position\r\n * @param {Graph} graph Instance of Graph\r\n * @return {Boolean} Result of hover check\r\n */\n\n\nGraph.prototype.hoverCheckProcessor = function (position, _ref) {\n var hoverRect = _ref.hoverRect,\n style = _ref.style,\n hoverCheck = _ref.hoverCheck;\n var graphCenter = style.graphCenter,\n rotate = style.rotate,\n scale = style.scale,\n translate = style.translate;\n\n if (graphCenter) {\n if (rotate) position = (0, _util.getRotatePointPos)(-rotate, position, graphCenter);\n if (scale) position = (0, _util.getScalePointPos)(scale.map(function (s) {\n return 1 / s;\n }), position, graphCenter);\n if (translate) position = (0, _util.getTranslatePointPos)(translate.map(function (v) {\n return v * -1;\n }), position);\n }\n\n if (hoverRect) return _util.checkPointIsInRect.apply(void 0, [position].concat((0, _toConsumableArray2[\"default\"])(hoverRect)));\n return hoverCheck(position, this);\n};\n/**\r\n * @description Processor of move\r\n * @param {Event} e Mouse movement event\r\n * @return {Undefined} Void\r\n */\n\n\nGraph.prototype.moveProcessor = function (e) {\n this.move(e, this);\n if (typeof this.beforeMove === 'function') this.beforeMove(e, this);\n if (typeof this.setGraphCenter === 'function') this.setGraphCenter(e, this);\n if (typeof this.moved === 'function') this.moved(e, this);\n};\n/**\r\n * @description Update graph state\r\n * @param {String} attrName Updated attribute name\r\n * @param {Any} change Updated value\r\n * @return {Undefined} Void\r\n */\n\n\nGraph.prototype.attr = function (attrName) {\n var change = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n if (!attrName || change === undefined) return false;\n var isObject = (0, _typeof2[\"default\"])(this[attrName]) === 'object';\n if (isObject) change = (0, _util.deepClone)(change, true);\n var render = this.render;\n\n if (attrName === 'style') {\n this.style.update(change);\n } else if (isObject) {\n Object.assign(this[attrName], change);\n } else {\n this[attrName] = change;\n }\n\n if (attrName === 'index') render.sortGraphsByIndex();\n render.drawAllGraph();\n};\n/**\r\n * @description Update graphics state (with animation)\r\n * Only shape and style attributes are supported\r\n * @param {String} attrName Updated attribute name\r\n * @param {Any} change Updated value\r\n * @param {Boolean} wait Whether to store the animation waiting\r\n * for the next animation request\r\n * @return {Promise} Animation Promise\r\n */\n\n\nGraph.prototype.animation =\n/*#__PURE__*/\nfunction () {\n var _ref2 = (0, _asyncToGenerator2[\"default\"])(\n /*#__PURE__*/\n _regenerator[\"default\"].mark(function _callee2(attrName, change) {\n var wait,\n changeRoot,\n changeKeys,\n beforeState,\n animationFrame,\n animationCurve,\n animationDelay,\n animationFrameState,\n render,\n _args2 = arguments;\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n wait = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : false;\n\n if (!(attrName !== 'shape' && attrName !== 'style')) {\n _context2.next = 4;\n break;\n }\n\n console.error('Only supported shape and style animation!');\n return _context2.abrupt(\"return\");\n\n case 4:\n change = (0, _util.deepClone)(change, true);\n if (attrName === 'style') this.style.colorProcessor(change);\n changeRoot = this[attrName];\n changeKeys = Object.keys(change);\n beforeState = {};\n changeKeys.forEach(function (key) {\n return beforeState[key] = changeRoot[key];\n });\n animationFrame = this.animationFrame, animationCurve = this.animationCurve, animationDelay = this.animationDelay;\n animationFrameState = (0, _transition[\"default\"])(animationCurve, beforeState, change, animationFrame, true);\n this.animationRoot.push(changeRoot);\n this.animationKeys.push(changeKeys);\n this.animationFrameState.push(animationFrameState);\n\n if (!wait) {\n _context2.next = 17;\n break;\n }\n\n return _context2.abrupt(\"return\");\n\n case 17:\n if (!(animationDelay > 0)) {\n _context2.next = 20;\n break;\n }\n\n _context2.next = 20;\n return delay(animationDelay);\n\n case 20:\n render = this.render;\n return _context2.abrupt(\"return\", new Promise(\n /*#__PURE__*/\n function () {\n var _ref3 = (0, _asyncToGenerator2[\"default\"])(\n /*#__PURE__*/\n _regenerator[\"default\"].mark(function _callee(resolve) {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return render.launchAnimation();\n\n case 2:\n resolve();\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }()));\n\n case 22:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x, _x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n/**\r\n * @description Extract the next frame of data from the animation queue\r\n * and update the graph state\r\n * @return {Undefined} Void\r\n */\n\n\nGraph.prototype.turnNextAnimationFrame = function (timeStamp) {\n var animationDelay = this.animationDelay,\n animationRoot = this.animationRoot,\n animationKeys = this.animationKeys,\n animationFrameState = this.animationFrameState,\n animationPause = this.animationPause;\n if (animationPause) return;\n if (Date.now() - timeStamp < animationDelay) return;\n animationRoot.forEach(function (root, i) {\n animationKeys[i].forEach(function (key) {\n root[key] = animationFrameState[i][0][key];\n });\n });\n animationFrameState.forEach(function (stateItem, i) {\n stateItem.shift();\n var noFrame = stateItem.length === 0;\n if (noFrame) animationRoot[i] = null;\n if (noFrame) animationKeys[i] = null;\n });\n this.animationFrameState = animationFrameState.filter(function (state) {\n return state.length;\n });\n this.animationRoot = animationRoot.filter(function (root) {\n return root;\n });\n this.animationKeys = animationKeys.filter(function (keys) {\n return keys;\n });\n};\n/**\r\n * @description Skip to the last frame of animation\r\n * @return {Undefined} Void\r\n */\n\n\nGraph.prototype.animationEnd = function () {\n var animationFrameState = this.animationFrameState,\n animationKeys = this.animationKeys,\n animationRoot = this.animationRoot,\n render = this.render;\n animationRoot.forEach(function (root, i) {\n var currentKeys = animationKeys[i];\n var lastState = animationFrameState[i].pop();\n currentKeys.forEach(function (key) {\n return root[key] = lastState[key];\n });\n });\n this.animationFrameState = [];\n this.animationKeys = [];\n this.animationRoot = [];\n return render.drawAllGraph();\n};\n/**\r\n * @description Pause animation behavior\r\n * @return {Undefined} Void\r\n */\n\n\nGraph.prototype.pauseAnimation = function () {\n this.attr('animationPause', true);\n};\n/**\r\n * @description Try animation behavior\r\n * @return {Undefined} Void\r\n */\n\n\nGraph.prototype.playAnimation = function () {\n var render = this.render;\n this.attr('animationPause', false);\n return new Promise(\n /*#__PURE__*/\n function () {\n var _ref4 = (0, _asyncToGenerator2[\"default\"])(\n /*#__PURE__*/\n _regenerator[\"default\"].mark(function _callee3(resolve) {\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return render.launchAnimation();\n\n case 2:\n resolve();\n\n case 3:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n\n return function (_x4) {\n return _ref4.apply(this, arguments);\n };\n }());\n};\n/**\r\n * @description Processor of delete\r\n * @param {CRender} render Instance of CRender\r\n * @return {Undefined} Void\r\n */\n\n\nGraph.prototype.delProcessor = function (render) {\n var _this = this;\n\n var graphs = render.graphs;\n var index = graphs.findIndex(function (graph) {\n return graph === _this;\n });\n if (index === -1) return;\n if (typeof this.beforeDelete === 'function') this.beforeDelete(this);\n graphs.splice(index, 1, null);\n if (typeof this.deleted === 'function') this.deleted(this);\n};\n/**\r\n * @description Return a timed release Promise\r\n * @param {Number} time Release time\r\n * @return {Promise} A timed release Promise\r\n */\n\n\nfunction delay(time) {\n return new Promise(function (resolve) {\n setTimeout(resolve, time);\n });\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/c-render/lib/class/graph.class.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/c-render/lib/class/style.class.js":
/*!*******************************************************************!*\
!*** ./node_modules/@jiaminghi/c-render/lib/class/style.class.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _color = __webpack_require__(/*! @jiaminghi/color */ \"./node_modules/@jiaminghi/color/es/index.mjs\");\n\nvar _util = __webpack_require__(/*! ../plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\n/**\r\n * @description Class Style\r\n * @param {Object} style Style configuration\r\n * @return {Style} Instance of Style\r\n */\nvar Style = function Style(style) {\n (0, _classCallCheck2[\"default\"])(this, Style);\n this.colorProcessor(style);\n var defaultStyle = {\n /**\r\n * @description Rgba value of graph fill color\r\n * @type {Array}\r\n * @default fill = [0, 0, 0, 1]\r\n */\n fill: [0, 0, 0, 1],\n\n /**\r\n * @description Rgba value of graph stroke color\r\n * @type {Array}\r\n * @default stroke = [0, 0, 0, 1]\r\n */\n stroke: [0, 0, 0, 0],\n\n /**\r\n * @description Opacity of graph\r\n * @type {Number}\r\n * @default opacity = 1\r\n */\n opacity: 1,\n\n /**\r\n * @description LineCap of Ctx\r\n * @type {String}\r\n * @default lineCap = null\r\n * @example lineCap = 'butt'|'round'|'square'\r\n */\n lineCap: null,\n\n /**\r\n * @description Linejoin of Ctx\r\n * @type {String}\r\n * @default lineJoin = null\r\n * @example lineJoin = 'round'|'bevel'|'miter'\r\n */\n lineJoin: null,\n\n /**\r\n * @description LineDash of Ctx\r\n * @type {Array}\r\n * @default lineDash = null\r\n * @example lineDash = [10, 10]\r\n */\n lineDash: null,\n\n /**\r\n * @description LineDashOffset of Ctx\r\n * @type {Number}\r\n * @default lineDashOffset = null\r\n * @example lineDashOffset = 10\r\n */\n lineDashOffset: null,\n\n /**\r\n * @description ShadowBlur of Ctx\r\n * @type {Number}\r\n * @default shadowBlur = 0\r\n */\n shadowBlur: 0,\n\n /**\r\n * @description Rgba value of graph shadow color\r\n * @type {Array}\r\n * @default shadowColor = [0, 0, 0, 0]\r\n */\n shadowColor: [0, 0, 0, 0],\n\n /**\r\n * @description ShadowOffsetX of Ctx\r\n * @type {Number}\r\n * @default shadowOffsetX = 0\r\n */\n shadowOffsetX: 0,\n\n /**\r\n * @description ShadowOffsetY of Ctx\r\n * @type {Number}\r\n * @default shadowOffsetY = 0\r\n */\n shadowOffsetY: 0,\n\n /**\r\n * @description LineWidth of Ctx\r\n * @type {Number}\r\n * @default lineWidth = 0\r\n */\n lineWidth: 0,\n\n /**\r\n * @description Center point of the graph\r\n * @type {Array}\r\n * @default graphCenter = null\r\n * @example graphCenter = [10, 10]\r\n */\n graphCenter: null,\n\n /**\r\n * @description Graph scale\r\n * @type {Array}\r\n * @default scale = null\r\n * @example scale = [1.5, 1.5]\r\n */\n scale: null,\n\n /**\r\n * @description Graph rotation degree\r\n * @type {Number}\r\n * @default rotate = null\r\n * @example rotate = 10\r\n */\n rotate: null,\n\n /**\r\n * @description Graph translate distance\r\n * @type {Array}\r\n * @default translate = null\r\n * @example translate = [10, 10]\r\n */\n translate: null,\n\n /**\r\n * @description Cursor status when hover\r\n * @type {String}\r\n * @default hoverCursor = 'pointer'\r\n * @example hoverCursor = 'default'|'pointer'|'auto'|'crosshair'|'move'|'wait'|...\r\n */\n hoverCursor: 'pointer',\n\n /**\r\n * @description Font style of Ctx\r\n * @type {String}\r\n * @default fontStyle = 'normal'\r\n * @example fontStyle = 'normal'|'italic'|'oblique'\r\n */\n fontStyle: 'normal',\n\n /**\r\n * @description Font varient of Ctx\r\n * @type {String}\r\n * @default fontVarient = 'normal'\r\n * @example fontVarient = 'normal'|'small-caps'\r\n */\n fontVarient: 'normal',\n\n /**\r\n * @description Font weight of Ctx\r\n * @type {String|Number}\r\n * @default fontWeight = 'normal'\r\n * @example fontWeight = 'normal'|'bold'|'bolder'|'lighter'|Number\r\n */\n fontWeight: 'normal',\n\n /**\r\n * @description Font size of Ctx\r\n * @type {Number}\r\n * @default fontSize = 10\r\n */\n fontSize: 10,\n\n /**\r\n * @description Font family of Ctx\r\n * @type {String}\r\n * @default fontFamily = 'Arial'\r\n */\n fontFamily: 'Arial',\n\n /**\r\n * @description TextAlign of Ctx\r\n * @type {String}\r\n * @default textAlign = 'center'\r\n * @example textAlign = 'start'|'end'|'left'|'right'|'center'\r\n */\n textAlign: 'center',\n\n /**\r\n * @description TextBaseline of Ctx\r\n * @type {String}\r\n * @default textBaseline = 'middle'\r\n * @example textBaseline = 'top'|'bottom'|'middle'|'alphabetic'|'hanging'\r\n */\n textBaseline: 'middle',\n\n /**\r\n * @description The color used to create the gradient\r\n * @type {Array}\r\n * @default gradientColor = null\r\n * @example gradientColor = ['#000', '#111', '#222']\r\n */\n gradientColor: null,\n\n /**\r\n * @description Gradient type\r\n * @type {String}\r\n * @default gradientType = 'linear'\r\n * @example gradientType = 'linear' | 'radial'\r\n */\n gradientType: 'linear',\n\n /**\r\n * @description Gradient params\r\n * @type {Array}\r\n * @default gradientParams = null\r\n * @example gradientParams = [x0, y0, x1, y1] (Linear Gradient)\r\n * @example gradientParams = [x0, y0, r0, x1, y1, r1] (Radial Gradient)\r\n */\n gradientParams: null,\n\n /**\r\n * @description When to use gradients\r\n * @type {String}\r\n * @default gradientWith = 'stroke'\r\n * @example gradientWith = 'stroke' | 'fill'\r\n */\n gradientWith: 'stroke',\n\n /**\r\n * @description Gradient color stops\r\n * @type {String}\r\n * @default gradientStops = 'auto'\r\n * @example gradientStops = 'auto' | [0, .2, .3, 1]\r\n */\n gradientStops: 'auto',\n\n /**\r\n * @description Extended color that supports animation transition\r\n * @type {Array|Object}\r\n * @default colors = null\r\n * @example colors = ['#000', '#111', '#222', 'red' ]\r\n * @example colors = { a: '#000', b: '#111' }\r\n */\n colors: null\n };\n Object.assign(this, defaultStyle, style);\n};\n/**\r\n * @description Set colors to rgba value\r\n * @param {Object} style style config\r\n * @param {Boolean} reverse Whether to perform reverse operation\r\n * @return {Undefined} Void\r\n */\n\n\nexports[\"default\"] = Style;\n\nStyle.prototype.colorProcessor = function (style) {\n var reverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var processor = reverse ? _color.getColorFromRgbValue : _color.getRgbaValue;\n var colorProcessorKeys = ['fill', 'stroke', 'shadowColor'];\n var allKeys = Object.keys(style);\n var colorKeys = allKeys.filter(function (key) {\n return colorProcessorKeys.find(function (k) {\n return k === key;\n });\n });\n colorKeys.forEach(function (key) {\n return style[key] = processor(style[key]);\n });\n var gradientColor = style.gradientColor,\n colors = style.colors;\n if (gradientColor) style.gradientColor = gradientColor.map(function (c) {\n return processor(c);\n });\n\n if (colors) {\n var colorsKeys = Object.keys(colors);\n colorsKeys.forEach(function (key) {\n return colors[key] = processor(colors[key]);\n });\n }\n};\n/**\r\n * @description Init graph style\r\n * @param {Object} ctx Context of canvas\r\n * @return {Undefined} Void\r\n */\n\n\nStyle.prototype.initStyle = function (ctx) {\n initTransform(ctx, this);\n initGraphStyle(ctx, this);\n initGradient(ctx, this);\n};\n/**\r\n * @description Init canvas transform\r\n * @param {Object} ctx Context of canvas\r\n * @param {Style} style Instance of Style\r\n * @return {Undefined} Void\r\n */\n\n\nfunction initTransform(ctx, style) {\n ctx.save();\n var graphCenter = style.graphCenter,\n rotate = style.rotate,\n scale = style.scale,\n translate = style.translate;\n if (!(graphCenter instanceof Array)) return;\n ctx.translate.apply(ctx, (0, _toConsumableArray2[\"default\"])(graphCenter));\n if (rotate) ctx.rotate(rotate * Math.PI / 180);\n if (scale instanceof Array) ctx.scale.apply(ctx, (0, _toConsumableArray2[\"default\"])(scale));\n if (translate) ctx.translate.apply(ctx, (0, _toConsumableArray2[\"default\"])(translate));\n ctx.translate(-graphCenter[0], -graphCenter[1]);\n}\n\nvar autoSetStyleKeys = ['lineCap', 'lineJoin', 'lineDashOffset', 'shadowOffsetX', 'shadowOffsetY', 'lineWidth', 'textAlign', 'textBaseline'];\n/**\r\n * @description Set the style of canvas ctx\r\n * @param {Object} ctx Context of canvas\r\n * @param {Style} style Instance of Style\r\n * @return {Undefined} Void\r\n */\n\nfunction initGraphStyle(ctx, style) {\n var fill = style.fill,\n stroke = style.stroke,\n shadowColor = style.shadowColor,\n opacity = style.opacity;\n autoSetStyleKeys.forEach(function (key) {\n if (key || typeof key === 'number') ctx[key] = style[key];\n });\n fill = (0, _toConsumableArray2[\"default\"])(fill);\n stroke = (0, _toConsumableArray2[\"default\"])(stroke);\n shadowColor = (0, _toConsumableArray2[\"default\"])(shadowColor);\n fill[3] *= opacity;\n stroke[3] *= opacity;\n shadowColor[3] *= opacity;\n ctx.fillStyle = (0, _color.getColorFromRgbValue)(fill);\n ctx.strokeStyle = (0, _color.getColorFromRgbValue)(stroke);\n ctx.shadowColor = (0, _color.getColorFromRgbValue)(shadowColor);\n var lineDash = style.lineDash,\n shadowBlur = style.shadowBlur;\n\n if (lineDash) {\n lineDash = lineDash.map(function (v) {\n return v >= 0 ? v : 0;\n });\n ctx.setLineDash(lineDash);\n }\n\n if (typeof shadowBlur === 'number') ctx.shadowBlur = shadowBlur > 0 ? shadowBlur : 0.001;\n var fontStyle = style.fontStyle,\n fontVarient = style.fontVarient,\n fontWeight = style.fontWeight,\n fontSize = style.fontSize,\n fontFamily = style.fontFamily;\n ctx.font = fontStyle + ' ' + fontVarient + ' ' + fontWeight + ' ' + fontSize + 'px' + ' ' + fontFamily;\n}\n/**\r\n * @description Set the gradient color of canvas ctx\r\n * @param {Object} ctx Context of canvas\r\n * @param {Style} style Instance of Style\r\n * @return {Undefined} Void\r\n */\n\n\nfunction initGradient(ctx, style) {\n if (!gradientValidator(style)) return;\n var gradientColor = style.gradientColor,\n gradientParams = style.gradientParams,\n gradientType = style.gradientType,\n gradientWith = style.gradientWith,\n gradientStops = style.gradientStops,\n opacity = style.opacity;\n gradientColor = gradientColor.map(function (color) {\n var colorOpacity = color[3] * opacity;\n var clonedColor = (0, _toConsumableArray2[\"default\"])(color);\n clonedColor[3] = colorOpacity;\n return clonedColor;\n });\n gradientColor = gradientColor.map(function (c) {\n return (0, _color.getColorFromRgbValue)(c);\n });\n if (gradientStops === 'auto') gradientStops = getAutoColorStops(gradientColor);\n var gradient = ctx[\"create\".concat(gradientType.slice(0, 1).toUpperCase() + gradientType.slice(1), \"Gradient\")].apply(ctx, (0, _toConsumableArray2[\"default\"])(gradientParams));\n gradientStops.forEach(function (stop, i) {\n return gradient.addColorStop(stop, gradientColor[i]);\n });\n ctx[\"\".concat(gradientWith, \"Style\")] = gradient;\n}\n/**\r\n * @description Check if the gradient configuration is legal\r\n * @param {Style} style Instance of Style\r\n * @return {Boolean} Check Result\r\n */\n\n\nfunction gradientValidator(style) {\n var gradientColor = style.gradientColor,\n gradientParams = style.gradientParams,\n gradientType = style.gradientType,\n gradientWith = style.gradientWith,\n gradientStops = style.gradientStops;\n if (!gradientColor || !gradientParams) return false;\n\n if (gradientColor.length === 1) {\n console.warn('The gradient needs to provide at least two colors');\n return false;\n }\n\n if (gradientType !== 'linear' && gradientType !== 'radial') {\n console.warn('GradientType only supports linear or radial, current value is ' + gradientType);\n return false;\n }\n\n var gradientParamsLength = gradientParams.length;\n\n if (gradientType === 'linear' && gradientParamsLength !== 4 || gradientType === 'radial' && gradientParamsLength !== 6) {\n console.warn('The expected length of gradientParams is ' + (gradientType === 'linear' ? '4' : '6'));\n return false;\n }\n\n if (gradientWith !== 'fill' && gradientWith !== 'stroke') {\n console.warn('GradientWith only supports fill or stroke, current value is ' + gradientWith);\n return false;\n }\n\n if (gradientStops !== 'auto' && !(gradientStops instanceof Array)) {\n console.warn(\"gradientStops only supports 'auto' or Number Array ([0, .5, 1]), current value is \" + gradientStops);\n return false;\n }\n\n return true;\n}\n/**\r\n * @description Get a uniform gradient color stop\r\n * @param {Array} color Gradient color\r\n * @return {Array} Gradient color stop\r\n */\n\n\nfunction getAutoColorStops(color) {\n var stopGap = 1 / (color.length - 1);\n return color.map(function (foo, i) {\n return stopGap * i;\n });\n}\n/**\r\n * @description Restore canvas ctx transform\r\n * @param {Object} ctx Context of canvas\r\n * @return {Undefined} Void\r\n */\n\n\nStyle.prototype.restoreTransform = function (ctx) {\n ctx.restore();\n};\n/**\r\n * @description Update style data\r\n * @param {Object} change Changed data\r\n * @return {Undefined} Void\r\n */\n\n\nStyle.prototype.update = function (change) {\n this.colorProcessor(change);\n Object.assign(this, change);\n};\n/**\r\n * @description Get the current style configuration\r\n * @return {Object} Style configuration\r\n */\n\n\nStyle.prototype.getStyle = function () {\n var clonedStyle = (0, _util.deepClone)(this, true);\n this.colorProcessor(clonedStyle, true);\n return clonedStyle;\n};\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/c-render/lib/class/style.class.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/c-render/lib/config/graphs.js":
/*!***************************************************************!*\
!*** ./node_modules/@jiaminghi/c-render/lib/config/graphs.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.extendNewGraph = extendNewGraph;\nexports[\"default\"] = exports.text = exports.bezierCurve = exports.smoothline = exports.polyline = exports.regPolygon = exports.sector = exports.arc = exports.ring = exports.rect = exports.ellipse = exports.circle = void 0;\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _bezierCurve2 = _interopRequireDefault(__webpack_require__(/*! @jiaminghi/bezier-curve */ \"./node_modules/@jiaminghi/bezier-curve/lib/index.js\"));\n\nvar _util = __webpack_require__(/*! ../plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _canvas = __webpack_require__(/*! ../plugin/canvas */ \"./node_modules/@jiaminghi/c-render/lib/plugin/canvas.js\");\n\nvar polylineToBezierCurve = _bezierCurve2[\"default\"].polylineToBezierCurve,\n bezierCurveToPolyline = _bezierCurve2[\"default\"].bezierCurveToPolyline;\nvar circle = {\n shape: {\n rx: 0,\n ry: 0,\n r: 0\n },\n validator: function validator(_ref) {\n var shape = _ref.shape;\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r;\n\n if (typeof rx !== 'number' || typeof ry !== 'number' || typeof r !== 'number') {\n console.error('Circle shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref2, _ref3) {\n var ctx = _ref2.ctx;\n var shape = _ref3.shape;\n ctx.beginPath();\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r;\n ctx.arc(rx, ry, r > 0 ? r : 0.01, 0, Math.PI * 2);\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n },\n hoverCheck: function hoverCheck(position, _ref4) {\n var shape = _ref4.shape;\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r;\n return (0, _util.checkPointIsInCircle)(position, rx, ry, r);\n },\n setGraphCenter: function setGraphCenter(e, _ref5) {\n var shape = _ref5.shape,\n style = _ref5.style;\n var rx = shape.rx,\n ry = shape.ry;\n style.graphCenter = [rx, ry];\n },\n move: function move(_ref6, _ref7) {\n var movementX = _ref6.movementX,\n movementY = _ref6.movementY;\n var shape = _ref7.shape;\n this.attr('shape', {\n rx: shape.rx + movementX,\n ry: shape.ry + movementY\n });\n }\n};\nexports.circle = circle;\nvar ellipse = {\n shape: {\n rx: 0,\n ry: 0,\n hr: 0,\n vr: 0\n },\n validator: function validator(_ref8) {\n var shape = _ref8.shape;\n var rx = shape.rx,\n ry = shape.ry,\n hr = shape.hr,\n vr = shape.vr;\n\n if (typeof rx !== 'number' || typeof ry !== 'number' || typeof hr !== 'number' || typeof vr !== 'number') {\n console.error('Ellipse shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref9, _ref10) {\n var ctx = _ref9.ctx;\n var shape = _ref10.shape;\n ctx.beginPath();\n var rx = shape.rx,\n ry = shape.ry,\n hr = shape.hr,\n vr = shape.vr;\n ctx.ellipse(rx, ry, hr > 0 ? hr : 0.01, vr > 0 ? vr : 0.01, 0, 0, Math.PI * 2);\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n },\n hoverCheck: function hoverCheck(position, _ref11) {\n var shape = _ref11.shape;\n var rx = shape.rx,\n ry = shape.ry,\n hr = shape.hr,\n vr = shape.vr;\n var a = Math.max(hr, vr);\n var b = Math.min(hr, vr);\n var c = Math.sqrt(a * a - b * b);\n var leftFocusPoint = [rx - c, ry];\n var rightFocusPoint = [rx + c, ry];\n var distance = (0, _util.getTwoPointDistance)(position, leftFocusPoint) + (0, _util.getTwoPointDistance)(position, rightFocusPoint);\n return distance <= 2 * a;\n },\n setGraphCenter: function setGraphCenter(e, _ref12) {\n var shape = _ref12.shape,\n style = _ref12.style;\n var rx = shape.rx,\n ry = shape.ry;\n style.graphCenter = [rx, ry];\n },\n move: function move(_ref13, _ref14) {\n var movementX = _ref13.movementX,\n movementY = _ref13.movementY;\n var shape = _ref14.shape;\n this.attr('shape', {\n rx: shape.rx + movementX,\n ry: shape.ry + movementY\n });\n }\n};\nexports.ellipse = ellipse;\nvar rect = {\n shape: {\n x: 0,\n y: 0,\n w: 0,\n h: 0\n },\n validator: function validator(_ref15) {\n var shape = _ref15.shape;\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n\n if (typeof x !== 'number' || typeof y !== 'number' || typeof w !== 'number' || typeof h !== 'number') {\n console.error('Rect shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref16, _ref17) {\n var ctx = _ref16.ctx;\n var shape = _ref17.shape;\n ctx.beginPath();\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n ctx.rect(x, y, w, h);\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n },\n hoverCheck: function hoverCheck(position, _ref18) {\n var shape = _ref18.shape;\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n return (0, _util.checkPointIsInRect)(position, x, y, w, h);\n },\n setGraphCenter: function setGraphCenter(e, _ref19) {\n var shape = _ref19.shape,\n style = _ref19.style;\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n style.graphCenter = [x + w / 2, y + h / 2];\n },\n move: function move(_ref20, _ref21) {\n var movementX = _ref20.movementX,\n movementY = _ref20.movementY;\n var shape = _ref21.shape;\n this.attr('shape', {\n x: shape.x + movementX,\n y: shape.y + movementY\n });\n }\n};\nexports.rect = rect;\nvar ring = {\n shape: {\n rx: 0,\n ry: 0,\n r: 0\n },\n validator: function validator(_ref22) {\n var shape = _ref22.shape;\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r;\n\n if (typeof rx !== 'number' || typeof ry !== 'number' || typeof r !== 'number') {\n console.error('Ring shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref23, _ref24) {\n var ctx = _ref23.ctx;\n var shape = _ref24.shape;\n ctx.beginPath();\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r;\n ctx.arc(rx, ry, r > 0 ? r : 0.01, 0, Math.PI * 2);\n ctx.stroke();\n ctx.closePath();\n },\n hoverCheck: function hoverCheck(position, _ref25) {\n var shape = _ref25.shape,\n style = _ref25.style;\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r;\n var lineWidth = style.lineWidth;\n var halfLineWidth = lineWidth / 2;\n var minDistance = r - halfLineWidth;\n var maxDistance = r + halfLineWidth;\n var distance = (0, _util.getTwoPointDistance)(position, [rx, ry]);\n return distance >= minDistance && distance <= maxDistance;\n },\n setGraphCenter: function setGraphCenter(e, _ref26) {\n var shape = _ref26.shape,\n style = _ref26.style;\n var rx = shape.rx,\n ry = shape.ry;\n style.graphCenter = [rx, ry];\n },\n move: function move(_ref27, _ref28) {\n var movementX = _ref27.movementX,\n movementY = _ref27.movementY;\n var shape = _ref28.shape;\n this.attr('shape', {\n rx: shape.rx + movementX,\n ry: shape.ry + movementY\n });\n }\n};\nexports.ring = ring;\nvar arc = {\n shape: {\n rx: 0,\n ry: 0,\n r: 0,\n startAngle: 0,\n endAngle: 0,\n clockWise: true\n },\n validator: function validator(_ref29) {\n var shape = _ref29.shape;\n var keys = ['rx', 'ry', 'r', 'startAngle', 'endAngle'];\n\n if (keys.find(function (key) {\n return typeof shape[key] !== 'number';\n })) {\n console.error('Arc shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref30, _ref31) {\n var ctx = _ref30.ctx;\n var shape = _ref31.shape;\n ctx.beginPath();\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r,\n startAngle = shape.startAngle,\n endAngle = shape.endAngle,\n clockWise = shape.clockWise;\n ctx.arc(rx, ry, r > 0 ? r : 0.001, startAngle, endAngle, !clockWise);\n ctx.stroke();\n ctx.closePath();\n },\n hoverCheck: function hoverCheck(position, _ref32) {\n var shape = _ref32.shape,\n style = _ref32.style;\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r,\n startAngle = shape.startAngle,\n endAngle = shape.endAngle,\n clockWise = shape.clockWise;\n var lineWidth = style.lineWidth;\n var halfLineWidth = lineWidth / 2;\n var insideRadius = r - halfLineWidth;\n var outsideRadius = r + halfLineWidth;\n return !(0, _util.checkPointIsInSector)(position, rx, ry, insideRadius, startAngle, endAngle, clockWise) && (0, _util.checkPointIsInSector)(position, rx, ry, outsideRadius, startAngle, endAngle, clockWise);\n },\n setGraphCenter: function setGraphCenter(e, _ref33) {\n var shape = _ref33.shape,\n style = _ref33.style;\n var rx = shape.rx,\n ry = shape.ry;\n style.graphCenter = [rx, ry];\n },\n move: function move(_ref34, _ref35) {\n var movementX = _ref34.movementX,\n movementY = _ref34.movementY;\n var shape = _ref35.shape;\n this.attr('shape', {\n rx: shape.rx + movementX,\n ry: shape.ry + movementY\n });\n }\n};\nexports.arc = arc;\nvar sector = {\n shape: {\n rx: 0,\n ry: 0,\n r: 0,\n startAngle: 0,\n endAngle: 0,\n clockWise: true\n },\n validator: function validator(_ref36) {\n var shape = _ref36.shape;\n var keys = ['rx', 'ry', 'r', 'startAngle', 'endAngle'];\n\n if (keys.find(function (key) {\n return typeof shape[key] !== 'number';\n })) {\n console.error('Sector shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref37, _ref38) {\n var ctx = _ref37.ctx;\n var shape = _ref38.shape;\n ctx.beginPath();\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r,\n startAngle = shape.startAngle,\n endAngle = shape.endAngle,\n clockWise = shape.clockWise;\n ctx.arc(rx, ry, r > 0 ? r : 0.01, startAngle, endAngle, !clockWise);\n ctx.lineTo(rx, ry);\n ctx.closePath();\n ctx.stroke();\n ctx.fill();\n },\n hoverCheck: function hoverCheck(position, _ref39) {\n var shape = _ref39.shape;\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r,\n startAngle = shape.startAngle,\n endAngle = shape.endAngle,\n clockWise = shape.clockWise;\n return (0, _util.checkPointIsInSector)(position, rx, ry, r, startAngle, endAngle, clockWise);\n },\n setGraphCenter: function setGraphCenter(e, _ref40) {\n var shape = _ref40.shape,\n style = _ref40.style;\n var rx = shape.rx,\n ry = shape.ry;\n style.graphCenter = [rx, ry];\n },\n move: function move(_ref41, _ref42) {\n var movementX = _ref41.movementX,\n movementY = _ref41.movementY;\n var shape = _ref42.shape;\n var rx = shape.rx,\n ry = shape.ry;\n this.attr('shape', {\n rx: rx + movementX,\n ry: ry + movementY\n });\n }\n};\nexports.sector = sector;\nvar regPolygon = {\n shape: {\n rx: 0,\n ry: 0,\n r: 0,\n side: 0\n },\n validator: function validator(_ref43) {\n var shape = _ref43.shape;\n var side = shape.side;\n var keys = ['rx', 'ry', 'r', 'side'];\n\n if (keys.find(function (key) {\n return typeof shape[key] !== 'number';\n })) {\n console.error('RegPolygon shape configuration is abnormal!');\n return false;\n }\n\n if (side < 3) {\n console.error('RegPolygon at least trigon!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref44, _ref45) {\n var ctx = _ref44.ctx;\n var shape = _ref45.shape,\n cache = _ref45.cache;\n ctx.beginPath();\n var rx = shape.rx,\n ry = shape.ry,\n r = shape.r,\n side = shape.side;\n\n if (!cache.points || cache.rx !== rx || cache.ry !== ry || cache.r !== r || cache.side !== side) {\n var _points = (0, _util.getRegularPolygonPoints)(rx, ry, r, side);\n\n Object.assign(cache, {\n points: _points,\n rx: rx,\n ry: ry,\n r: r,\n side: side\n });\n }\n\n var points = cache.points;\n (0, _canvas.drawPolylinePath)(ctx, points);\n ctx.closePath();\n ctx.stroke();\n ctx.fill();\n },\n hoverCheck: function hoverCheck(position, _ref46) {\n var cache = _ref46.cache;\n var points = cache.points;\n return (0, _util.checkPointIsInPolygon)(position, points);\n },\n setGraphCenter: function setGraphCenter(e, _ref47) {\n var shape = _ref47.shape,\n style = _ref47.style;\n var rx = shape.rx,\n ry = shape.ry;\n style.graphCenter = [rx, ry];\n },\n move: function move(_ref48, _ref49) {\n var movementX = _ref48.movementX,\n movementY = _ref48.movementY;\n var shape = _ref49.shape,\n cache = _ref49.cache;\n var rx = shape.rx,\n ry = shape.ry;\n cache.rx += movementX;\n cache.ry += movementY;\n this.attr('shape', {\n rx: rx + movementX,\n ry: ry + movementY\n });\n cache.points = cache.points.map(function (_ref50) {\n var _ref51 = (0, _slicedToArray2[\"default\"])(_ref50, 2),\n x = _ref51[0],\n y = _ref51[1];\n\n return [x + movementX, y + movementY];\n });\n }\n};\nexports.regPolygon = regPolygon;\nvar polyline = {\n shape: {\n points: [],\n close: false\n },\n validator: function validator(_ref52) {\n var shape = _ref52.shape;\n var points = shape.points;\n\n if (!(points instanceof Array)) {\n console.error('Polyline points should be an array!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref53, _ref54) {\n var ctx = _ref53.ctx;\n var shape = _ref54.shape,\n lineWidth = _ref54.style.lineWidth;\n ctx.beginPath();\n var points = shape.points,\n close = shape.close;\n if (lineWidth === 1) points = (0, _util.eliminateBlur)(points);\n (0, _canvas.drawPolylinePath)(ctx, points);\n\n if (close) {\n ctx.closePath();\n ctx.fill();\n ctx.stroke();\n } else {\n ctx.stroke();\n }\n },\n hoverCheck: function hoverCheck(position, _ref55) {\n var shape = _ref55.shape,\n style = _ref55.style;\n var points = shape.points,\n close = shape.close;\n var lineWidth = style.lineWidth;\n\n if (close) {\n return (0, _util.checkPointIsInPolygon)(position, points);\n } else {\n return (0, _util.checkPointIsNearPolyline)(position, points, lineWidth);\n }\n },\n setGraphCenter: function setGraphCenter(e, _ref56) {\n var shape = _ref56.shape,\n style = _ref56.style;\n var points = shape.points;\n style.graphCenter = points[0];\n },\n move: function move(_ref57, _ref58) {\n var movementX = _ref57.movementX,\n movementY = _ref57.movementY;\n var shape = _ref58.shape;\n var points = shape.points;\n var moveAfterPoints = points.map(function (_ref59) {\n var _ref60 = (0, _slicedToArray2[\"default\"])(_ref59, 2),\n x = _ref60[0],\n y = _ref60[1];\n\n return [x + movementX, y + movementY];\n });\n this.attr('shape', {\n points: moveAfterPoints\n });\n }\n};\nexports.polyline = polyline;\nvar smoothline = {\n shape: {\n points: [],\n close: false\n },\n validator: function validator(_ref61) {\n var shape = _ref61.shape;\n var points = shape.points;\n\n if (!(points instanceof Array)) {\n console.error('Smoothline points should be an array!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref62, _ref63) {\n var ctx = _ref62.ctx;\n var shape = _ref63.shape,\n cache = _ref63.cache;\n var points = shape.points,\n close = shape.close;\n\n if (!cache.points || cache.points.toString() !== points.toString()) {\n var _bezierCurve = polylineToBezierCurve(points, close);\n\n var hoverPoints = bezierCurveToPolyline(_bezierCurve);\n Object.assign(cache, {\n points: (0, _util.deepClone)(points, true),\n bezierCurve: _bezierCurve,\n hoverPoints: hoverPoints\n });\n }\n\n var bezierCurve = cache.bezierCurve;\n ctx.beginPath();\n (0, _canvas.drawBezierCurvePath)(ctx, bezierCurve.slice(1), bezierCurve[0]);\n\n if (close) {\n ctx.closePath();\n ctx.fill();\n ctx.stroke();\n } else {\n ctx.stroke();\n }\n },\n hoverCheck: function hoverCheck(position, _ref64) {\n var cache = _ref64.cache,\n shape = _ref64.shape,\n style = _ref64.style;\n var hoverPoints = cache.hoverPoints;\n var close = shape.close;\n var lineWidth = style.lineWidth;\n\n if (close) {\n return (0, _util.checkPointIsInPolygon)(position, hoverPoints);\n } else {\n return (0, _util.checkPointIsNearPolyline)(position, hoverPoints, lineWidth);\n }\n },\n setGraphCenter: function setGraphCenter(e, _ref65) {\n var shape = _ref65.shape,\n style = _ref65.style;\n var points = shape.points;\n style.graphCenter = points[0];\n },\n move: function move(_ref66, _ref67) {\n var movementX = _ref66.movementX,\n movementY = _ref66.movementY;\n var shape = _ref67.shape,\n cache = _ref67.cache;\n var points = shape.points;\n var moveAfterPoints = points.map(function (_ref68) {\n var _ref69 = (0, _slicedToArray2[\"default\"])(_ref68, 2),\n x = _ref69[0],\n y = _ref69[1];\n\n return [x + movementX, y + movementY];\n });\n cache.points = moveAfterPoints;\n\n var _cache$bezierCurve$ = (0, _slicedToArray2[\"default\"])(cache.bezierCurve[0], 2),\n fx = _cache$bezierCurve$[0],\n fy = _cache$bezierCurve$[1];\n\n var curves = cache.bezierCurve.slice(1);\n cache.bezierCurve = [[fx + movementX, fy + movementY]].concat((0, _toConsumableArray2[\"default\"])(curves.map(function (curve) {\n return curve.map(function (_ref70) {\n var _ref71 = (0, _slicedToArray2[\"default\"])(_ref70, 2),\n x = _ref71[0],\n y = _ref71[1];\n\n return [x + movementX, y + movementY];\n });\n })));\n cache.hoverPoints = cache.hoverPoints.map(function (_ref72) {\n var _ref73 = (0, _slicedToArray2[\"default\"])(_ref72, 2),\n x = _ref73[0],\n y = _ref73[1];\n\n return [x + movementX, y + movementY];\n });\n this.attr('shape', {\n points: moveAfterPoints\n });\n }\n};\nexports.smoothline = smoothline;\nvar bezierCurve = {\n shape: {\n points: [],\n close: false\n },\n validator: function validator(_ref74) {\n var shape = _ref74.shape;\n var points = shape.points;\n\n if (!(points instanceof Array)) {\n console.error('BezierCurve points should be an array!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref75, _ref76) {\n var ctx = _ref75.ctx;\n var shape = _ref76.shape,\n cache = _ref76.cache;\n var points = shape.points,\n close = shape.close;\n\n if (!cache.points || cache.points.toString() !== points.toString()) {\n var hoverPoints = bezierCurveToPolyline(points, 20);\n Object.assign(cache, {\n points: (0, _util.deepClone)(points, true),\n hoverPoints: hoverPoints\n });\n }\n\n ctx.beginPath();\n (0, _canvas.drawBezierCurvePath)(ctx, points.slice(1), points[0]);\n\n if (close) {\n ctx.closePath();\n ctx.fill();\n ctx.stroke();\n } else {\n ctx.stroke();\n }\n },\n hoverCheck: function hoverCheck(position, _ref77) {\n var cache = _ref77.cache,\n shape = _ref77.shape,\n style = _ref77.style;\n var hoverPoints = cache.hoverPoints;\n var close = shape.close;\n var lineWidth = style.lineWidth;\n\n if (close) {\n return (0, _util.checkPointIsInPolygon)(position, hoverPoints);\n } else {\n return (0, _util.checkPointIsNearPolyline)(position, hoverPoints, lineWidth);\n }\n },\n setGraphCenter: function setGraphCenter(e, _ref78) {\n var shape = _ref78.shape,\n style = _ref78.style;\n var points = shape.points;\n style.graphCenter = points[0];\n },\n move: function move(_ref79, _ref80) {\n var movementX = _ref79.movementX,\n movementY = _ref79.movementY;\n var shape = _ref80.shape,\n cache = _ref80.cache;\n var points = shape.points;\n\n var _points$ = (0, _slicedToArray2[\"default\"])(points[0], 2),\n fx = _points$[0],\n fy = _points$[1];\n\n var curves = points.slice(1);\n var bezierCurve = [[fx + movementX, fy + movementY]].concat((0, _toConsumableArray2[\"default\"])(curves.map(function (curve) {\n return curve.map(function (_ref81) {\n var _ref82 = (0, _slicedToArray2[\"default\"])(_ref81, 2),\n x = _ref82[0],\n y = _ref82[1];\n\n return [x + movementX, y + movementY];\n });\n })));\n cache.points = bezierCurve;\n cache.hoverPoints = cache.hoverPoints.map(function (_ref83) {\n var _ref84 = (0, _slicedToArray2[\"default\"])(_ref83, 2),\n x = _ref84[0],\n y = _ref84[1];\n\n return [x + movementX, y + movementY];\n });\n this.attr('shape', {\n points: bezierCurve\n });\n }\n};\nexports.bezierCurve = bezierCurve;\nvar text = {\n shape: {\n content: '',\n position: [],\n maxWidth: undefined,\n rowGap: 0\n },\n validator: function validator(_ref85) {\n var shape = _ref85.shape;\n var content = shape.content,\n position = shape.position,\n rowGap = shape.rowGap;\n\n if (typeof content !== 'string') {\n console.error('Text content should be a string!');\n return false;\n }\n\n if (!(position instanceof Array)) {\n console.error('Text position should be an array!');\n return false;\n }\n\n if (typeof rowGap !== 'number') {\n console.error('Text rowGap should be a number!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref86, _ref87) {\n var ctx = _ref86.ctx;\n var shape = _ref87.shape;\n var content = shape.content,\n position = shape.position,\n maxWidth = shape.maxWidth,\n rowGap = shape.rowGap;\n var textBaseline = ctx.textBaseline,\n font = ctx.font;\n var fontSize = parseInt(font.replace(/\\D/g, ''));\n\n var _position = position,\n _position2 = (0, _slicedToArray2[\"default\"])(_position, 2),\n x = _position2[0],\n y = _position2[1];\n\n content = content.split('\\n');\n var rowNum = content.length;\n var lineHeight = fontSize + rowGap;\n var allHeight = rowNum * lineHeight - rowGap;\n var offset = 0;\n\n if (textBaseline === 'middle') {\n offset = allHeight / 2;\n y += fontSize / 2;\n }\n\n if (textBaseline === 'bottom') {\n offset = allHeight;\n y += fontSize;\n }\n\n position = new Array(rowNum).fill(0).map(function (foo, i) {\n return [x, y + i * lineHeight - offset];\n });\n ctx.beginPath();\n content.forEach(function (text, i) {\n ctx.fillText.apply(ctx, [text].concat((0, _toConsumableArray2[\"default\"])(position[i]), [maxWidth]));\n ctx.strokeText.apply(ctx, [text].concat((0, _toConsumableArray2[\"default\"])(position[i]), [maxWidth]));\n });\n ctx.closePath();\n },\n hoverCheck: function hoverCheck(position, _ref88) {\n var shape = _ref88.shape,\n style = _ref88.style;\n return false;\n },\n setGraphCenter: function setGraphCenter(e, _ref89) {\n var shape = _ref89.shape,\n style = _ref89.style;\n var position = shape.position;\n style.graphCenter = (0, _toConsumableArray2[\"default\"])(position);\n },\n move: function move(_ref90, _ref91) {\n var movementX = _ref90.movementX,\n movementY = _ref90.movementY;\n var shape = _ref91.shape;\n\n var _shape$position = (0, _slicedToArray2[\"default\"])(shape.position, 2),\n x = _shape$position[0],\n y = _shape$position[1];\n\n this.attr('shape', {\n position: [x + movementX, y + movementY]\n });\n }\n};\nexports.text = text;\nvar graphs = new Map([['circle', circle], ['ellipse', ellipse], ['rect', rect], ['ring', ring], ['arc', arc], ['sector', sector], ['regPolygon', regPolygon], ['polyline', polyline], ['smoothline', smoothline], ['bezierCurve', bezierCurve], ['text', text]]);\nvar _default = graphs;\n/**\r\n * @description Extend new graph\r\n * @param {String} name Name of Graph\r\n * @param {Object} config Configuration of Graph\r\n * @return {Undefined} Void\r\n */\n\nexports[\"default\"] = _default;\n\nfunction extendNewGraph(name, config) {\n if (!name || !config) {\n console.error('ExtendNewGraph Missing Parameters!');\n return;\n }\n\n if (!config.shape) {\n console.error('Required attribute of shape to extendNewGraph!');\n return;\n }\n\n if (!config.validator) {\n console.error('Required function of validator to extendNewGraph!');\n return;\n }\n\n if (!config.draw) {\n console.error('Required function of draw to extendNewGraph!');\n return;\n }\n\n graphs.set(name, config);\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/c-render/lib/config/graphs.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/c-render/lib/index.js":
/*!*******************************************************!*\
!*** ./node_modules/@jiaminghi/c-render/lib/index.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"CRender\", {\n enumerable: true,\n get: function get() {\n return _crender[\"default\"];\n }\n});\nObject.defineProperty(exports, \"extendNewGraph\", {\n enumerable: true,\n get: function get() {\n return _graphs.extendNewGraph;\n }\n});\nexports[\"default\"] = void 0;\n\nvar _crender = _interopRequireDefault(__webpack_require__(/*! ./class/crender.class */ \"./node_modules/@jiaminghi/c-render/lib/class/crender.class.js\"));\n\nvar _graphs = __webpack_require__(/*! ./config/graphs */ \"./node_modules/@jiaminghi/c-render/lib/config/graphs.js\");\n\nvar _default = _crender[\"default\"];\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/c-render/lib/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/c-render/lib/plugin/canvas.js":
/*!***************************************************************!*\
!*** ./node_modules/@jiaminghi/c-render/lib/plugin/canvas.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.drawPolylinePath = drawPolylinePath;\nexports.drawBezierCurvePath = drawBezierCurvePath;\nexports[\"default\"] = void 0;\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\n/**\r\n * @description Draw a polyline path\r\n * @param {Object} ctx Canvas 2d context\r\n * @param {Array} points The points that makes up a polyline\r\n * @param {Boolean} beginPath Whether to execute beginPath\r\n * @param {Boolean} closePath Whether to execute closePath\r\n * @return {Undefined} Void\r\n */\nfunction drawPolylinePath(ctx, points) {\n var beginPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var closePath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (!ctx || points.length < 2) return false;\n if (beginPath) ctx.beginPath();\n points.forEach(function (point, i) {\n return point && (i === 0 ? ctx.moveTo.apply(ctx, (0, _toConsumableArray2[\"default\"])(point)) : ctx.lineTo.apply(ctx, (0, _toConsumableArray2[\"default\"])(point)));\n });\n if (closePath) ctx.closePath();\n}\n/**\r\n * @description Draw a bezier curve path\r\n * @param {Object} ctx Canvas 2d context\r\n * @param {Array} points The points that makes up a bezier curve\r\n * @param {Array} moveTo The point need to excute moveTo\r\n * @param {Boolean} beginPath Whether to execute beginPath\r\n * @param {Boolean} closePath Whether to execute closePath\r\n * @return {Undefined} Void\r\n */\n\n\nfunction drawBezierCurvePath(ctx, points) {\n var moveTo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var beginPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var closePath = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (!ctx || !points) return false;\n if (beginPath) ctx.beginPath();\n if (moveTo) ctx.moveTo.apply(ctx, (0, _toConsumableArray2[\"default\"])(moveTo));\n points.forEach(function (item) {\n return item && ctx.bezierCurveTo.apply(ctx, (0, _toConsumableArray2[\"default\"])(item[0]).concat((0, _toConsumableArray2[\"default\"])(item[1]), (0, _toConsumableArray2[\"default\"])(item[2])));\n });\n if (closePath) ctx.closePath();\n}\n\nvar _default = {\n drawPolylinePath: drawPolylinePath,\n drawBezierCurvePath: drawBezierCurvePath\n};\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/c-render/lib/plugin/canvas.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/c-render/lib/plugin/util.js":
/*!*************************************************************!*\
!*** ./node_modules/@jiaminghi/c-render/lib/plugin/util.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.deepClone = deepClone;\nexports.eliminateBlur = eliminateBlur;\nexports.checkPointIsInCircle = checkPointIsInCircle;\nexports.getTwoPointDistance = getTwoPointDistance;\nexports.checkPointIsInPolygon = checkPointIsInPolygon;\nexports.checkPointIsInSector = checkPointIsInSector;\nexports.checkPointIsNearPolyline = checkPointIsNearPolyline;\nexports.checkPointIsInRect = checkPointIsInRect;\nexports.getRotatePointPos = getRotatePointPos;\nexports.getScalePointPos = getScalePointPos;\nexports.getTranslatePointPos = getTranslatePointPos;\nexports.getDistanceBetweenPointAndLine = getDistanceBetweenPointAndLine;\nexports.getCircleRadianPoint = getCircleRadianPoint;\nexports.getRegularPolygonPoints = getRegularPolygonPoints;\nexports[\"default\"] = void 0;\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar abs = Math.abs,\n sqrt = Math.sqrt,\n sin = Math.sin,\n cos = Math.cos,\n max = Math.max,\n min = Math.min,\n PI = Math.PI;\n/**\r\n * @description Clone an object or array\r\n * @param {Object|Array} object Cloned object\r\n * @param {Boolean} recursion Whether to use recursive cloning\r\n * @return {Object|Array} Clone object\r\n */\n\nfunction deepClone(object) {\n var recursion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!object) return object;\n var parse = JSON.parse,\n stringify = JSON.stringify;\n if (!recursion) return parse(stringify(object));\n var clonedObj = object instanceof Array ? [] : {};\n\n if (object && (0, _typeof2[\"default\"])(object) === 'object') {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n if (object[key] && (0, _typeof2[\"default\"])(object[key]) === 'object') {\n clonedObj[key] = deepClone(object[key], true);\n } else {\n clonedObj[key] = object[key];\n }\n }\n }\n }\n\n return clonedObj;\n}\n/**\r\n * @description Eliminate line blur due to 1px line width\r\n * @param {Array} points Line points\r\n * @return {Array} Line points after processed\r\n */\n\n\nfunction eliminateBlur(points) {\n return points.map(function (_ref) {\n var _ref2 = (0, _slicedToArray2[\"default\"])(_ref, 2),\n x = _ref2[0],\n y = _ref2[1];\n\n return [parseInt(x) + 0.5, parseInt(y) + 0.5];\n });\n}\n/**\r\n * @description Check if the point is inside the circle\r\n * @param {Array} point Postion of point\r\n * @param {Number} rx Circle x coordinate\r\n * @param {Number} ry Circle y coordinate\r\n * @param {Number} r Circle radius\r\n * @return {Boolean} Result of check\r\n */\n\n\nfunction checkPointIsInCircle(point, rx, ry, r) {\n return getTwoPointDistance(point, [rx, ry]) <= r;\n}\n/**\r\n * @description Get the distance between two points\r\n * @param {Array} point1 point1\r\n * @param {Array} point2 point2\r\n * @return {Number} Distance between two points\r\n */\n\n\nfunction getTwoPointDistance(_ref3, _ref4) {\n var _ref5 = (0, _slicedToArray2[\"default\"])(_ref3, 2),\n xa = _ref5[0],\n ya = _ref5[1];\n\n var _ref6 = (0, _slicedToArray2[\"default\"])(_ref4, 2),\n xb = _ref6[0],\n yb = _ref6[1];\n\n var minusX = abs(xa - xb);\n var minusY = abs(ya - yb);\n return sqrt(minusX * minusX + minusY * minusY);\n}\n/**\r\n * @description Check if the point is inside the polygon\r\n * @param {Array} point Postion of point\r\n * @param {Array} points The points that makes up a polyline\r\n * @return {Boolean} Result of check\r\n */\n\n\nfunction checkPointIsInPolygon(point, polygon) {\n var counter = 0;\n\n var _point = (0, _slicedToArray2[\"default\"])(point, 2),\n x = _point[0],\n y = _point[1];\n\n var pointNum = polygon.length;\n\n for (var i = 1, p1 = polygon[0]; i <= pointNum; i++) {\n var p2 = polygon[i % pointNum];\n\n if (x > min(p1[0], p2[0]) && x <= max(p1[0], p2[0])) {\n if (y <= max(p1[1], p2[1])) {\n if (p1[0] !== p2[0]) {\n var xinters = (x - p1[0]) * (p2[1] - p1[1]) / (p2[0] - p1[0]) + p1[1];\n\n if (p1[1] === p2[1] || y <= xinters) {\n counter++;\n }\n }\n }\n }\n\n p1 = p2;\n }\n\n return counter % 2 === 1;\n}\n/**\r\n * @description Check if the point is inside the sector\r\n * @param {Array} point Postion of point\r\n * @param {Number} rx Sector x coordinate\r\n * @param {Number} ry Sector y coordinate\r\n * @param {Number} r Sector radius\r\n * @param {Number} startAngle Sector start angle\r\n * @param {Number} endAngle Sector end angle\r\n * @param {Boolean} clockWise Whether the sector angle is clockwise\r\n * @return {Boolean} Result of check\r\n */\n\n\nfunction checkPointIsInSector(point, rx, ry, r, startAngle, endAngle, clockWise) {\n if (!point) return false;\n if (getTwoPointDistance(point, [rx, ry]) > r) return false;\n\n if (!clockWise) {\n var _deepClone = deepClone([endAngle, startAngle]);\n\n var _deepClone2 = (0, _slicedToArray2[\"default\"])(_deepClone, 2);\n\n startAngle = _deepClone2[0];\n endAngle = _deepClone2[1];\n }\n\n var reverseBE = startAngle > endAngle;\n\n if (reverseBE) {\n var _ref7 = [endAngle, startAngle];\n startAngle = _ref7[0];\n endAngle = _ref7[1];\n }\n\n var minus = endAngle - startAngle;\n if (minus >= PI * 2) return true;\n\n var _point2 = (0, _slicedToArray2[\"default\"])(point, 2),\n x = _point2[0],\n y = _point2[1];\n\n var _getCircleRadianPoint = getCircleRadianPoint(rx, ry, r, startAngle),\n _getCircleRadianPoint2 = (0, _slicedToArray2[\"default\"])(_getCircleRadianPoint, 2),\n bx = _getCircleRadianPoint2[0],\n by = _getCircleRadianPoint2[1];\n\n var _getCircleRadianPoint3 = getCircleRadianPoint(rx, ry, r, endAngle),\n _getCircleRadianPoint4 = (0, _slicedToArray2[\"default\"])(_getCircleRadianPoint3, 2),\n ex = _getCircleRadianPoint4[0],\n ey = _getCircleRadianPoint4[1];\n\n var vPoint = [x - rx, y - ry];\n var vBArm = [bx - rx, by - ry];\n var vEArm = [ex - rx, ey - ry];\n var reverse = minus > PI;\n\n if (reverse) {\n var _deepClone3 = deepClone([vEArm, vBArm]);\n\n var _deepClone4 = (0, _slicedToArray2[\"default\"])(_deepClone3, 2);\n\n vBArm = _deepClone4[0];\n vEArm = _deepClone4[1];\n }\n\n var inSector = isClockWise(vBArm, vPoint) && !isClockWise(vEArm, vPoint);\n if (reverse) inSector = !inSector;\n if (reverseBE) inSector = !inSector;\n return inSector;\n}\n/**\r\n * @description Determine if the point is in the clockwise direction of the vector\r\n * @param {Array} vArm Vector\r\n * @param {Array} vPoint Point\r\n * @return {Boolean} Result of check\r\n */\n\n\nfunction isClockWise(vArm, vPoint) {\n var _vArm = (0, _slicedToArray2[\"default\"])(vArm, 2),\n ax = _vArm[0],\n ay = _vArm[1];\n\n var _vPoint = (0, _slicedToArray2[\"default\"])(vPoint, 2),\n px = _vPoint[0],\n py = _vPoint[1];\n\n return -ay * px + ax * py > 0;\n}\n/**\r\n * @description Check if the point is inside the polyline\r\n * @param {Array} point Postion of point\r\n * @param {Array} polyline The points that makes up a polyline\r\n * @param {Number} lineWidth Polyline linewidth\r\n * @return {Boolean} Result of check\r\n */\n\n\nfunction checkPointIsNearPolyline(point, polyline, lineWidth) {\n var halfLineWidth = lineWidth / 2;\n var moveUpPolyline = polyline.map(function (_ref8) {\n var _ref9 = (0, _slicedToArray2[\"default\"])(_ref8, 2),\n x = _ref9[0],\n y = _ref9[1];\n\n return [x, y - halfLineWidth];\n });\n var moveDownPolyline = polyline.map(function (_ref10) {\n var _ref11 = (0, _slicedToArray2[\"default\"])(_ref10, 2),\n x = _ref11[0],\n y = _ref11[1];\n\n return [x, y + halfLineWidth];\n });\n var polygon = [].concat((0, _toConsumableArray2[\"default\"])(moveUpPolyline), (0, _toConsumableArray2[\"default\"])(moveDownPolyline.reverse()));\n return checkPointIsInPolygon(point, polygon);\n}\n/**\r\n * @description Check if the point is inside the rect\r\n * @param {Array} point Postion of point\r\n * @param {Number} x Rect start x coordinate\r\n * @param {Number} y Rect start y coordinate\r\n * @param {Number} width Rect width\r\n * @param {Number} height Rect height\r\n * @return {Boolean} Result of check\r\n */\n\n\nfunction checkPointIsInRect(_ref12, x, y, width, height) {\n var _ref13 = (0, _slicedToArray2[\"default\"])(_ref12, 2),\n px = _ref13[0],\n py = _ref13[1];\n\n if (px < x) return false;\n if (py < y) return false;\n if (px > x + width) return false;\n if (py > y + height) return false;\n return true;\n}\n/**\r\n * @description Get the coordinates of the rotated point\r\n * @param {Number} rotate Degree of rotation\r\n * @param {Array} point Postion of point\r\n * @param {Array} origin Rotation center\r\n * @param {Array} origin Rotation center\r\n * @return {Number} Coordinates after rotation\r\n */\n\n\nfunction getRotatePointPos() {\n var rotate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var point = arguments.length > 1 ? arguments[1] : undefined;\n var origin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n if (!point) return false;\n if (rotate % 360 === 0) return point;\n\n var _point3 = (0, _slicedToArray2[\"default\"])(point, 2),\n x = _point3[0],\n y = _point3[1];\n\n var _origin = (0, _slicedToArray2[\"default\"])(origin, 2),\n ox = _origin[0],\n oy = _origin[1];\n\n rotate *= PI / 180;\n return [(x - ox) * cos(rotate) - (y - oy) * sin(rotate) + ox, (x - ox) * sin(rotate) + (y - oy) * cos(rotate) + oy];\n}\n/**\r\n * @description Get the coordinates of the scaled point\r\n * @param {Array} scale Scale factor\r\n * @param {Array} point Postion of point\r\n * @param {Array} origin Scale center\r\n * @return {Number} Coordinates after scale\r\n */\n\n\nfunction getScalePointPos() {\n var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [1, 1];\n var point = arguments.length > 1 ? arguments[1] : undefined;\n var origin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n if (!point) return false;\n if (scale === 1) return point;\n\n var _point4 = (0, _slicedToArray2[\"default\"])(point, 2),\n x = _point4[0],\n y = _point4[1];\n\n var _origin2 = (0, _slicedToArray2[\"default\"])(origin, 2),\n ox = _origin2[0],\n oy = _origin2[1];\n\n var _scale = (0, _slicedToArray2[\"default\"])(scale, 2),\n xs = _scale[0],\n ys = _scale[1];\n\n var relativePosX = x - ox;\n var relativePosY = y - oy;\n return [relativePosX * xs + ox, relativePosY * ys + oy];\n}\n/**\r\n * @description Get the coordinates of the scaled point\r\n * @param {Array} translate Translation distance\r\n * @param {Array} point Postion of point\r\n * @return {Number} Coordinates after translation\r\n */\n\n\nfunction getTranslatePointPos(translate, point) {\n if (!translate || !point) return false;\n\n var _point5 = (0, _slicedToArray2[\"default\"])(point, 2),\n x = _point5[0],\n y = _point5[1];\n\n var _translate = (0, _slicedToArray2[\"default\"])(translate, 2),\n tx = _translate[0],\n ty = _translate[1];\n\n return [x + tx, y + ty];\n}\n/**\r\n * @description Get the distance from the point to the line\r\n * @param {Array} point Postion of point\r\n * @param {Array} lineBegin Line start position\r\n * @param {Array} lineEnd Line end position\r\n * @return {Number} Distance between point and line\r\n */\n\n\nfunction getDistanceBetweenPointAndLine(point, lineBegin, lineEnd) {\n if (!point || !lineBegin || !lineEnd) return false;\n\n var _point6 = (0, _slicedToArray2[\"default\"])(point, 2),\n x = _point6[0],\n y = _point6[1];\n\n var _lineBegin = (0, _slicedToArray2[\"default\"])(lineBegin, 2),\n x1 = _lineBegin[0],\n y1 = _lineBegin[1];\n\n var _lineEnd = (0, _slicedToArray2[\"default\"])(lineEnd, 2),\n x2 = _lineEnd[0],\n y2 = _lineEnd[1];\n\n var a = y2 - y1;\n var b = x1 - x2;\n var c = y1 * (x2 - x1) - x1 * (y2 - y1);\n var molecule = abs(a * x + b * y + c);\n var denominator = sqrt(a * a + b * b);\n return molecule / denominator;\n}\n/**\r\n * @description Get the coordinates of the specified radian on the circle\r\n * @param {Number} x Circle x coordinate\r\n * @param {Number} y Circle y coordinate\r\n * @param {Number} radius Circle radius\r\n * @param {Number} radian Specfied radian\r\n * @return {Array} Postion of point\r\n */\n\n\nfunction getCircleRadianPoint(x, y, radius, radian) {\n return [x + cos(radian) * radius, y + sin(radian) * radius];\n}\n/**\r\n * @description Get the points that make up a regular polygon\r\n * @param {Number} x X coordinate of the polygon inscribed circle\r\n * @param {Number} y Y coordinate of the polygon inscribed circle\r\n * @param {Number} r Radius of the polygon inscribed circle\r\n * @param {Number} side Side number\r\n * @param {Number} minus Radian offset\r\n * @return {Array} Points that make up a regular polygon\r\n */\n\n\nfunction getRegularPolygonPoints(rx, ry, r, side) {\n var minus = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : PI * -0.5;\n var radianGap = PI * 2 / side;\n var radians = new Array(side).fill('').map(function (t, i) {\n return i * radianGap + minus;\n });\n return radians.map(function (radian) {\n return getCircleRadianPoint(rx, ry, r, radian);\n });\n}\n\nvar _default = {\n deepClone: deepClone,\n eliminateBlur: eliminateBlur,\n checkPointIsInCircle: checkPointIsInCircle,\n checkPointIsInPolygon: checkPointIsInPolygon,\n checkPointIsInSector: checkPointIsInSector,\n checkPointIsNearPolyline: checkPointIsNearPolyline,\n getTwoPointDistance: getTwoPointDistance,\n getRotatePointPos: getRotatePointPos,\n getScalePointPos: getScalePointPos,\n getTranslatePointPos: getTranslatePointPos,\n getCircleRadianPoint: getCircleRadianPoint,\n getRegularPolygonPoints: getRegularPolygonPoints,\n getDistanceBetweenPointAndLine: getDistanceBetweenPointAndLine\n};\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/c-render/lib/plugin/util.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/class/charts.class.js":
/*!******************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/class/charts.class.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\n__webpack_require__(/*! ../extend/index */ \"./node_modules/@jiaminghi/charts/lib/extend/index.js\");\n\nvar _cRender = _interopRequireDefault(__webpack_require__(/*! @jiaminghi/c-render */ \"./node_modules/@jiaminghi/c-render/lib/index.js\"));\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _core = __webpack_require__(/*! ../core */ \"./node_modules/@jiaminghi/charts/lib/core/index.js\");\n\nvar Charts = function Charts(dom) {\n (0, _classCallCheck2[\"default\"])(this, Charts);\n\n if (!dom) {\n console.error('Charts Missing parameters!');\n return false;\n }\n\n var clientWidth = dom.clientWidth,\n clientHeight = dom.clientHeight;\n var canvas = document.createElement('canvas');\n canvas.setAttribute('width', clientWidth);\n canvas.setAttribute('height', clientHeight);\n dom.appendChild(canvas);\n var attribute = {\n container: dom,\n canvas: canvas,\n render: new _cRender[\"default\"](canvas),\n option: null\n };\n Object.assign(this, attribute);\n};\n/**\n * @description Set chart option\n * @param {Object} option Chart option\n * @param {Boolean} animationEnd Execute animationEnd\n * @return {Undefined} No return\n */\n\n\nexports[\"default\"] = Charts;\n\nCharts.prototype.setOption = function (option) {\n var animationEnd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!option || (0, _typeof2[\"default\"])(option) !== 'object') {\n console.error('setOption Missing parameters!');\n return false;\n }\n\n if (animationEnd) this.render.graphs.forEach(function (graph) {\n return graph.animationEnd();\n });\n var optionCloned = (0, _util.deepClone)(option, true);\n (0, _core.mergeColor)(this, optionCloned);\n (0, _core.grid)(this, optionCloned);\n (0, _core.axis)(this, optionCloned);\n (0, _core.radarAxis)(this, optionCloned);\n (0, _core.title)(this, optionCloned);\n (0, _core.bar)(this, optionCloned);\n (0, _core.line)(this, optionCloned);\n (0, _core.pie)(this, optionCloned);\n (0, _core.radar)(this, optionCloned);\n (0, _core.gauge)(this, optionCloned);\n (0, _core.legend)(this, optionCloned);\n this.option = option;\n this.render.launchAnimation(); // console.warn(this)\n};\n/**\n * @description Resize chart\n * @return {Undefined} No return\n */\n\n\nCharts.prototype.resize = function () {\n var container = this.container,\n canvas = this.canvas,\n render = this.render,\n option = this.option;\n var clientWidth = container.clientWidth,\n clientHeight = container.clientHeight;\n canvas.setAttribute('width', clientWidth);\n canvas.setAttribute('height', clientHeight);\n render.area = [clientWidth, clientHeight];\n this.setOption(option);\n};\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/class/charts.class.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/class/updater.class.js":
/*!*******************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/class/updater.class.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.doUpdate = doUpdate;\nexports.Updater = void 0;\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar Updater = function Updater(config, series) {\n (0, _classCallCheck2[\"default\"])(this, Updater);\n var chart = config.chart,\n key = config.key,\n getGraphConfig = config.getGraphConfig;\n\n if (typeof getGraphConfig !== 'function') {\n console.warn('Updater need function getGraphConfig!');\n return;\n }\n\n if (!chart[key]) this.graphs = chart[key] = [];\n Object.assign(this, config);\n this.update(series);\n};\n\nexports.Updater = Updater;\n\nUpdater.prototype.update = function (series) {\n var _this = this;\n\n var graphs = this.graphs,\n beforeUpdate = this.beforeUpdate;\n delRedundanceGraph(this, series);\n if (!series.length) return;\n var beforeUpdateType = (0, _typeof2[\"default\"])(beforeUpdate);\n series.forEach(function (seriesItem, i) {\n if (beforeUpdateType === 'function') beforeUpdate(graphs, seriesItem, i, _this);\n var cache = graphs[i];\n\n if (cache) {\n changeGraphs(cache, seriesItem, i, _this);\n } else {\n addGraphs(graphs, seriesItem, i, _this);\n }\n });\n};\n\nfunction delRedundanceGraph(updater, series) {\n var graphs = updater.graphs,\n render = updater.chart.render;\n var cacheGraphNum = graphs.length;\n var needGraphNum = series.length;\n\n if (cacheGraphNum > needGraphNum) {\n var needDelGraphs = graphs.splice(needGraphNum);\n needDelGraphs.forEach(function (item) {\n return item.forEach(function (g) {\n return render.delGraph(g);\n });\n });\n }\n}\n\nfunction changeGraphs(cache, seriesItem, i, updater) {\n var getGraphConfig = updater.getGraphConfig,\n render = updater.chart.render,\n beforeChange = updater.beforeChange;\n var configs = getGraphConfig(seriesItem, updater);\n balanceGraphsNum(cache, configs, render);\n cache.forEach(function (graph, j) {\n var config = configs[j];\n if (typeof beforeChange === 'function') beforeChange(graph, config);\n updateGraphConfigByKey(graph, config);\n });\n}\n\nfunction balanceGraphsNum(graphs, graphConfig, render) {\n var cacheGraphNum = graphs.length;\n var needGraphNum = graphConfig.length;\n\n if (needGraphNum > cacheGraphNum) {\n var lastCacheGraph = graphs.slice(-1)[0];\n var needAddGraphNum = needGraphNum - cacheGraphNum;\n var needAddGraphs = new Array(needAddGraphNum).fill(0).map(function (foo) {\n return render.clone(lastCacheGraph);\n });\n graphs.push.apply(graphs, (0, _toConsumableArray2[\"default\"])(needAddGraphs));\n } else if (needGraphNum < cacheGraphNum) {\n var needDelCache = graphs.splice(needGraphNum);\n needDelCache.forEach(function (g) {\n return render.delGraph(g);\n });\n }\n}\n\nfunction addGraphs(graphs, seriesItem, i, updater) {\n var getGraphConfig = updater.getGraphConfig,\n getStartGraphConfig = updater.getStartGraphConfig,\n chart = updater.chart;\n var render = chart.render;\n var startConfigs = null;\n if (typeof getStartGraphConfig === 'function') startConfigs = getStartGraphConfig(seriesItem, updater);\n var configs = getGraphConfig(seriesItem, updater);\n if (!configs.length) return;\n\n if (startConfigs) {\n graphs[i] = startConfigs.map(function (config) {\n return render.add(config);\n });\n graphs[i].forEach(function (graph, i) {\n var config = configs[i];\n updateGraphConfigByKey(graph, config);\n });\n } else {\n graphs[i] = configs.map(function (config) {\n return render.add(config);\n });\n }\n\n var afterAddGraph = updater.afterAddGraph;\n if (typeof afterAddGraph === 'function') afterAddGraph(graphs[i]);\n}\n\nfunction updateGraphConfigByKey(graph, config) {\n var keys = Object.keys(config);\n keys.forEach(function (key) {\n if (key === 'shape' || key === 'style') {\n graph.animation(key, config[key], true);\n } else {\n graph[key] = config[key];\n }\n });\n}\n\nfunction doUpdate() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n chart = _ref.chart,\n series = _ref.series,\n key = _ref.key,\n getGraphConfig = _ref.getGraphConfig,\n getStartGraphConfig = _ref.getStartGraphConfig,\n beforeChange = _ref.beforeChange,\n beforeUpdate = _ref.beforeUpdate,\n afterAddGraph = _ref.afterAddGraph;\n\n if (chart[key]) {\n chart[key].update(series);\n } else {\n chart[key] = new Updater({\n chart: chart,\n key: key,\n getGraphConfig: getGraphConfig,\n getStartGraphConfig: getStartGraphConfig,\n beforeChange: beforeChange,\n beforeUpdate: beforeUpdate,\n afterAddGraph: afterAddGraph\n }, series);\n }\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/class/updater.class.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/axis.js":
/*!***********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/axis.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.yAxisConfig = exports.xAxisConfig = void 0;\nvar xAxisConfig = {\n /**\n * @description Axis name\n * @type {String}\n * @default name = ''\n */\n name: '',\n\n /**\n * @description Whether to display this axis\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis position\n * @type {String}\n * @default position = 'bottom'\n * @example position = 'bottom' | 'top'\n */\n position: 'bottom',\n\n /**\n * @description Name gap\n * @type {Number}\n * @default nameGap = 15\n */\n nameGap: 15,\n\n /**\n * @description Name location\n * @type {String}\n * @default nameLocation = 'end'\n * @example nameLocation = 'end' | 'center' | 'start'\n */\n nameLocation: 'end',\n\n /**\n * @description Name default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n nameTextStyle: {\n fill: '#333',\n fontSize: 10\n },\n\n /**\n * @description Axis min value\n * @type {String|Number}\n * @default min = '20%'\n * @example min = '20%' | 0\n */\n min: '20%',\n\n /**\n * @description Axis max value\n * @type {String|Number}\n * @default max = '20%'\n * @example max = '20%' | 0\n */\n max: '20%',\n\n /**\n * @description Axis value interval\n * @type {Number}\n * @default interval = null\n * @example interval = 100\n */\n interval: null,\n\n /**\n * @description Min interval\n * @type {Number}\n * @default minInterval = null\n * @example minInterval = 1\n */\n minInterval: null,\n\n /**\n * @description Max interval\n * @type {Number}\n * @default maxInterval = null\n * @example maxInterval = 100\n */\n maxInterval: null,\n\n /**\n * @description Boundary gap\n * @type {Boolean}\n * @default boundaryGap = null\n * @example boundaryGap = true\n */\n boundaryGap: null,\n\n /**\n * @description Axis split number\n * @type {Number}\n * @default splitNumber = 5\n */\n splitNumber: 5,\n\n /**\n * @description Axis line configuration\n * @type {Object}\n */\n axisLine: {\n /**\n * @description Whether to display axis line\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis line default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#333',\n lineWidth: 1\n }\n },\n\n /**\n * @description Axis tick configuration\n * @type {Object}\n */\n axisTick: {\n /**\n * @description Whether to display axis tick\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis tick default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#333',\n lineWidth: 1\n }\n },\n\n /**\n * @description Axis label configuration\n * @type {Object}\n */\n axisLabel: {\n /**\n * @description Whether to display axis label\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis label formatter\n * @type {String|Function}\n * @default formatter = null\n * @example formatter = '{value}件'\n * @example formatter = (dataItem) => (dataItem.value)\n */\n formatter: null,\n\n /**\n * @description Axis label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fill: '#333',\n fontSize: 10,\n rotate: 0\n }\n },\n\n /**\n * @description Axis split line configuration\n * @type {Object}\n */\n splitLine: {\n /**\n * @description Whether to display axis split line\n * @type {Boolean}\n * @default show = false\n */\n show: false,\n\n /**\n * @description Axis split line default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#d4d4d4',\n lineWidth: 1\n }\n },\n\n /**\n * @description X axis render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = -20\n */\n rLevel: -20,\n\n /**\n * @description X axis animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description X axis animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 50\n};\nexports.xAxisConfig = xAxisConfig;\nvar yAxisConfig = {\n /**\n * @description Axis name\n * @type {String}\n * @default name = ''\n */\n name: '',\n\n /**\n * @description Whether to display this axis\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis position\n * @type {String}\n * @default position = 'left'\n * @example position = 'left' | 'right'\n */\n position: 'left',\n\n /**\n * @description Name gap\n * @type {Number}\n * @default nameGap = 15\n */\n nameGap: 15,\n\n /**\n * @description Name location\n * @type {String}\n * @default nameLocation = 'end'\n * @example nameLocation = 'end' | 'center' | 'start'\n */\n nameLocation: 'end',\n\n /**\n * @description name default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n nameTextStyle: {\n fill: '#333',\n fontSize: 10\n },\n\n /**\n * @description Axis min value\n * @type {String|Number}\n * @default min = '20%'\n * @example min = '20%' | 0\n */\n min: '20%',\n\n /**\n * @description Axis max value\n * @type {String|Number}\n * @default max = '20%'\n * @example max = '20%' | 0\n */\n max: '20%',\n\n /**\n * @description Axis value interval\n * @type {Number}\n * @default interval = null\n * @example interval = 100\n */\n interval: null,\n\n /**\n * @description Min interval\n * @type {Number}\n * @default minInterval = null\n * @example minInterval = 1\n */\n minInterval: null,\n\n /**\n * @description Max interval\n * @type {Number}\n * @default maxInterval = null\n * @example maxInterval = 100\n */\n maxInterval: null,\n\n /**\n * @description Boundary gap\n * @type {Boolean}\n * @default boundaryGap = null\n * @example boundaryGap = true\n */\n boundaryGap: null,\n\n /**\n * @description Axis split number\n * @type {Number}\n * @default splitNumber = 5\n */\n splitNumber: 5,\n\n /**\n * @description Axis line configuration\n * @type {Object}\n */\n axisLine: {\n /**\n * @description Whether to display axis line\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis line default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#333',\n lineWidth: 1\n }\n },\n\n /**\n * @description Axis tick configuration\n * @type {Object}\n */\n axisTick: {\n /**\n * @description Whether to display axis tick\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis tick default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#333',\n lineWidth: 1\n }\n },\n\n /**\n * @description Axis label configuration\n * @type {Object}\n */\n axisLabel: {\n /**\n * @description Whether to display axis label\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis label formatter\n * @type {String|Function}\n * @default formatter = null\n * @example formatter = '{value}件'\n * @example formatter = (dataItem) => (dataItem.value)\n */\n formatter: null,\n\n /**\n * @description Axis label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fill: '#333',\n fontSize: 10,\n rotate: 0\n }\n },\n\n /**\n * @description Axis split line configuration\n * @type {Object}\n */\n splitLine: {\n /**\n * @description Whether to display axis split line\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis split line default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#d4d4d4',\n lineWidth: 1\n }\n },\n\n /**\n * @description Y axis render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = -20\n */\n rLevel: -20,\n\n /**\n * @description Y axis animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Y axis animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 50\n};\nexports.yAxisConfig = yAxisConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/axis.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/bar.js":
/*!**********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/bar.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.barConfig = void 0;\nvar barConfig = {\n /**\n * @description Whether to display this bar chart\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Legend name\n * @type {String}\n * @default name = ''\n */\n name: '',\n\n /**\n * @description Data stacking\n * The data value of the series element of the same stack\n * will be superimposed (the latter value will be superimposed on the previous value)\n * @type {String}\n * @default stack = ''\n */\n stack: '',\n\n /**\n * @description Bar shape type\n * @type {String}\n * @default shapeType = 'normal'\n * @example shapeType = 'normal' | 'leftEchelon' | 'rightEchelon'\n */\n shapeType: 'normal',\n\n /**\n * @description Echelon bar sharpness offset\n * @type {Number}\n * @default echelonOffset = 10\n */\n echelonOffset: 10,\n\n /**\n * @description Bar width\n * This property should be set on the last 'bar' series\n * in this coordinate system to take effect and will be in effect\n * for all 'bar' series in this coordinate system\n * @type {String|Number}\n * @default barWidth = 'auto'\n * @example barWidth = 'auto' | '10%' | 20\n */\n barWidth: 'auto',\n\n /**\n * @description Bar gap\n * This property should be set on the last 'bar' series\n * in this coordinate system to take effect and will be in effect\n * for all 'bar' series in this coordinate system\n * @type {String|Number}\n * @default barGap = '30%'\n * @example barGap = '30%' | 30\n */\n barGap: '30%',\n\n /**\n * @description Bar category gap\n * This property should be set on the last 'bar' series\n * in this coordinate system to take effect and will be in effect\n * for all 'bar' series in this coordinate system\n * @type {String|Number}\n * @default barCategoryGap = '20%'\n * @example barCategoryGap = '20%' | 20\n */\n barCategoryGap: '20%',\n\n /**\n * @description Bar x axis index\n * @type {Number}\n * @default xAxisIndex = 0\n * @example xAxisIndex = 0 | 1\n */\n xAxisIndex: 0,\n\n /**\n * @description Bar y axis index\n * @type {Number}\n * @default yAxisIndex = 0\n * @example yAxisIndex = 0 | 1\n */\n yAxisIndex: 0,\n\n /**\n * @description Bar chart data\n * @type {Array}\n * @default data = []\n * @example data = [100, 200, 300]\n */\n data: [],\n\n /**\n * @description Background bar configuration\n * @type {Object}\n */\n backgroundBar: {\n /**\n * @description Whether to display background bar\n * @type {Boolean}\n * @default show = false\n */\n show: false,\n\n /**\n * @description Background bar width\n * @type {String|Number}\n * @default width = 'auto'\n * @example width = 'auto' | '30%' | 30\n */\n width: 'auto',\n\n /**\n * @description Background bar default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fill: 'rgba(200, 200, 200, .4)'\n }\n },\n\n /**\n * @description Bar label configuration\n * @type {Object}\n */\n label: {\n /**\n * @description Whether to display bar label\n * @type {Boolean}\n * @default show = false\n */\n show: false,\n\n /**\n * @description Bar label position\n * @type {String}\n * @default position = 'top'\n * @example position = 'top' | 'center' | 'bottom'\n */\n position: 'top',\n\n /**\n * @description Bar label offset\n * @type {Array}\n * @default offset = [0, -10]\n */\n offset: [0, -10],\n\n /**\n * @description Bar label formatter\n * @type {String|Function}\n * @default formatter = null\n * @example formatter = '{value}件'\n * @example formatter = (dataItem) => (dataItem.value)\n */\n formatter: null,\n\n /**\n * @description Bar label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fontSize: 10\n }\n },\n\n /**\n * @description Bar gradient configuration\n * @type {Object}\n */\n gradient: {\n /**\n * @description Gradient color (Hex|rgb|rgba)\n * @type {Array}\n * @default color = []\n */\n color: [],\n\n /**\n * @description Local gradient\n * @type {Boolean}\n * @default local = true\n */\n local: true\n },\n\n /**\n * @description Bar style default configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n barStyle: {},\n\n /**\n * @description Independent color mode\n * When set to true, independent color mode is enabled\n * @type {Boolean}\n * @default independentColor = false\n */\n independentColor: false,\n\n /**\n * @description Independent colors\n * Only effective when independent color mode is enabled\n * Default value is the same as the color in the root configuration\n * Two-dimensional color array can produce gradient colors\n * @type {Array}\n * @example independentColor = ['#fff', '#000']\n * @example independentColor = [['#fff', '#000'], '#000']\n */\n independentColors: [],\n\n /**\n * @description Bar chart render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = 0\n */\n rLevel: 0,\n\n /**\n * @description Bar animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Bar animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 50\n};\nexports.barConfig = barConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/bar.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/color.js":
/*!************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/color.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.colorConfig = void 0;\nvar colorConfig = ['#37a2da', '#32c5e9', '#67e0e3', '#9fe6b8', '#ffdb5c', '#ff9f7f', '#fb7293', '#e062ae', '#e690d1', '#e7bcf3', '#9d96f5', '#8378ea', '#96bfff'];\nexports.colorConfig = colorConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/color.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/gauge.js":
/*!************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/gauge.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.gaugeConfig = void 0;\nvar gaugeConfig = {\n /**\n * @description Whether to display this gauge\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Legend name\n * @type {String}\n * @default name = ''\n */\n name: '',\n\n /**\n * @description Radius of gauge\n * @type {String|Number}\n * @default radius = '60%'\n * @example radius = '60%' | 100\n */\n radius: '60%',\n\n /**\n * @description Center point of gauge\n * @type {Array}\n * @default center = ['50%','50%']\n * @example center = ['50%','50%'] | [100, 100]\n */\n center: ['50%', '50%'],\n\n /**\n * @description Gauge start angle\n * @type {Number}\n * @default startAngle = -(Math.PI / 4) * 5\n * @example startAngle = -Math.PI\n */\n startAngle: -(Math.PI / 4) * 5,\n\n /**\n * @description Gauge end angle\n * @type {Number}\n * @default endAngle = Math.PI / 4\n * @example endAngle = 0\n */\n endAngle: Math.PI / 4,\n\n /**\n * @description Gauge min value\n * @type {Number}\n * @default min = 0\n */\n min: 0,\n\n /**\n * @description Gauge max value\n * @type {Number}\n * @default max = 100\n */\n max: 100,\n\n /**\n * @description Gauge split number\n * @type {Number}\n * @default splitNum = 5\n */\n splitNum: 5,\n\n /**\n * @description Gauge arc line width\n * @type {Number}\n * @default arcLineWidth = 15\n */\n arcLineWidth: 15,\n\n /**\n * @description Gauge chart data\n * @type {Array}\n * @default data = []\n */\n data: [],\n\n /**\n * @description Data item arc default style configuration\n * @type {Object}\n * @default dataItemStyle = {Configuration Of Class Style}\n */\n dataItemStyle: {},\n\n /**\n * @description Axis tick configuration\n * @type {Object}\n */\n axisTick: {\n /**\n * @description Whether to display axis tick\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis tick length\n * @type {Number}\n * @default tickLength = 6\n */\n tickLength: 6,\n\n /**\n * @description Axis tick default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#999',\n lineWidth: 1\n }\n },\n\n /**\n * @description Axis label configuration\n * @type {Object}\n */\n axisLabel: {\n /**\n * @description Whether to display axis label\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Axis label data (Can be calculated automatically)\n * @type {Array}\n * @default data = [Number...]\n */\n data: [],\n\n /**\n * @description Axis label formatter\n * @type {String|Function}\n * @default formatter = null\n * @example formatter = '{value}%'\n * @example formatter = (labelItem) => (labelItem.value)\n */\n formatter: null,\n\n /**\n * @description Axis label gap between label and axis tick\n * @type {String|Function}\n * @default labelGap = 5\n */\n labelGap: 5,\n\n /**\n * @description Axis label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {}\n },\n\n /**\n * @description Gauge pointer configuration\n * @type {Object}\n */\n pointer: {\n /**\n * @description Whether to display pointer\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Pointer value index of data\n * @type {Number}\n * @default valueIndex = 0 (pointer.value = data[0].value)\n */\n valueIndex: 0,\n\n /**\n * @description Pointer default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n scale: [1, 1],\n fill: '#fb7293'\n }\n },\n\n /**\n * @description Data item arc detail configuration\n * @type {Object}\n */\n details: {\n /**\n * @description Whether to display details\n * @type {Boolean}\n * @default show = false\n */\n show: false,\n\n /**\n * @description Details formatter\n * @type {String|Function}\n * @default formatter = null\n * @example formatter = '{value}%'\n * @example formatter = '{name}%'\n * @example formatter = (dataItem) => (dataItem.value)\n */\n formatter: null,\n\n /**\n * @description Details position offset\n * @type {Array}\n * @default offset = [0, 0]\n * @example offset = [10, 10]\n */\n offset: [0, 0],\n\n /**\n * @description Value fractional precision\n * @type {Number}\n * @default valueToFixed = 0\n */\n valueToFixed: 0,\n\n /**\n * @description Details position\n * @type {String}\n * @default position = 'center'\n * @example position = 'start' | 'center' | 'end'\n */\n position: 'center',\n\n /**\n * @description Details default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fontSize: 20,\n fontWeight: 'bold',\n textAlign: 'center',\n textBaseline: 'middle'\n }\n },\n\n /**\n * @description Gauge background arc configuration\n * @type {Object}\n */\n backgroundArc: {\n /**\n * @description Whether to display background arc\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Background arc default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#e0e0e0'\n }\n },\n\n /**\n * @description Gauge chart render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = 10\n */\n rLevel: 10,\n\n /**\n * @description Gauge animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Gauge animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 50\n};\nexports.gaugeConfig = gaugeConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/gauge.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/grid.js":
/*!***********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/grid.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.gridConfig = void 0;\nvar gridConfig = {\n /**\n * @description Grid left margin\n * @type {String|Number}\n * @default left = '10%'\n * @example left = '10%' | 10\n */\n left: '10%',\n\n /**\n * @description Grid right margin\n * @type {String|Number}\n * @default right = '10%'\n * @example right = '10%' | 10\n */\n right: '10%',\n\n /**\n * @description Grid top margin\n * @type {String|Number}\n * @default top = 60\n * @example top = '10%' | 60\n */\n top: 60,\n\n /**\n * @description Grid bottom margin\n * @type {String|Number}\n * @default bottom = 60\n * @example bottom = '10%' | 60\n */\n bottom: 60,\n\n /**\n * @description Grid default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fill: 'rgba(0, 0, 0, 0)'\n },\n\n /**\n * @description Grid render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = -30\n */\n rLevel: -30,\n\n /**\n * @description Grid animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Grid animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 30\n};\nexports.gridConfig = gridConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/grid.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/index.js":
/*!************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/index.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.changeDefaultConfig = changeDefaultConfig;\nObject.defineProperty(exports, \"colorConfig\", {\n enumerable: true,\n get: function get() {\n return _color.colorConfig;\n }\n});\nObject.defineProperty(exports, \"gridConfig\", {\n enumerable: true,\n get: function get() {\n return _grid.gridConfig;\n }\n});\nObject.defineProperty(exports, \"xAxisConfig\", {\n enumerable: true,\n get: function get() {\n return _axis.xAxisConfig;\n }\n});\nObject.defineProperty(exports, \"yAxisConfig\", {\n enumerable: true,\n get: function get() {\n return _axis.yAxisConfig;\n }\n});\nObject.defineProperty(exports, \"titleConfig\", {\n enumerable: true,\n get: function get() {\n return _title.titleConfig;\n }\n});\nObject.defineProperty(exports, \"lineConfig\", {\n enumerable: true,\n get: function get() {\n return _line.lineConfig;\n }\n});\nObject.defineProperty(exports, \"barConfig\", {\n enumerable: true,\n get: function get() {\n return _bar.barConfig;\n }\n});\nObject.defineProperty(exports, \"pieConfig\", {\n enumerable: true,\n get: function get() {\n return _pie.pieConfig;\n }\n});\nObject.defineProperty(exports, \"radarAxisConfig\", {\n enumerable: true,\n get: function get() {\n return _radarAxis.radarAxisConfig;\n }\n});\nObject.defineProperty(exports, \"radarConfig\", {\n enumerable: true,\n get: function get() {\n return _radar.radarConfig;\n }\n});\nObject.defineProperty(exports, \"gaugeConfig\", {\n enumerable: true,\n get: function get() {\n return _gauge.gaugeConfig;\n }\n});\nObject.defineProperty(exports, \"legendConfig\", {\n enumerable: true,\n get: function get() {\n return _legend.legendConfig;\n }\n});\nexports.keys = void 0;\n\nvar _color = __webpack_require__(/*! ./color */ \"./node_modules/@jiaminghi/charts/lib/config/color.js\");\n\nvar _grid = __webpack_require__(/*! ./grid */ \"./node_modules/@jiaminghi/charts/lib/config/grid.js\");\n\nvar _axis = __webpack_require__(/*! ./axis */ \"./node_modules/@jiaminghi/charts/lib/config/axis.js\");\n\nvar _title = __webpack_require__(/*! ./title */ \"./node_modules/@jiaminghi/charts/lib/config/title.js\");\n\nvar _line = __webpack_require__(/*! ./line */ \"./node_modules/@jiaminghi/charts/lib/config/line.js\");\n\nvar _bar = __webpack_require__(/*! ./bar */ \"./node_modules/@jiaminghi/charts/lib/config/bar.js\");\n\nvar _pie = __webpack_require__(/*! ./pie */ \"./node_modules/@jiaminghi/charts/lib/config/pie.js\");\n\nvar _radarAxis = __webpack_require__(/*! ./radarAxis */ \"./node_modules/@jiaminghi/charts/lib/config/radarAxis.js\");\n\nvar _radar = __webpack_require__(/*! ./radar */ \"./node_modules/@jiaminghi/charts/lib/config/radar.js\");\n\nvar _gauge = __webpack_require__(/*! ./gauge */ \"./node_modules/@jiaminghi/charts/lib/config/gauge.js\");\n\nvar _legend = __webpack_require__(/*! ./legend */ \"./node_modules/@jiaminghi/charts/lib/config/legend.js\");\n\nvar _util = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nvar allConfig = {\n colorConfig: _color.colorConfig,\n gridConfig: _grid.gridConfig,\n xAxisConfig: _axis.xAxisConfig,\n yAxisConfig: _axis.yAxisConfig,\n titleConfig: _title.titleConfig,\n lineConfig: _line.lineConfig,\n barConfig: _bar.barConfig,\n pieConfig: _pie.pieConfig,\n radarAxisConfig: _radarAxis.radarAxisConfig,\n radarConfig: _radar.radarConfig,\n gaugeConfig: _gauge.gaugeConfig,\n legendConfig: _legend.legendConfig\n};\n/**\n * @description Change default configuration\n * @param {String} key Configuration key\n * @param {Object|Array} config Your config\n * @return {Undefined} No return\n */\n\nfunction changeDefaultConfig(key, config) {\n if (!allConfig[\"\".concat(key, \"Config\")]) {\n console.warn('Change default config Error - Invalid key!');\n return;\n }\n\n (0, _util.deepMerge)(allConfig[\"\".concat(key, \"Config\")], config);\n}\n\nvar keys = ['color', 'title', 'legend', 'xAxis', 'yAxis', 'grid', 'radarAxis', 'line', 'bar', 'pie', 'radar', 'gauge'];\nexports.keys = keys;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/legend.js":
/*!*************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/legend.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.legendConfig = void 0;\nvar legendConfig = {\n /**\n * @description Whether to display legend\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Legend orient\n * @type {String}\n * @default orient = 'horizontal'\n * @example orient = 'horizontal' | 'vertical'\n */\n orient: 'horizontal',\n\n /**\n * @description Legend left\n * @type {String|Number}\n * @default left = 'auto'\n * @example left = 'auto' | '10%' | 10\n */\n left: 'auto',\n\n /**\n * @description Legend right\n * @type {String|Number}\n * @default right = 'auto'\n * @example right = 'auto' | '10%' | 10\n */\n right: 'auto',\n\n /**\n * @description Legend top\n * @type {String|Number}\n * @default top = 'auto'\n * @example top = 'auto' | '10%' | 10\n */\n top: 'auto',\n\n /**\n * @description Legend bottom\n * @type {String|Number}\n * @default bottom = 'auto'\n * @example bottom = 'auto' | '10%' | 10\n */\n bottom: 'auto',\n\n /**\n * @description Legend item gap\n * @type {Number}\n * @default itemGap = 10\n */\n itemGap: 10,\n\n /**\n * @description Icon width\n * @type {Number}\n * @default iconWidth = 25\n */\n iconWidth: 25,\n\n /**\n * @description Icon height\n * @type {Number}\n * @default iconHeight = 10\n */\n iconHeight: 10,\n\n /**\n * @description Whether legend is optional\n * @type {Boolean}\n * @default selectAble = true\n */\n selectAble: true,\n\n /**\n * @description Legend data\n * @type {Array}\n * @default data = []\n */\n data: [],\n\n /**\n * @description Legend text default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n textStyle: {\n fontFamily: 'Arial',\n fontSize: 13,\n fill: '#000'\n },\n\n /**\n * @description Legend icon default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n iconStyle: {},\n\n /**\n * @description Legend text unselected default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n textUnselectedStyle: {\n fontFamily: 'Arial',\n fontSize: 13,\n fill: '#999'\n },\n\n /**\n * @description Legend icon unselected default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n iconUnselectedStyle: {\n fill: '#999'\n },\n\n /**\n * @description Legend render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = 20\n */\n rLevel: 20,\n\n /**\n * @description Legend animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Legend animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 50\n};\nexports.legendConfig = legendConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/legend.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/line.js":
/*!***********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/line.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.lineConfig = void 0;\nvar lineConfig = {\n /**\n * @description Whether to display this line chart\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Legend name\n * @type {String}\n * @default name = ''\n */\n name: '',\n\n /**\n * @description Data stacking\n * The data value of the series element of the same stack\n * will be superimposed (the latter value will be superimposed on the previous value)\n * @type {String}\n * @default stack = ''\n */\n stack: '',\n\n /**\n * @description Smooth line\n * @type {Boolean}\n * @default smooth = false\n */\n smooth: false,\n\n /**\n * @description Line x axis index\n * @type {Number}\n * @default xAxisIndex = 0\n * @example xAxisIndex = 0 | 1\n */\n xAxisIndex: 0,\n\n /**\n * @description Line y axis index\n * @type {Number}\n * @default yAxisIndex = 0\n * @example yAxisIndex = 0 | 1\n */\n yAxisIndex: 0,\n\n /**\n * @description Line chart data\n * @type {Array}\n * @default data = []\n * @example data = [100, 200, 300]\n */\n data: [],\n\n /**\n * @description Line default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n lineStyle: {\n lineWidth: 1\n },\n\n /**\n * @description Line point configuration\n * @type {Object}\n */\n linePoint: {\n /**\n * @description Whether to display line point\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Line point radius\n * @type {Number}\n * @default radius = 2\n */\n radius: 2,\n\n /**\n * @description Line point default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fill: '#fff',\n lineWidth: 1\n }\n },\n\n /**\n * @description Line area configuration\n * @type {Object}\n */\n lineArea: {\n /**\n * @description Whether to display line area\n * @type {Boolean}\n * @default show = false\n */\n show: false,\n\n /**\n * @description Line area gradient color (Hex|rgb|rgba)\n * @type {Array}\n * @default gradient = []\n */\n gradient: [],\n\n /**\n * @description Line area style default configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n opacity: 0.5\n }\n },\n\n /**\n * @description Line label configuration\n * @type {Object}\n */\n label: {\n /**\n * @description Whether to display line label\n * @type {Boolean}\n * @default show = false\n */\n show: false,\n\n /**\n * @description Line label position\n * @type {String}\n * @default position = 'top'\n * @example position = 'top' | 'center' | 'bottom'\n */\n position: 'top',\n\n /**\n * @description Line label offset\n * @type {Array}\n * @default offset = [0, -10]\n */\n offset: [0, -10],\n\n /**\n * @description Line label formatter\n * @type {String|Function}\n * @default formatter = null\n * @example formatter = '{value}件'\n * @example formatter = (dataItem) => (dataItem.value)\n */\n formatter: null,\n\n /**\n * @description Line label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fontSize: 10\n }\n },\n\n /**\n * @description Line chart render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = 10\n */\n rLevel: 10,\n\n /**\n * @description Line animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Line animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 50\n};\nexports.lineConfig = lineConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/line.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/pie.js":
/*!**********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/pie.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pieConfig = void 0;\nvar pieConfig = {\n /**\n * @description Whether to display this pie chart\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Legend name\n * @type {String}\n * @default name = ''\n */\n name: '',\n\n /**\n * @description Radius of pie\n * @type {String|Number}\n * @default radius = '50%'\n * @example radius = '50%' | 100\n */\n radius: '50%',\n\n /**\n * @description Center point of pie\n * @type {Array}\n * @default center = ['50%','50%']\n * @example center = ['50%','50%'] | [100, 100]\n */\n center: ['50%', '50%'],\n\n /**\n * @description Pie chart start angle\n * @type {Number}\n * @default startAngle = -Math.PI / 2\n * @example startAngle = -Math.PI\n */\n startAngle: -Math.PI / 2,\n\n /**\n * @description Whether to enable rose type\n * @type {Boolean}\n * @default roseType = false\n */\n roseType: false,\n\n /**\n * @description Automatic sorting in rose type\n * @type {Boolean}\n * @default roseSort = true\n */\n roseSort: true,\n\n /**\n * @description Rose radius increasing\n * @type {String|Number}\n * @default roseIncrement = 'auto'\n * @example roseIncrement = 'auto' | '10%' | 10\n */\n roseIncrement: 'auto',\n\n /**\n * @description Pie chart data\n * @type {Array}\n * @default data = []\n */\n data: [],\n\n /**\n * @description Pie inside label configuration\n * @type {Object}\n */\n insideLabel: {\n /**\n * @description Whether to display inside label\n * @type {Boolean}\n * @default show = false\n */\n show: false,\n\n /**\n * @description Label formatter\n * @type {String|Function}\n * @default formatter = '{percent}%'\n * @example formatter = '${name}-{value}-{percent}%'\n * @example formatter = (dataItem) => (dataItem.name)\n */\n formatter: '{percent}%',\n\n /**\n * @description Label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fontSize: 10,\n fill: '#fff',\n textAlign: 'center',\n textBaseline: 'middle'\n }\n },\n\n /**\n * @description Pie Outside label configuration\n * @type {Object}\n */\n outsideLabel: {\n /**\n * @description Whether to display outside label\n * @type {Boolean}\n * @default show = false\n */\n show: true,\n\n /**\n * @description Label formatter\n * @type {String|Function}\n * @default formatter = '{name}'\n * @example formatter = '${name}-{value}-{percent}%'\n * @example formatter = (dataItem) => (dataItem.name)\n */\n formatter: '{name}',\n\n /**\n * @description Label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fontSize: 11\n },\n\n /**\n * @description Gap beteen label line bended place and pie\n * @type {String|Number}\n * @default labelLineBendGap = '20%'\n * @example labelLineBendGap = '20%' | 20\n */\n labelLineBendGap: '20%',\n\n /**\n * @description Label line end length\n * @type {Number}\n * @default labelLineEndLength = 50\n */\n labelLineEndLength: 50,\n\n /**\n * @description Label line default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n labelLineStyle: {\n lineWidth: 1\n }\n },\n\n /**\n * @description Pie default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n pieStyle: {},\n\n /**\n * @description Percentage fractional precision\n * @type {Number}\n * @default percentToFixed = 0\n */\n percentToFixed: 0,\n\n /**\n * @description Pie chart render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = 10\n */\n rLevel: 10,\n\n /**\n * @description Animation delay gap\n * @type {Number}\n * @default animationDelayGap = 60\n */\n animationDelayGap: 60,\n\n /**\n * @description Pie animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Pie start animation curve\n * @type {String}\n * @default startAnimationCurve = 'easeOutBack'\n */\n startAnimationCurve: 'easeOutBack',\n\n /**\n * @description Pie animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 50\n};\nexports.pieConfig = pieConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/pie.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/radar.js":
/*!************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/radar.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.radarConfig = void 0;\nvar radarConfig = {\n /**\n * @description Whether to display this radar\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Legend name\n * @type {String}\n * @default name = ''\n */\n name: '',\n\n /**\n * @description Radar chart data\n * @type {Array}\n * @default data = []\n * @example data = [100, 200, 300]\n */\n data: [],\n\n /**\n * @description Radar default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n radarStyle: {\n lineWidth: 1\n },\n\n /**\n * @description Radar point configuration\n * @type {Object}\n */\n point: {\n /**\n * @description Whether to display radar point\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Point radius\n * @type {Number}\n * @default radius = 2\n */\n radius: 2,\n\n /**\n * @description Radar point default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fill: '#fff'\n }\n },\n\n /**\n * @description Radar label configuration\n * @type {Object}\n */\n label: {\n /**\n * @description Whether to display radar label\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Label position offset\n * @type {Array}\n * @default offset = [0, 0]\n */\n offset: [0, 0],\n\n /**\n * @description Label gap between label and radar\n * @type {Number}\n * @default labelGap = 5\n */\n labelGap: 5,\n\n /**\n * @description Label formatter\n * @type {String|Function}\n * @default formatter = null\n * @example formatter = 'Score-{value}'\n * @example formatter = (label) => (label)\n */\n formatter: null,\n\n /**\n * @description Radar label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fontSize: 10\n }\n },\n\n /**\n * @description Radar chart render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = 10\n */\n rLevel: 10,\n\n /**\n * @description Radar animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Radar animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrane: 50\n};\nexports.radarConfig = radarConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/radar.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/radarAxis.js":
/*!****************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/radarAxis.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.radarAxisConfig = void 0;\nvar radarAxisConfig = {\n /**\n * @description Whether to display this radar axis\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Center point of radar axis\n * @type {Array}\n * @default center = ['50%','50%']\n * @example center = ['50%','50%'] | [100, 100]\n */\n center: ['50%', '50%'],\n\n /**\n * @description Radius of radar axis\n * @type {String|Number}\n * @default radius = '65%'\n * @example radius = '65%' | 100\n */\n radius: '65%',\n\n /**\n * @description Radar axis start angle\n * @type {Number}\n * @default startAngle = -Math.PI / 2\n * @example startAngle = -Math.PI\n */\n startAngle: -Math.PI / 2,\n\n /**\n * @description Radar axis split number\n * @type {Number}\n * @default splitNum = 5\n */\n splitNum: 5,\n\n /**\n * @description Whether to enable polygon radar axis\n * @type {Boolean}\n * @default polygon = false\n */\n polygon: false,\n\n /**\n * @description Axis label configuration\n * @type {Object}\n */\n axisLabel: {\n /**\n * @description Whether to display axis label\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Label gap between label and radar axis\n * @type {Number}\n * @default labelGap = 15\n */\n labelGap: 15,\n\n /**\n * @description Label color (Hex|rgb|rgba), will cover style.fill\n * @type {Array}\n * @default color = []\n */\n color: [],\n\n /**\n * @description Axis label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fill: '#333'\n }\n },\n\n /**\n * @description Axis line configuration\n * @type {Object}\n */\n axisLine: {\n /**\n * @description Whether to display axis line\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Line color (Hex|rgb|rgba), will cover style.stroke\n * @type {Array}\n * @default color = []\n */\n color: [],\n\n /**\n * @description Axis label default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#999',\n lineWidth: 1\n }\n },\n\n /**\n * @description Split line configuration\n * @type {Object}\n */\n splitLine: {\n /**\n * @description Whether to display split line\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Line color (Hex|rgb|rgba), will cover style.stroke\n * @type {Array}\n * @default color = []\n */\n color: [],\n\n /**\n * @description Split line default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n stroke: '#d4d4d4',\n lineWidth: 1\n }\n },\n\n /**\n * @description Split area configuration\n * @type {Object}\n */\n splitArea: {\n /**\n * @description Whether to display split area\n * @type {Boolean}\n * @default show = false\n */\n show: false,\n\n /**\n * @description Area color (Hex|rgb|rgba), will cover style.stroke\n * @type {Array}\n * @default color = []\n */\n color: ['#f5f5f5', '#e6e6e6'],\n\n /**\n * @description Split area default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {}\n },\n\n /**\n * @description Bar chart render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = -10\n */\n rLevel: -10,\n\n /**\n * @description Radar axis animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Radar axis animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrane: 50\n};\nexports.radarAxisConfig = radarAxisConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/radarAxis.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/config/title.js":
/*!************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/config/title.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.titleConfig = void 0;\nvar titleConfig = {\n /**\n * @description Whether to display title\n * @type {Boolean}\n * @default show = true\n */\n show: true,\n\n /**\n * @description Title text\n * @type {String}\n * @default text = ''\n */\n text: '',\n\n /**\n * @description Title offset\n * @type {Array}\n * @default offset = [0, -20]\n */\n offset: [0, -20],\n\n /**\n * @description Title default style configuration\n * @type {Object}\n * @default style = {Configuration Of Class Style}\n */\n style: {\n fill: '#333',\n fontSize: 17,\n fontWeight: 'bold',\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n\n /**\n * @description Title render level\n * Priority rendering high level\n * @type {Number}\n * @default rLevel = 20\n */\n rLevel: 20,\n\n /**\n * @description Title animation curve\n * @type {String}\n * @default animationCurve = 'easeOutCubic'\n */\n animationCurve: 'easeOutCubic',\n\n /**\n * @description Title animation frame\n * @type {Number}\n * @default animationFrame = 50\n */\n animationFrame: 50\n};\nexports.titleConfig = titleConfig;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/config/title.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/axis.js":
/*!*********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/axis.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.axis = axis;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _config = __webpack_require__(/*! ../config */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _util = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nvar _util2 = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar axisConfig = {\n xAxisConfig: _config.xAxisConfig,\n yAxisConfig: _config.yAxisConfig\n};\nvar min = Math.min,\n max = Math.max,\n abs = Math.abs,\n pow = Math.pow;\n\nfunction axis(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var xAxis = option.xAxis,\n yAxis = option.yAxis,\n series = option.series;\n var allAxis = [];\n\n if (xAxis && yAxis && series) {\n allAxis = getAllAxis(xAxis, yAxis);\n allAxis = mergeDefaultAxisConfig(allAxis);\n allAxis = allAxis.filter(function (_ref) {\n var show = _ref.show;\n return show;\n });\n allAxis = mergeDefaultBoundaryGap(allAxis);\n allAxis = calcAxisLabelData(allAxis, series);\n allAxis = setAxisPosition(allAxis);\n allAxis = calcAxisLinePosition(allAxis, chart);\n allAxis = calcAxisTickPosition(allAxis, chart);\n allAxis = calcAxisNamePosition(allAxis, chart);\n allAxis = calcSplitLinePosition(allAxis, chart);\n }\n\n (0, _updater.doUpdate)({\n chart: chart,\n series: allAxis,\n key: 'axisLine',\n getGraphConfig: getLineConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: allAxis,\n key: 'axisTick',\n getGraphConfig: getTickConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: allAxis,\n key: 'axisLabel',\n getGraphConfig: getLabelConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: allAxis,\n key: 'axisName',\n getGraphConfig: getNameConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: allAxis,\n key: 'splitLine',\n getGraphConfig: getSplitLineConfig\n });\n chart.axisData = allAxis;\n}\n\nfunction getAllAxis(xAxis, yAxis) {\n var allXAxis = [],\n allYAxis = [];\n\n if (xAxis instanceof Array) {\n var _allXAxis;\n\n (_allXAxis = allXAxis).push.apply(_allXAxis, (0, _toConsumableArray2[\"default\"])(xAxis));\n } else {\n allXAxis.push(xAxis);\n }\n\n if (yAxis instanceof Array) {\n var _allYAxis;\n\n (_allYAxis = allYAxis).push.apply(_allYAxis, (0, _toConsumableArray2[\"default\"])(yAxis));\n } else {\n allYAxis.push(yAxis);\n }\n\n allXAxis.splice(2);\n allYAxis.splice(2);\n allXAxis = allXAxis.map(function (axis, i) {\n return _objectSpread(_objectSpread({}, axis), {}, {\n index: i,\n axis: 'x'\n });\n });\n allYAxis = allYAxis.map(function (axis, i) {\n return _objectSpread(_objectSpread({}, axis), {}, {\n index: i,\n axis: 'y'\n });\n });\n return [].concat((0, _toConsumableArray2[\"default\"])(allXAxis), (0, _toConsumableArray2[\"default\"])(allYAxis));\n}\n\nfunction mergeDefaultAxisConfig(allAxis) {\n var xAxis = allAxis.filter(function (_ref2) {\n var axis = _ref2.axis;\n return axis === 'x';\n });\n var yAxis = allAxis.filter(function (_ref3) {\n var axis = _ref3.axis;\n return axis === 'y';\n });\n xAxis = xAxis.map(function (axis) {\n return (0, _util.deepMerge)((0, _util2.deepClone)(_config.xAxisConfig), axis);\n });\n yAxis = yAxis.map(function (axis) {\n return (0, _util.deepMerge)((0, _util2.deepClone)(_config.yAxisConfig), axis);\n });\n return [].concat((0, _toConsumableArray2[\"default\"])(xAxis), (0, _toConsumableArray2[\"default\"])(yAxis));\n}\n\nfunction mergeDefaultBoundaryGap(allAxis) {\n var valueAxis = allAxis.filter(function (_ref4) {\n var data = _ref4.data;\n return data === 'value';\n });\n var labelAxis = allAxis.filter(function (_ref5) {\n var data = _ref5.data;\n return data !== 'value';\n });\n valueAxis.forEach(function (axis) {\n if (typeof axis.boundaryGap === 'boolean') return;\n axis.boundaryGap = false;\n });\n labelAxis.forEach(function (axis) {\n if (typeof axis.boundaryGap === 'boolean') return;\n axis.boundaryGap = true;\n });\n return [].concat((0, _toConsumableArray2[\"default\"])(valueAxis), (0, _toConsumableArray2[\"default\"])(labelAxis));\n}\n\nfunction calcAxisLabelData(allAxis, series) {\n var valueAxis = allAxis.filter(function (_ref6) {\n var data = _ref6.data;\n return data === 'value';\n });\n var labelAxis = allAxis.filter(function (_ref7) {\n var data = _ref7.data;\n return data instanceof Array;\n });\n valueAxis = calcValueAxisLabelData(valueAxis, series);\n labelAxis = calcLabelAxisLabelData(labelAxis);\n return [].concat((0, _toConsumableArray2[\"default\"])(valueAxis), (0, _toConsumableArray2[\"default\"])(labelAxis));\n}\n\nfunction calcValueAxisLabelData(valueAxis, series) {\n return valueAxis.map(function (axis) {\n var minMaxValue = getValueAxisMaxMinValue(axis, series);\n\n var _getTrueMinMax = getTrueMinMax(axis, minMaxValue),\n _getTrueMinMax2 = (0, _slicedToArray2[\"default\"])(_getTrueMinMax, 2),\n min = _getTrueMinMax2[0],\n max = _getTrueMinMax2[1];\n\n var interval = getValueInterval(min, max, axis);\n var formatter = axis.axisLabel.formatter;\n var label = [];\n\n if (min < 0 && max > 0) {\n label = getValueAxisLabelFromZero(min, max, interval);\n } else {\n label = getValueAxisLabelFromMin(min, max, interval);\n }\n\n label = label.map(function (l) {\n return parseFloat(l.toFixed(2));\n });\n return _objectSpread(_objectSpread({}, axis), {}, {\n maxValue: label.slice(-1)[0],\n minValue: label[0],\n label: getAfterFormatterLabel(label, formatter)\n });\n });\n}\n\nfunction getValueAxisMaxMinValue(axis, series) {\n series = series.filter(function (_ref8) {\n var show = _ref8.show,\n type = _ref8.type;\n if (show === false) return false;\n if (type === 'pie') return false;\n return true;\n });\n if (series.length === 0) return [0, 0];\n var index = axis.index,\n axisType = axis.axis;\n series = mergeStackData(series);\n var axisName = axisType + 'Axis';\n var valueSeries = series.filter(function (s) {\n return s[axisName] === index;\n });\n if (!valueSeries.length) valueSeries = series;\n return getSeriesMinMaxValue(valueSeries);\n}\n\nfunction getSeriesMinMaxValue(series) {\n if (!series) return;\n var minValue = Math.min.apply(Math, (0, _toConsumableArray2[\"default\"])(series.map(function (_ref9) {\n var data = _ref9.data;\n return Math.min.apply(Math, (0, _toConsumableArray2[\"default\"])((0, _util.filterNonNumber)(data)));\n })));\n var maxValue = Math.max.apply(Math, (0, _toConsumableArray2[\"default\"])(series.map(function (_ref10) {\n var data = _ref10.data;\n return Math.max.apply(Math, (0, _toConsumableArray2[\"default\"])((0, _util.filterNonNumber)(data)));\n })));\n return [minValue, maxValue];\n}\n\nfunction mergeStackData(series) {\n var seriesCloned = (0, _util2.deepClone)(series, true);\n series.forEach(function (item, i) {\n var data = (0, _util.mergeSameStackData)(item, series);\n seriesCloned[i].data = data;\n });\n return seriesCloned;\n}\n\nfunction getTrueMinMax(_ref11, _ref12) {\n var min = _ref11.min,\n max = _ref11.max,\n axis = _ref11.axis;\n\n var _ref13 = (0, _slicedToArray2[\"default\"])(_ref12, 2),\n minValue = _ref13[0],\n maxValue = _ref13[1];\n\n var minType = (0, _typeof2[\"default\"])(min),\n maxType = (0, _typeof2[\"default\"])(max);\n\n if (!testMinMaxType(min)) {\n min = axisConfig[axis + 'AxisConfig'].min;\n minType = 'string';\n }\n\n if (!testMinMaxType(max)) {\n max = axisConfig[axis + 'AxisConfig'].max;\n maxType = 'string';\n }\n\n if (minType === 'string') {\n min = parseInt(minValue - abs(minValue * parseFloat(min) / 100));\n var lever = getValueLever(min);\n min = parseFloat((min / lever - 0.1).toFixed(1)) * lever;\n }\n\n if (maxType === 'string') {\n max = parseInt(maxValue + abs(maxValue * parseFloat(max) / 100));\n\n var _lever = getValueLever(max);\n\n max = parseFloat((max / _lever + 0.1).toFixed(1)) * _lever;\n }\n\n return [min, max];\n}\n\nfunction getValueLever(value) {\n var valueString = abs(value).toString();\n var valueLength = valueString.length;\n var firstZeroIndex = valueString.replace(/0*$/g, '').indexOf('0');\n var pow10Num = valueLength - 1;\n if (firstZeroIndex !== -1) pow10Num -= firstZeroIndex;\n return pow(10, pow10Num);\n}\n\nfunction testMinMaxType(val) {\n var valType = (0, _typeof2[\"default\"])(val);\n var isValidString = valType === 'string' && /^\\d+%$/.test(val);\n var isValidNumber = valType === 'number';\n return isValidString || isValidNumber;\n}\n\nfunction getValueAxisLabelFromZero(min, max, interval) {\n var negative = [],\n positive = [];\n var currentNegative = 0,\n currentPositive = 0;\n\n do {\n negative.push(currentNegative -= interval);\n } while (currentNegative > min);\n\n do {\n positive.push(currentPositive += interval);\n } while (currentPositive < max);\n\n return [].concat((0, _toConsumableArray2[\"default\"])(negative.reverse()), [0], (0, _toConsumableArray2[\"default\"])(positive));\n}\n\nfunction getValueAxisLabelFromMin(min, max, interval) {\n var label = [min],\n currentValue = min;\n\n do {\n label.push(currentValue += interval);\n } while (currentValue < max);\n\n return label;\n}\n\nfunction getAfterFormatterLabel(label, formatter) {\n if (!formatter) return label;\n if (typeof formatter === 'string') label = label.map(function (l) {\n return formatter.replace('{value}', l);\n });\n if (typeof formatter === 'function') label = label.map(function (value, index) {\n return formatter({\n value: value,\n index: index\n });\n });\n return label;\n}\n\nfunction calcLabelAxisLabelData(labelAxis) {\n return labelAxis.map(function (axis) {\n var data = axis.data,\n formatter = axis.axisLabel.formatter;\n return _objectSpread(_objectSpread({}, axis), {}, {\n label: getAfterFormatterLabel(data, formatter)\n });\n });\n}\n\nfunction getValueInterval(min, max, axis) {\n var interval = axis.interval,\n minInterval = axis.minInterval,\n maxInterval = axis.maxInterval,\n splitNumber = axis.splitNumber,\n axisType = axis.axis;\n var config = axisConfig[axisType + 'AxisConfig'];\n if (typeof interval !== 'number') interval = config.interval;\n if (typeof minInterval !== 'number') minInterval = config.minInterval;\n if (typeof maxInterval !== 'number') maxInterval = config.maxInterval;\n if (typeof splitNumber !== 'number') splitNumber = config.splitNumber;\n if (typeof interval === 'number') return interval;\n var valueInterval = parseInt((max - min) / (splitNumber - 1));\n if (valueInterval.toString().length > 1) valueInterval = parseInt(valueInterval.toString().replace(/\\d$/, '0'));\n if (valueInterval === 0) valueInterval = 1;\n if (typeof minInterval === 'number' && valueInterval < minInterval) return minInterval;\n if (typeof maxInterval === 'number' && valueInterval > maxInterval) return maxInterval;\n return valueInterval;\n}\n\nfunction setAxisPosition(allAxis) {\n var xAxis = allAxis.filter(function (_ref14) {\n var axis = _ref14.axis;\n return axis === 'x';\n });\n var yAxis = allAxis.filter(function (_ref15) {\n var axis = _ref15.axis;\n return axis === 'y';\n });\n if (xAxis[0] && !xAxis[0].position) xAxis[0].position = _config.xAxisConfig.position;\n\n if (xAxis[1] && !xAxis[1].position) {\n xAxis[1].position = xAxis[0].position === 'bottom' ? 'top' : 'bottom';\n }\n\n if (yAxis[0] && !yAxis[0].position) yAxis[0].position = _config.yAxisConfig.position;\n\n if (yAxis[1] && !yAxis[1].position) {\n yAxis[1].position = yAxis[0].position === 'left' ? 'right' : 'left';\n }\n\n return [].concat((0, _toConsumableArray2[\"default\"])(xAxis), (0, _toConsumableArray2[\"default\"])(yAxis));\n}\n\nfunction calcAxisLinePosition(allAxis, chart) {\n var _chart$gridArea = chart.gridArea,\n x = _chart$gridArea.x,\n y = _chart$gridArea.y,\n w = _chart$gridArea.w,\n h = _chart$gridArea.h;\n allAxis = allAxis.map(function (axis) {\n var position = axis.position;\n var linePosition = [];\n\n if (position === 'left') {\n linePosition = [[x, y], [x, y + h]].reverse();\n } else if (position === 'right') {\n linePosition = [[x + w, y], [x + w, y + h]].reverse();\n } else if (position === 'top') {\n linePosition = [[x, y], [x + w, y]];\n } else if (position === 'bottom') {\n linePosition = [[x, y + h], [x + w, y + h]];\n }\n\n return _objectSpread(_objectSpread({}, axis), {}, {\n linePosition: linePosition\n });\n });\n return allAxis;\n}\n\nfunction calcAxisTickPosition(allAxis, chart) {\n return allAxis.map(function (axisItem) {\n var axis = axisItem.axis,\n linePosition = axisItem.linePosition,\n position = axisItem.position,\n label = axisItem.label,\n boundaryGap = axisItem.boundaryGap;\n if (typeof boundaryGap !== 'boolean') boundaryGap = axisConfig[axis + 'AxisConfig'].boundaryGap;\n var labelNum = label.length;\n\n var _linePosition = (0, _slicedToArray2[\"default\"])(linePosition, 2),\n _linePosition$ = (0, _slicedToArray2[\"default\"])(_linePosition[0], 2),\n startX = _linePosition$[0],\n startY = _linePosition$[1],\n _linePosition$2 = (0, _slicedToArray2[\"default\"])(_linePosition[1], 2),\n endX = _linePosition$2[0],\n endY = _linePosition$2[1];\n\n var gapLength = axis === 'x' ? endX - startX : endY - startY;\n var gap = gapLength / (boundaryGap ? labelNum : labelNum - 1);\n var tickPosition = new Array(labelNum).fill(0).map(function (foo, i) {\n if (axis === 'x') {\n return [startX + gap * (boundaryGap ? i + 0.5 : i), startY];\n }\n\n return [startX, startY + gap * (boundaryGap ? i + 0.5 : i)];\n });\n var tickLinePosition = getTickLinePosition(axis, boundaryGap, position, tickPosition, gap);\n return _objectSpread(_objectSpread({}, axisItem), {}, {\n tickPosition: tickPosition,\n tickLinePosition: tickLinePosition,\n tickGap: gap\n });\n });\n}\n\nfunction getTickLinePosition(axisType, boundaryGap, position, tickPosition, gap) {\n var index = axisType === 'x' ? 1 : 0;\n var plus = 5;\n if (axisType === 'x' && position === 'top') plus = -5;\n if (axisType === 'y' && position === 'left') plus = -5;\n var tickLinePosition = tickPosition.map(function (lineStart) {\n var lineEnd = (0, _util2.deepClone)(lineStart);\n lineEnd[index] += plus;\n return [(0, _util2.deepClone)(lineStart), lineEnd];\n });\n if (!boundaryGap) return tickLinePosition;\n index = axisType === 'x' ? 0 : 1;\n plus = gap / 2;\n tickLinePosition.forEach(function (_ref16) {\n var _ref17 = (0, _slicedToArray2[\"default\"])(_ref16, 2),\n lineStart = _ref17[0],\n lineEnd = _ref17[1];\n\n lineStart[index] += plus;\n lineEnd[index] += plus;\n });\n return tickLinePosition;\n}\n\nfunction calcAxisNamePosition(allAxis, chart) {\n return allAxis.map(function (axisItem) {\n var nameGap = axisItem.nameGap,\n nameLocation = axisItem.nameLocation,\n position = axisItem.position,\n linePosition = axisItem.linePosition;\n\n var _linePosition2 = (0, _slicedToArray2[\"default\"])(linePosition, 2),\n lineStart = _linePosition2[0],\n lineEnd = _linePosition2[1];\n\n var namePosition = (0, _toConsumableArray2[\"default\"])(lineStart);\n if (nameLocation === 'end') namePosition = (0, _toConsumableArray2[\"default\"])(lineEnd);\n\n if (nameLocation === 'center') {\n namePosition[0] = (lineStart[0] + lineEnd[0]) / 2;\n namePosition[1] = (lineStart[1] + lineEnd[1]) / 2;\n }\n\n var index = 0;\n if (position === 'top' && nameLocation === 'center') index = 1;\n if (position === 'bottom' && nameLocation === 'center') index = 1;\n if (position === 'left' && nameLocation !== 'center') index = 1;\n if (position === 'right' && nameLocation !== 'center') index = 1;\n var plus = nameGap;\n if (position === 'top' && nameLocation !== 'end') plus *= -1;\n if (position === 'left' && nameLocation !== 'start') plus *= -1;\n if (position === 'bottom' && nameLocation === 'start') plus *= -1;\n if (position === 'right' && nameLocation === 'end') plus *= -1;\n namePosition[index] += plus;\n return _objectSpread(_objectSpread({}, axisItem), {}, {\n namePosition: namePosition\n });\n });\n}\n\nfunction calcSplitLinePosition(allAxis, chart) {\n var _chart$gridArea2 = chart.gridArea,\n w = _chart$gridArea2.w,\n h = _chart$gridArea2.h;\n return allAxis.map(function (axisItem) {\n var tickLinePosition = axisItem.tickLinePosition,\n position = axisItem.position,\n boundaryGap = axisItem.boundaryGap;\n var index = 0,\n plus = w;\n if (position === 'top' || position === 'bottom') index = 1;\n if (position === 'top' || position === 'bottom') plus = h;\n if (position === 'right' || position === 'bottom') plus *= -1;\n var splitLinePosition = tickLinePosition.map(function (_ref18) {\n var _ref19 = (0, _slicedToArray2[\"default\"])(_ref18, 1),\n startPoint = _ref19[0];\n\n var endPoint = (0, _toConsumableArray2[\"default\"])(startPoint);\n endPoint[index] += plus;\n return [(0, _toConsumableArray2[\"default\"])(startPoint), endPoint];\n });\n if (!boundaryGap) splitLinePosition.shift();\n return _objectSpread(_objectSpread({}, axisItem), {}, {\n splitLinePosition: splitLinePosition\n });\n });\n}\n\nfunction getLineConfig(axisItem) {\n var animationCurve = axisItem.animationCurve,\n animationFrame = axisItem.animationFrame,\n rLevel = axisItem.rLevel;\n return [{\n name: 'polyline',\n index: rLevel,\n visible: axisItem.axisLine.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getLineShape(axisItem),\n style: getLineStyle(axisItem)\n }];\n}\n\nfunction getLineShape(axisItem) {\n var linePosition = axisItem.linePosition;\n return {\n points: linePosition\n };\n}\n\nfunction getLineStyle(axisItem) {\n return axisItem.axisLine.style;\n}\n\nfunction getTickConfig(axisItem) {\n var animationCurve = axisItem.animationCurve,\n animationFrame = axisItem.animationFrame,\n rLevel = axisItem.rLevel;\n var shapes = getTickShapes(axisItem);\n var style = getTickStyle(axisItem);\n return shapes.map(function (shape) {\n return {\n name: 'polyline',\n index: rLevel,\n visible: axisItem.axisTick.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: style\n };\n });\n}\n\nfunction getTickShapes(axisItem) {\n var tickLinePosition = axisItem.tickLinePosition;\n return tickLinePosition.map(function (points) {\n return {\n points: points\n };\n });\n}\n\nfunction getTickStyle(axisItem) {\n return axisItem.axisTick.style;\n}\n\nfunction getLabelConfig(axisItem) {\n var animationCurve = axisItem.animationCurve,\n animationFrame = axisItem.animationFrame,\n rLevel = axisItem.rLevel;\n var shapes = getLabelShapes(axisItem);\n var styles = getLabelStyle(axisItem, shapes);\n return shapes.map(function (shape, i) {\n return {\n name: 'text',\n index: rLevel,\n visible: axisItem.axisLabel.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: styles[i],\n setGraphCenter: function setGraphCenter() {\n return void 0;\n }\n };\n });\n}\n\nfunction getLabelShapes(axisItem) {\n var label = axisItem.label,\n tickPosition = axisItem.tickPosition,\n position = axisItem.position;\n return tickPosition.map(function (point, i) {\n return {\n position: getLabelRealPosition(point, position),\n content: label[i].toString()\n };\n });\n}\n\nfunction getLabelRealPosition(points, position) {\n var index = 0,\n plus = 10;\n if (position === 'top' || position === 'bottom') index = 1;\n if (position === 'top' || position === 'left') plus = -10;\n points = (0, _util2.deepClone)(points);\n points[index] += plus;\n return points;\n}\n\nfunction getLabelStyle(axisItem, shapes) {\n var position = axisItem.position;\n var style = axisItem.axisLabel.style;\n var align = getAxisLabelRealAlign(position);\n style = (0, _util.deepMerge)(align, style);\n var styles = shapes.map(function (_ref20) {\n var position = _ref20.position;\n return _objectSpread(_objectSpread({}, style), {}, {\n graphCenter: position\n });\n });\n return styles;\n}\n\nfunction getAxisLabelRealAlign(position) {\n if (position === 'left') return {\n textAlign: 'right',\n textBaseline: 'middle'\n };\n if (position === 'right') return {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n if (position === 'top') return {\n textAlign: 'center',\n textBaseline: 'bottom'\n };\n if (position === 'bottom') return {\n textAlign: 'center',\n textBaseline: 'top'\n };\n}\n\nfunction getNameConfig(axisItem) {\n var animationCurve = axisItem.animationCurve,\n animationFrame = axisItem.animationFrame,\n rLevel = axisItem.rLevel;\n return [{\n name: 'text',\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getNameShape(axisItem),\n style: getNameStyle(axisItem)\n }];\n}\n\nfunction getNameShape(axisItem) {\n var name = axisItem.name,\n namePosition = axisItem.namePosition;\n return {\n content: name,\n position: namePosition\n };\n}\n\nfunction getNameStyle(axisItem) {\n var nameLocation = axisItem.nameLocation,\n position = axisItem.position,\n style = axisItem.nameTextStyle;\n var align = getNameRealAlign(position, nameLocation);\n return (0, _util.deepMerge)(align, style);\n}\n\nfunction getNameRealAlign(position, location) {\n if (position === 'top' && location === 'start' || position === 'bottom' && location === 'start' || position === 'left' && location === 'center') return {\n textAlign: 'right',\n textBaseline: 'middle'\n };\n if (position === 'top' && location === 'end' || position === 'bottom' && location === 'end' || position === 'right' && location === 'center') return {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n if (position === 'top' && location === 'center' || position === 'left' && location === 'end' || position === 'right' && location === 'end') return {\n textAlign: 'center',\n textBaseline: 'bottom'\n };\n if (position === 'bottom' && location === 'center' || position === 'left' && location === 'start' || position === 'right' && location === 'start') return {\n textAlign: 'center',\n textBaseline: 'top'\n };\n}\n\nfunction getSplitLineConfig(axisItem) {\n var animationCurve = axisItem.animationCurve,\n animationFrame = axisItem.animationFrame,\n rLevel = axisItem.rLevel;\n var shapes = getSplitLineShapes(axisItem);\n var style = getSplitLineStyle(axisItem);\n return shapes.map(function (shape) {\n return {\n name: 'polyline',\n index: rLevel,\n visible: axisItem.splitLine.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: style\n };\n });\n}\n\nfunction getSplitLineShapes(axisItem) {\n var splitLinePosition = axisItem.splitLinePosition;\n return splitLinePosition.map(function (points) {\n return {\n points: points\n };\n });\n}\n\nfunction getSplitLineStyle(axisItem) {\n return axisItem.splitLine.style;\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/axis.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/bar.js":
/*!********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/bar.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bar = bar;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _config = __webpack_require__(/*! ../config */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction bar(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var xAxis = option.xAxis,\n yAxis = option.yAxis,\n series = option.series;\n var bars = [];\n\n if (xAxis && yAxis && series) {\n bars = (0, _util2.initNeedSeries)(series, _config.barConfig, 'bar');\n bars = setBarAxis(bars, chart);\n bars = setBarPositionData(bars, chart);\n bars = calcBarsPosition(bars, chart);\n }\n\n (0, _updater.doUpdate)({\n chart: chart,\n series: bars.slice(-1),\n key: 'backgroundBar',\n getGraphConfig: getBackgroundBarConfig\n });\n bars.reverse();\n (0, _updater.doUpdate)({\n chart: chart,\n series: bars,\n key: 'bar',\n getGraphConfig: getBarConfig,\n getStartGraphConfig: getStartBarConfig,\n beforeUpdate: beforeUpdateBar\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: bars,\n key: 'barLabel',\n getGraphConfig: getLabelConfig\n });\n}\n\nfunction setBarAxis(bars, chart) {\n var axisData = chart.axisData;\n bars.forEach(function (bar) {\n var xAxisIndex = bar.xAxisIndex,\n yAxisIndex = bar.yAxisIndex;\n if (typeof xAxisIndex !== 'number') xAxisIndex = 0;\n if (typeof yAxisIndex !== 'number') yAxisIndex = 0;\n var xAxis = axisData.find(function (_ref) {\n var axis = _ref.axis,\n index = _ref.index;\n return \"\".concat(axis).concat(index) === \"x\".concat(xAxisIndex);\n });\n var yAxis = axisData.find(function (_ref2) {\n var axis = _ref2.axis,\n index = _ref2.index;\n return \"\".concat(axis).concat(index) === \"y\".concat(yAxisIndex);\n });\n var axis = [xAxis, yAxis];\n var valueAxisIndex = axis.findIndex(function (_ref3) {\n var data = _ref3.data;\n return data === 'value';\n });\n bar.valueAxis = axis[valueAxisIndex];\n bar.labelAxis = axis[1 - valueAxisIndex];\n });\n return bars;\n}\n\nfunction setBarPositionData(bars, chart) {\n var labelBarGroup = groupBarByLabelAxis(bars);\n labelBarGroup.forEach(function (group) {\n setBarIndex(group);\n setBarNum(group);\n setBarCategoryWidth(group, chart);\n setBarWidthAndGap(group);\n setBarAllWidthAndGap(group);\n });\n return bars;\n}\n\nfunction setBarIndex(bars) {\n var stacks = getBarStack(bars);\n stacks = stacks.map(function (stack) {\n return {\n stack: stack,\n index: -1\n };\n });\n var currentIndex = 0;\n bars.forEach(function (bar) {\n var stack = bar.stack;\n\n if (!stack) {\n bar.barIndex = currentIndex;\n currentIndex++;\n } else {\n var stackData = stacks.find(function (_ref4) {\n var s = _ref4.stack;\n return s === stack;\n });\n\n if (stackData.index === -1) {\n stackData.index = currentIndex;\n currentIndex++;\n }\n\n bar.barIndex = stackData.index;\n }\n });\n}\n\nfunction groupBarByLabelAxis(bars) {\n var labelAxis = bars.map(function (_ref5) {\n var _ref5$labelAxis = _ref5.labelAxis,\n axis = _ref5$labelAxis.axis,\n index = _ref5$labelAxis.index;\n return axis + index;\n });\n labelAxis = (0, _toConsumableArray2[\"default\"])(new Set(labelAxis));\n return labelAxis.map(function (axisIndex) {\n return bars.filter(function (_ref6) {\n var _ref6$labelAxis = _ref6.labelAxis,\n axis = _ref6$labelAxis.axis,\n index = _ref6$labelAxis.index;\n return axis + index === axisIndex;\n });\n });\n}\n\nfunction getBarStack(bars) {\n var stacks = [];\n bars.forEach(function (_ref7) {\n var stack = _ref7.stack;\n if (stack) stacks.push(stack);\n });\n return (0, _toConsumableArray2[\"default\"])(new Set(stacks));\n}\n\nfunction setBarNum(bars) {\n var barNum = (0, _toConsumableArray2[\"default\"])(new Set(bars.map(function (_ref8) {\n var barIndex = _ref8.barIndex;\n return barIndex;\n }))).length;\n bars.forEach(function (bar) {\n return bar.barNum = barNum;\n });\n}\n\nfunction setBarCategoryWidth(bars) {\n var lastBar = bars.slice(-1)[0];\n var barCategoryGap = lastBar.barCategoryGap,\n tickGap = lastBar.labelAxis.tickGap;\n var barCategoryWidth = 0;\n\n if (typeof barCategoryGap === 'number') {\n barCategoryWidth = barCategoryGap;\n } else {\n barCategoryWidth = (1 - parseInt(barCategoryGap) / 100) * tickGap;\n }\n\n bars.forEach(function (bar) {\n return bar.barCategoryWidth = barCategoryWidth;\n });\n}\n\nfunction setBarWidthAndGap(bars) {\n var _bars$slice$ = bars.slice(-1)[0],\n barCategoryWidth = _bars$slice$.barCategoryWidth,\n barWidth = _bars$slice$.barWidth,\n barGap = _bars$slice$.barGap,\n barNum = _bars$slice$.barNum;\n var widthAndGap = [];\n\n if (typeof barWidth === 'number' || barWidth !== 'auto') {\n widthAndGap = getBarWidthAndGapWithPercentOrNumber(barCategoryWidth, barWidth, barGap, barNum);\n } else if (barWidth === 'auto') {\n widthAndGap = getBarWidthAndGapWidthAuto(barCategoryWidth, barWidth, barGap, barNum);\n }\n\n var _widthAndGap = widthAndGap,\n _widthAndGap2 = (0, _slicedToArray2[\"default\"])(_widthAndGap, 2),\n width = _widthAndGap2[0],\n gap = _widthAndGap2[1];\n\n bars.forEach(function (bar) {\n bar.barWidth = width;\n bar.barGap = gap;\n });\n}\n\nfunction getBarWidthAndGapWithPercentOrNumber(barCategoryWidth, barWidth, barGap) {\n var width = 0,\n gap = 0;\n\n if (typeof barWidth === 'number') {\n width = barWidth;\n } else {\n width = parseInt(barWidth) / 100 * barCategoryWidth;\n }\n\n if (typeof barGap === 'number') {\n gap = barGap;\n } else {\n gap = parseInt(barGap) / 100 * width;\n }\n\n return [width, gap];\n}\n\nfunction getBarWidthAndGapWidthAuto(barCategoryWidth, barWidth, barGap, barNum) {\n var width = 0,\n gap = 0;\n var barItemWidth = barCategoryWidth / barNum;\n\n if (typeof barGap === 'number') {\n gap = barGap;\n width = barItemWidth - gap;\n } else {\n var percent = 10 + parseInt(barGap) / 10;\n\n if (percent === 0) {\n width = barItemWidth * 2;\n gap = -width;\n } else {\n width = barItemWidth / percent * 10;\n gap = barItemWidth - width;\n }\n }\n\n return [width, gap];\n}\n\nfunction setBarAllWidthAndGap(bars) {\n var _bars$slice$2 = bars.slice(-1)[0],\n barGap = _bars$slice$2.barGap,\n barWidth = _bars$slice$2.barWidth,\n barNum = _bars$slice$2.barNum;\n var barAllWidthAndGap = (barGap + barWidth) * barNum - barGap;\n bars.forEach(function (bar) {\n return bar.barAllWidthAndGap = barAllWidthAndGap;\n });\n}\n\nfunction calcBarsPosition(bars, chart) {\n bars = calcBarValueAxisCoordinate(bars);\n bars = calcBarLabelAxisCoordinate(bars);\n bars = eliminateNullBarLabelAxis(bars);\n bars = keepSameNumBetweenBarAndData(bars);\n return bars;\n}\n\nfunction calcBarLabelAxisCoordinate(bars) {\n return bars.map(function (bar) {\n var labelAxis = bar.labelAxis,\n barAllWidthAndGap = bar.barAllWidthAndGap,\n barGap = bar.barGap,\n barWidth = bar.barWidth,\n barIndex = bar.barIndex;\n var tickGap = labelAxis.tickGap,\n tickPosition = labelAxis.tickPosition,\n axis = labelAxis.axis;\n var coordinateIndex = axis === 'x' ? 0 : 1;\n var barLabelAxisPos = tickPosition.map(function (tick, i) {\n var barCategoryStartPos = tickPosition[i][coordinateIndex] - tickGap / 2;\n var barItemsStartPos = barCategoryStartPos + (tickGap - barAllWidthAndGap) / 2;\n return barItemsStartPos + (barIndex + 0.5) * barWidth + barIndex * barGap;\n });\n return _objectSpread(_objectSpread({}, bar), {}, {\n barLabelAxisPos: barLabelAxisPos\n });\n });\n}\n\nfunction calcBarValueAxisCoordinate(bars) {\n return bars.map(function (bar) {\n var data = (0, _util2.mergeSameStackData)(bar, bars);\n data = eliminateNonNumberData(bar, data);\n var _bar$valueAxis = bar.valueAxis,\n axis = _bar$valueAxis.axis,\n minValue = _bar$valueAxis.minValue,\n maxValue = _bar$valueAxis.maxValue,\n linePosition = _bar$valueAxis.linePosition;\n var startPos = getValuePos(minValue, maxValue, minValue < 0 ? 0 : minValue, linePosition, axis);\n var endPos = data.map(function (v) {\n return getValuePos(minValue, maxValue, v, linePosition, axis);\n });\n var barValueAxisPos = endPos.map(function (p) {\n return [startPos, p];\n });\n return _objectSpread(_objectSpread({}, bar), {}, {\n barValueAxisPos: barValueAxisPos\n });\n });\n}\n\nfunction eliminateNonNumberData(barItem, barData) {\n var data = barItem.data;\n return barData.map(function (v, i) {\n return typeof data[i] === 'number' ? v : null;\n }).filter(function (d) {\n return d !== null;\n });\n}\n\nfunction eliminateNullBarLabelAxis(bars) {\n return bars.map(function (bar) {\n var barLabelAxisPos = bar.barLabelAxisPos,\n data = bar.data;\n data.forEach(function (d, i) {\n if (typeof d === 'number') return;\n barLabelAxisPos[i] = null;\n });\n return _objectSpread(_objectSpread({}, bar), {}, {\n barLabelAxisPos: barLabelAxisPos.filter(function (p) {\n return p !== null;\n })\n });\n });\n}\n\nfunction keepSameNumBetweenBarAndData(bars) {\n bars.forEach(function (bar) {\n var data = bar.data,\n barLabelAxisPos = bar.barLabelAxisPos,\n barValueAxisPos = bar.barValueAxisPos;\n var dataNum = data.filter(function (d) {\n return typeof d === 'number';\n }).length;\n var axisPosNum = barLabelAxisPos.length;\n\n if (axisPosNum > dataNum) {\n barLabelAxisPos.splice(dataNum);\n barValueAxisPos.splice(dataNum);\n }\n });\n return bars;\n}\n\nfunction getValuePos(min, max, value, linePosition, axis) {\n if (typeof value !== 'number') return null;\n var valueMinus = max - min;\n var coordinateIndex = axis === 'x' ? 0 : 1;\n var posMinus = linePosition[1][coordinateIndex] - linePosition[0][coordinateIndex];\n var percent = (value - min) / valueMinus;\n if (valueMinus === 0) percent = 0;\n var pos = percent * posMinus;\n return pos + linePosition[0][coordinateIndex];\n}\n\nfunction getBackgroundBarConfig(barItem) {\n var animationCurve = barItem.animationCurve,\n animationFrame = barItem.animationFrame,\n rLevel = barItem.rLevel;\n var shapes = getBackgroundBarShapes(barItem);\n var style = getBackgroundBarStyle(barItem);\n return shapes.map(function (shape) {\n return {\n name: 'rect',\n index: rLevel,\n visible: barItem.backgroundBar.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: style\n };\n });\n}\n\nfunction getBackgroundBarShapes(barItem) {\n var labelAxis = barItem.labelAxis,\n valueAxis = barItem.valueAxis;\n var tickPosition = labelAxis.tickPosition;\n var axis = valueAxis.axis,\n linePosition = valueAxis.linePosition;\n var width = getBackgroundBarWidth(barItem);\n var haltWidth = width / 2;\n var posIndex = axis === 'x' ? 0 : 1;\n var centerPos = tickPosition.map(function (p) {\n return p[1 - posIndex];\n });\n var _ref9 = [linePosition[0][posIndex], linePosition[1][posIndex]],\n start = _ref9[0],\n end = _ref9[1];\n return centerPos.map(function (center) {\n if (axis === 'x') {\n return {\n x: start,\n y: center - haltWidth,\n w: end - start,\n h: width\n };\n } else {\n return {\n x: center - haltWidth,\n y: end,\n w: width,\n h: start - end\n };\n }\n });\n}\n\nfunction getBackgroundBarWidth(barItem) {\n var barAllWidthAndGap = barItem.barAllWidthAndGap,\n barCategoryWidth = barItem.barCategoryWidth,\n backgroundBar = barItem.backgroundBar;\n var width = backgroundBar.width;\n if (typeof width === 'number') return width;\n if (width === 'auto') return barAllWidthAndGap;\n return parseInt(width) / 100 * barCategoryWidth;\n}\n\nfunction getBackgroundBarStyle(barItem) {\n return barItem.backgroundBar.style;\n}\n\nfunction getBarConfig(barItem) {\n var barLabelAxisPos = barItem.barLabelAxisPos,\n animationCurve = barItem.animationCurve,\n animationFrame = barItem.animationFrame,\n rLevel = barItem.rLevel;\n var name = getBarName(barItem);\n return barLabelAxisPos.map(function (foo, i) {\n return {\n name: name,\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getBarShape(barItem, i),\n style: getBarStyle(barItem, i)\n };\n });\n}\n\nfunction getBarName(barItem) {\n var shapeType = barItem.shapeType;\n if (shapeType === 'leftEchelon' || shapeType === 'rightEchelon') return 'polyline';\n return 'rect';\n}\n\nfunction getBarShape(barItem, i) {\n var shapeType = barItem.shapeType;\n\n if (shapeType === 'leftEchelon') {\n return getLeftEchelonShape(barItem, i);\n } else if (shapeType === 'rightEchelon') {\n return getRightEchelonShape(barItem, i);\n } else {\n return getNormalBarShape(barItem, i);\n }\n}\n\nfunction getLeftEchelonShape(barItem, i) {\n var barValueAxisPos = barItem.barValueAxisPos,\n barLabelAxisPos = barItem.barLabelAxisPos,\n barWidth = barItem.barWidth,\n echelonOffset = barItem.echelonOffset;\n\n var _barValueAxisPos$i = (0, _slicedToArray2[\"default\"])(barValueAxisPos[i], 2),\n start = _barValueAxisPos$i[0],\n end = _barValueAxisPos$i[1];\n\n var labelAxisPos = barLabelAxisPos[i];\n var halfWidth = barWidth / 2;\n var valueAxis = barItem.valueAxis.axis;\n var points = [];\n\n if (valueAxis === 'x') {\n points[0] = [end, labelAxisPos - halfWidth];\n points[1] = [end, labelAxisPos + halfWidth];\n points[2] = [start, labelAxisPos + halfWidth];\n points[3] = [start + echelonOffset, labelAxisPos - halfWidth];\n if (end - start < echelonOffset) points.splice(3, 1);\n } else {\n points[0] = [labelAxisPos - halfWidth, end];\n points[1] = [labelAxisPos + halfWidth, end];\n points[2] = [labelAxisPos + halfWidth, start];\n points[3] = [labelAxisPos - halfWidth, start - echelonOffset];\n if (start - end < echelonOffset) points.splice(3, 1);\n }\n\n return {\n points: points,\n close: true\n };\n}\n\nfunction getRightEchelonShape(barItem, i) {\n var barValueAxisPos = barItem.barValueAxisPos,\n barLabelAxisPos = barItem.barLabelAxisPos,\n barWidth = barItem.barWidth,\n echelonOffset = barItem.echelonOffset;\n\n var _barValueAxisPos$i2 = (0, _slicedToArray2[\"default\"])(barValueAxisPos[i], 2),\n start = _barValueAxisPos$i2[0],\n end = _barValueAxisPos$i2[1];\n\n var labelAxisPos = barLabelAxisPos[i];\n var halfWidth = barWidth / 2;\n var valueAxis = barItem.valueAxis.axis;\n var points = [];\n\n if (valueAxis === 'x') {\n points[0] = [end, labelAxisPos + halfWidth];\n points[1] = [end, labelAxisPos - halfWidth];\n points[2] = [start, labelAxisPos - halfWidth];\n points[3] = [start + echelonOffset, labelAxisPos + halfWidth];\n if (end - start < echelonOffset) points.splice(2, 1);\n } else {\n points[0] = [labelAxisPos + halfWidth, end];\n points[1] = [labelAxisPos - halfWidth, end];\n points[2] = [labelAxisPos - halfWidth, start];\n points[3] = [labelAxisPos + halfWidth, start - echelonOffset];\n if (start - end < echelonOffset) points.splice(2, 1);\n }\n\n return {\n points: points,\n close: true\n };\n}\n\nfunction getNormalBarShape(barItem, i) {\n var barValueAxisPos = barItem.barValueAxisPos,\n barLabelAxisPos = barItem.barLabelAxisPos,\n barWidth = barItem.barWidth;\n\n var _barValueAxisPos$i3 = (0, _slicedToArray2[\"default\"])(barValueAxisPos[i], 2),\n start = _barValueAxisPos$i3[0],\n end = _barValueAxisPos$i3[1];\n\n var labelAxisPos = barLabelAxisPos[i];\n var valueAxis = barItem.valueAxis.axis;\n var shape = {};\n\n if (valueAxis === 'x') {\n shape.x = start;\n shape.y = labelAxisPos - barWidth / 2;\n shape.w = end - start;\n shape.h = barWidth;\n } else {\n shape.x = labelAxisPos - barWidth / 2;\n shape.y = end;\n shape.w = barWidth;\n shape.h = start - end;\n }\n\n return shape;\n}\n\nfunction getBarStyle(barItem, i) {\n var barStyle = barItem.barStyle,\n gradient = barItem.gradient,\n color = barItem.color,\n independentColor = barItem.independentColor,\n independentColors = barItem.independentColors;\n var fillColor = [barStyle.fill || color];\n var gradientColor = (0, _util2.deepMerge)(fillColor, gradient.color);\n\n if (independentColor) {\n var idtColor = independentColors[i % independentColors.length];\n gradientColor = idtColor instanceof Array ? idtColor : [idtColor];\n }\n\n if (gradientColor.length === 1) gradientColor.push(gradientColor[0]);\n var gradientParams = getGradientParams(barItem, i);\n return (0, _util2.deepMerge)({\n gradientColor: gradientColor,\n gradientParams: gradientParams,\n gradientType: 'linear',\n gradientWith: 'fill'\n }, barStyle);\n}\n\nfunction getGradientParams(barItem, i) {\n var barValueAxisPos = barItem.barValueAxisPos,\n barLabelAxisPos = barItem.barLabelAxisPos,\n data = barItem.data;\n var _barItem$valueAxis = barItem.valueAxis,\n linePosition = _barItem$valueAxis.linePosition,\n axis = _barItem$valueAxis.axis;\n\n var _barValueAxisPos$i4 = (0, _slicedToArray2[\"default\"])(barValueAxisPos[i], 2),\n start = _barValueAxisPos$i4[0],\n end = _barValueAxisPos$i4[1];\n\n var labelAxisPos = barLabelAxisPos[i];\n var value = data[i];\n\n var _linePosition = (0, _slicedToArray2[\"default\"])(linePosition, 2),\n lineStart = _linePosition[0],\n lineEnd = _linePosition[1];\n\n var valueAxisIndex = axis === 'x' ? 0 : 1;\n var endPos = end;\n\n if (!barItem.gradient.local) {\n endPos = value < 0 ? lineStart[valueAxisIndex] : lineEnd[valueAxisIndex];\n }\n\n if (axis === 'y') {\n return [labelAxisPos, endPos, labelAxisPos, start];\n } else {\n return [endPos, labelAxisPos, start, labelAxisPos];\n }\n}\n\nfunction getStartBarConfig(barItem) {\n var configs = getBarConfig(barItem);\n var shapeType = barItem.shapeType;\n configs.forEach(function (config) {\n var shape = config.shape;\n\n if (shapeType === 'leftEchelon') {\n shape = getStartLeftEchelonShape(shape, barItem);\n } else if (shapeType === 'rightEchelon') {\n shape = getStartRightEchelonShape(shape, barItem);\n } else {\n shape = getStartNormalBarShape(shape, barItem);\n }\n\n config.shape = shape;\n });\n return configs;\n}\n\nfunction getStartLeftEchelonShape(shape, barItem) {\n var axis = barItem.valueAxis.axis;\n shape = (0, _util.deepClone)(shape);\n var _shape = shape,\n points = _shape.points;\n var index = axis === 'x' ? 0 : 1;\n var start = points[2][index];\n points.forEach(function (point) {\n return point[index] = start;\n });\n return shape;\n}\n\nfunction getStartRightEchelonShape(shape, barItem) {\n var axis = barItem.valueAxis.axis;\n shape = (0, _util.deepClone)(shape);\n var _shape2 = shape,\n points = _shape2.points;\n var index = axis === 'x' ? 0 : 1;\n var start = points[2][index];\n points.forEach(function (point) {\n return point[index] = start;\n });\n return shape;\n}\n\nfunction getStartNormalBarShape(shape, barItem) {\n var axis = barItem.valueAxis.axis;\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n\n if (axis === 'x') {\n w = 0;\n } else {\n y = y + h;\n h = 0;\n }\n\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n}\n\nfunction beforeUpdateBar(graphs, barItem, i, updater) {\n var render = updater.chart.render;\n var name = getBarName(barItem);\n\n if (graphs[i] && graphs[i][0].name !== name) {\n graphs[i].forEach(function (g) {\n return render.delGraph(g);\n });\n graphs[i] = null;\n }\n}\n\nfunction getLabelConfig(barItem) {\n var animationCurve = barItem.animationCurve,\n animationFrame = barItem.animationFrame,\n rLevel = barItem.rLevel;\n var shapes = getLabelShapes(barItem);\n var style = getLabelStyle(barItem);\n return shapes.map(function (shape) {\n return {\n name: 'text',\n index: rLevel,\n visible: barItem.label.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: style\n };\n });\n}\n\nfunction getLabelShapes(barItem) {\n var contents = getFormatterLabels(barItem);\n var position = getLabelsPosition(barItem);\n return position.map(function (pos, i) {\n return {\n position: pos,\n content: contents[i]\n };\n });\n}\n\nfunction getFormatterLabels(barItem) {\n var data = barItem.data,\n label = barItem.label;\n var formatter = label.formatter;\n data = data.filter(function (d) {\n return typeof d === 'number';\n }).map(function (d) {\n return d.toString();\n });\n if (!formatter) return data;\n var type = (0, _typeof2[\"default\"])(formatter);\n if (type === 'string') return data.map(function (d) {\n return formatter.replace('{value}', d);\n });\n if (type === 'function') return data.map(function (d, i) {\n return formatter({\n value: d,\n index: i\n });\n });\n return data;\n}\n\nfunction getLabelsPosition(barItem) {\n var label = barItem.label,\n barValueAxisPos = barItem.barValueAxisPos,\n barLabelAxisPos = barItem.barLabelAxisPos;\n var position = label.position,\n offset = label.offset;\n var axis = barItem.valueAxis.axis;\n return barValueAxisPos.map(function (_ref10, i) {\n var _ref11 = (0, _slicedToArray2[\"default\"])(_ref10, 2),\n start = _ref11[0],\n end = _ref11[1];\n\n var labelAxisPos = barLabelAxisPos[i];\n var pos = [end, labelAxisPos];\n\n if (position === 'bottom') {\n pos = [start, labelAxisPos];\n }\n\n if (position === 'center') {\n pos = [(start + end) / 2, labelAxisPos];\n }\n\n if (axis === 'y') pos.reverse();\n return getOffsetedPoint(pos, offset);\n });\n}\n\nfunction getOffsetedPoint(_ref12, _ref13) {\n var _ref14 = (0, _slicedToArray2[\"default\"])(_ref12, 2),\n x = _ref14[0],\n y = _ref14[1];\n\n var _ref15 = (0, _slicedToArray2[\"default\"])(_ref13, 2),\n ox = _ref15[0],\n oy = _ref15[1];\n\n return [x + ox, y + oy];\n}\n\nfunction getLabelStyle(barItem) {\n var color = barItem.color,\n style = barItem.label.style,\n gc = barItem.gradient.color;\n if (gc.length) color = gc[0];\n style = (0, _util2.deepMerge)({\n fill: color\n }, style);\n return style;\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/bar.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/gauge.js":
/*!**********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/gauge.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.gauge = gauge;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _gauge = __webpack_require__(/*! ../config/gauge */ \"./node_modules/@jiaminghi/charts/lib/config/gauge.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nvar _color = __webpack_require__(/*! @jiaminghi/color */ \"./node_modules/@jiaminghi/color/es/index.mjs\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction gauge(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var series = option.series;\n if (!series) series = [];\n var gauges = (0, _util2.initNeedSeries)(series, _gauge.gaugeConfig, 'gauge');\n gauges = calcGaugesCenter(gauges, chart);\n gauges = calcGaugesRadius(gauges, chart);\n gauges = calcGaugesDataRadiusAndLineWidth(gauges, chart);\n gauges = calcGaugesDataAngles(gauges, chart);\n gauges = calcGaugesDataGradient(gauges, chart);\n gauges = calcGaugesAxisTickPosition(gauges, chart);\n gauges = calcGaugesLabelPositionAndAlign(gauges, chart);\n gauges = calcGaugesLabelData(gauges, chart);\n gauges = calcGaugesDetailsPosition(gauges, chart);\n gauges = calcGaugesDetailsContent(gauges, chart);\n (0, _updater.doUpdate)({\n chart: chart,\n series: gauges,\n key: 'gaugeAxisTick',\n getGraphConfig: getAxisTickConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: gauges,\n key: 'gaugeAxisLabel',\n getGraphConfig: getAxisLabelConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: gauges,\n key: 'gaugeBackgroundArc',\n getGraphConfig: getBackgroundArcConfig,\n getStartGraphConfig: getStartBackgroundArcConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: gauges,\n key: 'gaugeArc',\n getGraphConfig: getArcConfig,\n getStartGraphConfig: getStartArcConfig,\n beforeChange: beforeChangeArc\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: gauges,\n key: 'gaugePointer',\n getGraphConfig: getPointerConfig,\n getStartGraphConfig: getStartPointerConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: gauges,\n key: 'gaugeDetails',\n getGraphConfig: getDetailsConfig\n });\n}\n\nfunction calcGaugesCenter(gauges, chart) {\n var area = chart.render.area;\n gauges.forEach(function (gaugeItem) {\n var center = gaugeItem.center;\n center = center.map(function (pos, i) {\n if (typeof pos === 'number') return pos;\n return parseInt(pos) / 100 * area[i];\n });\n gaugeItem.center = center;\n });\n return gauges;\n}\n\nfunction calcGaugesRadius(gauges, chart) {\n var area = chart.render.area;\n var maxRadius = Math.min.apply(Math, (0, _toConsumableArray2[\"default\"])(area)) / 2;\n gauges.forEach(function (gaugeItem) {\n var radius = gaugeItem.radius;\n\n if (typeof radius !== 'number') {\n radius = parseInt(radius) / 100 * maxRadius;\n }\n\n gaugeItem.radius = radius;\n });\n return gauges;\n}\n\nfunction calcGaugesDataRadiusAndLineWidth(gauges, chart) {\n var area = chart.render.area;\n var maxRadius = Math.min.apply(Math, (0, _toConsumableArray2[\"default\"])(area)) / 2;\n gauges.forEach(function (gaugeItem) {\n var radius = gaugeItem.radius,\n data = gaugeItem.data,\n arcLineWidth = gaugeItem.arcLineWidth;\n data.forEach(function (item) {\n var arcRadius = item.radius,\n lineWidth = item.lineWidth;\n if (!arcRadius) arcRadius = radius;\n if (typeof arcRadius !== 'number') arcRadius = parseInt(arcRadius) / 100 * maxRadius;\n item.radius = arcRadius;\n if (!lineWidth) lineWidth = arcLineWidth;\n item.lineWidth = lineWidth;\n });\n });\n return gauges;\n}\n\nfunction calcGaugesDataAngles(gauges, chart) {\n gauges.forEach(function (gaugeItem) {\n var startAngle = gaugeItem.startAngle,\n endAngle = gaugeItem.endAngle,\n data = gaugeItem.data,\n min = gaugeItem.min,\n max = gaugeItem.max;\n var angleMinus = endAngle - startAngle;\n var valueMinus = max - min;\n data.forEach(function (item) {\n var value = item.value;\n var itemAngle = Math.abs((value - min) / valueMinus * angleMinus);\n item.startAngle = startAngle;\n item.endAngle = startAngle + itemAngle;\n });\n });\n return gauges;\n}\n\nfunction calcGaugesDataGradient(gauges, chart) {\n gauges.forEach(function (gaugeItem) {\n var data = gaugeItem.data;\n data.forEach(function (item) {\n var color = item.color,\n gradient = item.gradient;\n if (!gradient || !gradient.length) gradient = color;\n if (!(gradient instanceof Array)) gradient = [gradient];\n item.gradient = gradient;\n });\n });\n return gauges;\n}\n\nfunction calcGaugesAxisTickPosition(gauges, chart) {\n gauges.forEach(function (gaugeItem) {\n var startAngle = gaugeItem.startAngle,\n endAngle = gaugeItem.endAngle,\n splitNum = gaugeItem.splitNum,\n center = gaugeItem.center,\n radius = gaugeItem.radius,\n arcLineWidth = gaugeItem.arcLineWidth,\n axisTick = gaugeItem.axisTick;\n var tickLength = axisTick.tickLength,\n lineWidth = axisTick.style.lineWidth;\n var angles = endAngle - startAngle;\n var outerRadius = radius - arcLineWidth / 2;\n var innerRadius = outerRadius - tickLength;\n var angleGap = angles / (splitNum - 1);\n var arcLength = 2 * Math.PI * radius * angles / (Math.PI * 2);\n var offset = Math.ceil(lineWidth / 2) / arcLength * angles;\n gaugeItem.tickAngles = [];\n gaugeItem.tickInnerRadius = [];\n gaugeItem.tickPosition = new Array(splitNum).fill(0).map(function (foo, i) {\n var angle = startAngle + angleGap * i;\n if (i === 0) angle += offset;\n if (i === splitNum - 1) angle -= offset;\n gaugeItem.tickAngles[i] = angle;\n gaugeItem.tickInnerRadius[i] = innerRadius;\n return [_util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(center).concat([outerRadius, angle])), _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(center).concat([innerRadius, angle]))];\n });\n });\n return gauges;\n}\n\nfunction calcGaugesLabelPositionAndAlign(gauges, chart) {\n gauges.forEach(function (gaugeItem) {\n var center = gaugeItem.center,\n tickInnerRadius = gaugeItem.tickInnerRadius,\n tickAngles = gaugeItem.tickAngles,\n labelGap = gaugeItem.axisLabel.labelGap;\n var position = tickAngles.map(function (angle, i) {\n return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(center).concat([tickInnerRadius[i] - labelGap, tickAngles[i]]));\n });\n var align = position.map(function (_ref) {\n var _ref2 = (0, _slicedToArray2[\"default\"])(_ref, 2),\n x = _ref2[0],\n y = _ref2[1];\n\n return {\n textAlign: x > center[0] ? 'right' : 'left',\n textBaseline: y > center[1] ? 'bottom' : 'top'\n };\n });\n gaugeItem.labelPosition = position;\n gaugeItem.labelAlign = align;\n });\n return gauges;\n}\n\nfunction calcGaugesLabelData(gauges, chart) {\n gauges.forEach(function (gaugeItem) {\n var axisLabel = gaugeItem.axisLabel,\n min = gaugeItem.min,\n max = gaugeItem.max,\n splitNum = gaugeItem.splitNum;\n var data = axisLabel.data,\n formatter = axisLabel.formatter;\n var valueGap = (max - min) / (splitNum - 1);\n var value = new Array(splitNum).fill(0).map(function (foo, i) {\n return parseInt(min + valueGap * i);\n });\n var formatterType = (0, _typeof2[\"default\"])(formatter);\n data = (0, _util2.deepMerge)(value, data).map(function (v, i) {\n var label = v;\n\n if (formatterType === 'string') {\n label = formatter.replace('{value}', v);\n }\n\n if (formatterType === 'function') {\n label = formatter({\n value: v,\n index: i\n });\n }\n\n return label;\n });\n axisLabel.data = data;\n });\n return gauges;\n}\n\nfunction calcGaugesDetailsPosition(gauges, chart) {\n gauges.forEach(function (gaugeItem) {\n var data = gaugeItem.data,\n details = gaugeItem.details,\n center = gaugeItem.center;\n var position = details.position,\n offset = details.offset;\n var detailsPosition = data.map(function (_ref3) {\n var startAngle = _ref3.startAngle,\n endAngle = _ref3.endAngle,\n radius = _ref3.radius;\n var point = null;\n\n if (position === 'center') {\n point = center;\n } else if (position === 'start') {\n point = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(center).concat([radius, startAngle]));\n } else if (position === 'end') {\n point = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(center).concat([radius, endAngle]));\n }\n\n return getOffsetedPoint(point, offset);\n });\n gaugeItem.detailsPosition = detailsPosition;\n });\n return gauges;\n}\n\nfunction calcGaugesDetailsContent(gauges, chart) {\n gauges.forEach(function (gaugeItem) {\n var data = gaugeItem.data,\n details = gaugeItem.details;\n var formatter = details.formatter;\n var formatterType = (0, _typeof2[\"default\"])(formatter);\n var contents = data.map(function (dataItem) {\n var content = dataItem.value;\n\n if (formatterType === 'string') {\n content = formatter.replace('{value}', '{nt}');\n content = content.replace('{name}', dataItem.name);\n }\n\n if (formatterType === 'function') content = formatter(dataItem);\n return content.toString();\n });\n gaugeItem.detailsContent = contents;\n });\n return gauges;\n}\n\nfunction getOffsetedPoint(_ref4, _ref5) {\n var _ref6 = (0, _slicedToArray2[\"default\"])(_ref4, 2),\n x = _ref6[0],\n y = _ref6[1];\n\n var _ref7 = (0, _slicedToArray2[\"default\"])(_ref5, 2),\n ox = _ref7[0],\n oy = _ref7[1];\n\n return [x + ox, y + oy];\n}\n\nfunction getAxisTickConfig(gaugeItem) {\n var tickPosition = gaugeItem.tickPosition,\n animationCurve = gaugeItem.animationCurve,\n animationFrame = gaugeItem.animationFrame,\n rLevel = gaugeItem.rLevel;\n return tickPosition.map(function (foo, i) {\n return {\n name: 'polyline',\n index: rLevel,\n visible: gaugeItem.axisTick.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getAxisTickShape(gaugeItem, i),\n style: getAxisTickStyle(gaugeItem, i)\n };\n });\n}\n\nfunction getAxisTickShape(gaugeItem, i) {\n var tickPosition = gaugeItem.tickPosition;\n return {\n points: tickPosition[i]\n };\n}\n\nfunction getAxisTickStyle(gaugeItem, i) {\n var style = gaugeItem.axisTick.style;\n return style;\n}\n\nfunction getAxisLabelConfig(gaugeItem) {\n var labelPosition = gaugeItem.labelPosition,\n animationCurve = gaugeItem.animationCurve,\n animationFrame = gaugeItem.animationFrame,\n rLevel = gaugeItem.rLevel;\n return labelPosition.map(function (foo, i) {\n return {\n name: 'text',\n index: rLevel,\n visible: gaugeItem.axisLabel.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getAxisLabelShape(gaugeItem, i),\n style: getAxisLabelStyle(gaugeItem, i)\n };\n });\n}\n\nfunction getAxisLabelShape(gaugeItem, i) {\n var labelPosition = gaugeItem.labelPosition,\n data = gaugeItem.axisLabel.data;\n return {\n content: data[i].toString(),\n position: labelPosition[i]\n };\n}\n\nfunction getAxisLabelStyle(gaugeItem, i) {\n var labelAlign = gaugeItem.labelAlign,\n axisLabel = gaugeItem.axisLabel;\n var style = axisLabel.style;\n return (0, _util2.deepMerge)(_objectSpread({}, labelAlign[i]), style);\n}\n\nfunction getBackgroundArcConfig(gaugeItem) {\n var animationCurve = gaugeItem.animationCurve,\n animationFrame = gaugeItem.animationFrame,\n rLevel = gaugeItem.rLevel;\n return [{\n name: 'arc',\n index: rLevel,\n visible: gaugeItem.backgroundArc.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getGaugeBackgroundArcShape(gaugeItem),\n style: getGaugeBackgroundArcStyle(gaugeItem)\n }];\n}\n\nfunction getGaugeBackgroundArcShape(gaugeItem) {\n var startAngle = gaugeItem.startAngle,\n endAngle = gaugeItem.endAngle,\n center = gaugeItem.center,\n radius = gaugeItem.radius;\n return {\n rx: center[0],\n ry: center[1],\n r: radius,\n startAngle: startAngle,\n endAngle: endAngle\n };\n}\n\nfunction getGaugeBackgroundArcStyle(gaugeItem) {\n var backgroundArc = gaugeItem.backgroundArc,\n arcLineWidth = gaugeItem.arcLineWidth;\n var style = backgroundArc.style;\n return (0, _util2.deepMerge)({\n lineWidth: arcLineWidth\n }, style);\n}\n\nfunction getStartBackgroundArcConfig(gaugeItem) {\n var config = getBackgroundArcConfig(gaugeItem)[0];\n\n var shape = _objectSpread({}, config.shape);\n\n shape.endAngle = config.shape.startAngle;\n config.shape = shape;\n return [config];\n}\n\nfunction getArcConfig(gaugeItem) {\n var data = gaugeItem.data,\n animationCurve = gaugeItem.animationCurve,\n animationFrame = gaugeItem.animationFrame,\n rLevel = gaugeItem.rLevel;\n return data.map(function (foo, i) {\n return {\n name: 'agArc',\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getGaugeArcShape(gaugeItem, i),\n style: getGaugeArcStyle(gaugeItem, i)\n };\n });\n}\n\nfunction getGaugeArcShape(gaugeItem, i) {\n var data = gaugeItem.data,\n center = gaugeItem.center,\n gradientEndAngle = gaugeItem.endAngle;\n var _data$i = data[i],\n radius = _data$i.radius,\n startAngle = _data$i.startAngle,\n endAngle = _data$i.endAngle,\n localGradient = _data$i.localGradient;\n if (localGradient) gradientEndAngle = endAngle;\n return {\n rx: center[0],\n ry: center[1],\n r: radius,\n startAngle: startAngle,\n endAngle: endAngle,\n gradientEndAngle: gradientEndAngle\n };\n}\n\nfunction getGaugeArcStyle(gaugeItem, i) {\n var data = gaugeItem.data,\n dataItemStyle = gaugeItem.dataItemStyle;\n var _data$i2 = data[i],\n lineWidth = _data$i2.lineWidth,\n gradient = _data$i2.gradient;\n gradient = gradient.map(function (c) {\n return (0, _color.getRgbaValue)(c);\n });\n return (0, _util2.deepMerge)({\n lineWidth: lineWidth,\n gradient: gradient\n }, dataItemStyle);\n}\n\nfunction getStartArcConfig(gaugeItem) {\n var configs = getArcConfig(gaugeItem);\n configs.map(function (config) {\n var shape = _objectSpread({}, config.shape);\n\n shape.endAngle = config.shape.startAngle;\n config.shape = shape;\n });\n return configs;\n}\n\nfunction beforeChangeArc(graph, config) {\n var graphGradient = graph.style.gradient;\n var cacheNum = graphGradient.length;\n var needNum = config.style.gradient.length;\n\n if (cacheNum > needNum) {\n graphGradient.splice(needNum);\n } else {\n var last = graphGradient.slice(-1)[0];\n graphGradient.push.apply(graphGradient, (0, _toConsumableArray2[\"default\"])(new Array(needNum - cacheNum).fill(0).map(function (foo) {\n return (0, _toConsumableArray2[\"default\"])(last);\n })));\n }\n}\n\nfunction getPointerConfig(gaugeItem) {\n var animationCurve = gaugeItem.animationCurve,\n animationFrame = gaugeItem.animationFrame,\n center = gaugeItem.center,\n rLevel = gaugeItem.rLevel;\n return [{\n name: 'polyline',\n index: rLevel,\n visible: gaugeItem.pointer.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getPointerShape(gaugeItem),\n style: getPointerStyle(gaugeItem),\n setGraphCenter: function setGraphCenter(foo, graph) {\n graph.style.graphCenter = center;\n }\n }];\n}\n\nfunction getPointerShape(gaugeItem) {\n var center = gaugeItem.center;\n return {\n points: getPointerPoints(center),\n close: true\n };\n}\n\nfunction getPointerStyle(gaugeItem) {\n var startAngle = gaugeItem.startAngle,\n endAngle = gaugeItem.endAngle,\n min = gaugeItem.min,\n max = gaugeItem.max,\n data = gaugeItem.data,\n pointer = gaugeItem.pointer,\n center = gaugeItem.center;\n var valueIndex = pointer.valueIndex,\n style = pointer.style;\n var value = data[valueIndex] ? data[valueIndex].value : 0;\n var angle = (value - min) / (max - min) * (endAngle - startAngle) + startAngle + Math.PI / 2;\n return (0, _util2.deepMerge)({\n rotate: (0, _util2.radianToAngle)(angle),\n scale: [1, 1],\n graphCenter: center\n }, style);\n}\n\nfunction getPointerPoints(_ref8) {\n var _ref9 = (0, _slicedToArray2[\"default\"])(_ref8, 2),\n x = _ref9[0],\n y = _ref9[1];\n\n var point1 = [x, y - 40];\n var point2 = [x + 5, y];\n var point3 = [x, y + 10];\n var point4 = [x - 5, y];\n return [point1, point2, point3, point4];\n}\n\nfunction getStartPointerConfig(gaugeItem) {\n var startAngle = gaugeItem.startAngle;\n var config = getPointerConfig(gaugeItem)[0];\n config.style.rotate = (0, _util2.radianToAngle)(startAngle + Math.PI / 2);\n return [config];\n}\n\nfunction getDetailsConfig(gaugeItem) {\n var detailsPosition = gaugeItem.detailsPosition,\n animationCurve = gaugeItem.animationCurve,\n animationFrame = gaugeItem.animationFrame,\n rLevel = gaugeItem.rLevel;\n var visible = gaugeItem.details.show;\n return detailsPosition.map(function (foo, i) {\n return {\n name: 'numberText',\n index: rLevel,\n visible: visible,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getDetailsShape(gaugeItem, i),\n style: getDetailsStyle(gaugeItem, i)\n };\n });\n}\n\nfunction getDetailsShape(gaugeItem, i) {\n var detailsPosition = gaugeItem.detailsPosition,\n detailsContent = gaugeItem.detailsContent,\n data = gaugeItem.data,\n details = gaugeItem.details;\n var position = detailsPosition[i];\n var content = detailsContent[i];\n var dataValue = data[i].value;\n var toFixed = details.valueToFixed;\n return {\n number: [dataValue],\n content: content,\n position: position,\n toFixed: toFixed\n };\n}\n\nfunction getDetailsStyle(gaugeItem, i) {\n var details = gaugeItem.details,\n data = gaugeItem.data;\n var style = details.style;\n var color = data[i].color;\n return (0, _util2.deepMerge)({\n fill: color\n }, style);\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/gauge.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/grid.js":
/*!*********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/grid.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.grid = grid;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _config = __webpack_require__(/*! ../config */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction grid(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var grid = option.grid;\n grid = (0, _util2.deepMerge)((0, _util.deepClone)(_config.gridConfig, true), grid || {});\n (0, _updater.doUpdate)({\n chart: chart,\n series: [grid],\n key: 'grid',\n getGraphConfig: getGridConfig\n });\n}\n\nfunction getGridConfig(gridItem, updater) {\n var animationCurve = gridItem.animationCurve,\n animationFrame = gridItem.animationFrame,\n rLevel = gridItem.rLevel;\n var shape = getGridShape(gridItem, updater);\n var style = getGridStyle(gridItem);\n updater.chart.gridArea = _objectSpread({}, shape);\n return [{\n name: 'rect',\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: style\n }];\n}\n\nfunction getGridShape(gridItem, updater) {\n var _updater$chart$render = (0, _slicedToArray2[\"default\"])(updater.chart.render.area, 2),\n w = _updater$chart$render[0],\n h = _updater$chart$render[1];\n\n var left = getNumberValue(gridItem.left, w);\n var right = getNumberValue(gridItem.right, w);\n var top = getNumberValue(gridItem.top, h);\n var bottom = getNumberValue(gridItem.bottom, h);\n var width = w - left - right;\n var height = h - top - bottom;\n return {\n x: left,\n y: top,\n w: width,\n h: height\n };\n}\n\nfunction getNumberValue(val, all) {\n if (typeof val === 'number') return val;\n if (typeof val !== 'string') return 0;\n return all * parseInt(val) / 100;\n}\n\nfunction getGridStyle(gridItem) {\n var style = gridItem.style;\n return style;\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/grid.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/index.js":
/*!**********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/index.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"mergeColor\", {\n enumerable: true,\n get: function get() {\n return _mergeColor.mergeColor;\n }\n});\nObject.defineProperty(exports, \"title\", {\n enumerable: true,\n get: function get() {\n return _title.title;\n }\n});\nObject.defineProperty(exports, \"grid\", {\n enumerable: true,\n get: function get() {\n return _grid.grid;\n }\n});\nObject.defineProperty(exports, \"axis\", {\n enumerable: true,\n get: function get() {\n return _axis.axis;\n }\n});\nObject.defineProperty(exports, \"line\", {\n enumerable: true,\n get: function get() {\n return _line.line;\n }\n});\nObject.defineProperty(exports, \"bar\", {\n enumerable: true,\n get: function get() {\n return _bar.bar;\n }\n});\nObject.defineProperty(exports, \"pie\", {\n enumerable: true,\n get: function get() {\n return _pie.pie;\n }\n});\nObject.defineProperty(exports, \"radarAxis\", {\n enumerable: true,\n get: function get() {\n return _radarAxis.radarAxis;\n }\n});\nObject.defineProperty(exports, \"radar\", {\n enumerable: true,\n get: function get() {\n return _radar.radar;\n }\n});\nObject.defineProperty(exports, \"gauge\", {\n enumerable: true,\n get: function get() {\n return _gauge.gauge;\n }\n});\nObject.defineProperty(exports, \"legend\", {\n enumerable: true,\n get: function get() {\n return _legend.legend;\n }\n});\n\nvar _mergeColor = __webpack_require__(/*! ./mergeColor */ \"./node_modules/@jiaminghi/charts/lib/core/mergeColor.js\");\n\nvar _title = __webpack_require__(/*! ./title */ \"./node_modules/@jiaminghi/charts/lib/core/title.js\");\n\nvar _grid = __webpack_require__(/*! ./grid */ \"./node_modules/@jiaminghi/charts/lib/core/grid.js\");\n\nvar _axis = __webpack_require__(/*! ./axis */ \"./node_modules/@jiaminghi/charts/lib/core/axis.js\");\n\nvar _line = __webpack_require__(/*! ./line */ \"./node_modules/@jiaminghi/charts/lib/core/line.js\");\n\nvar _bar = __webpack_require__(/*! ./bar */ \"./node_modules/@jiaminghi/charts/lib/core/bar.js\");\n\nvar _pie = __webpack_require__(/*! ./pie */ \"./node_modules/@jiaminghi/charts/lib/core/pie.js\");\n\nvar _radarAxis = __webpack_require__(/*! ./radarAxis */ \"./node_modules/@jiaminghi/charts/lib/core/radarAxis.js\");\n\nvar _radar = __webpack_require__(/*! ./radar */ \"./node_modules/@jiaminghi/charts/lib/core/radar.js\");\n\nvar _gauge = __webpack_require__(/*! ./gauge */ \"./node_modules/@jiaminghi/charts/lib/core/gauge.js\");\n\nvar _legend = __webpack_require__(/*! ./legend */ \"./node_modules/@jiaminghi/charts/lib/core/legend.js\");\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/legend.js":
/*!***********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/legend.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.legend = legend;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _config = __webpack_require__(/*! ../config */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction legend(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var legend = option.legend;\n\n if (legend) {\n legend = (0, _util2.deepMerge)((0, _util.deepClone)(_config.legendConfig, true), legend);\n legend = initLegendData(legend);\n legend = filterInvalidData(legend, option, chart);\n legend = calcLegendTextWidth(legend, chart);\n legend = calcLegendPosition(legend, chart);\n legend = [legend];\n } else {\n legend = [];\n }\n\n (0, _updater.doUpdate)({\n chart: chart,\n series: legend,\n key: 'legendIcon',\n getGraphConfig: getIconConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: legend,\n key: 'legendText',\n getGraphConfig: getTextConfig\n });\n}\n\nfunction initLegendData(legend) {\n var data = legend.data;\n legend.data = data.map(function (item) {\n var itemType = (0, _typeof2[\"default\"])(item);\n\n if (itemType === 'string') {\n return {\n name: item\n };\n } else if (itemType === 'object') {\n return item;\n }\n\n return {\n name: ''\n };\n });\n return legend;\n}\n\nfunction filterInvalidData(legend, option, chart) {\n var series = option.series;\n var legendStatus = chart.legendStatus;\n var data = legend.data.filter(function (item) {\n var name = item.name;\n var result = series.find(function (_ref) {\n var sn = _ref.name;\n return name === sn;\n });\n if (!result) return false;\n if (!item.color) item.color = result.color;\n if (!item.icon) item.icon = result.type;\n return item;\n });\n if (!legendStatus || legendStatus.length !== legend.data.length) legendStatus = new Array(legend.data.length).fill(true);\n data.forEach(function (item, i) {\n return item.status = legendStatus[i];\n });\n legend.data = data;\n chart.legendStatus = legendStatus;\n return legend;\n}\n\nfunction calcLegendTextWidth(legend, chart) {\n var ctx = chart.render.ctx;\n var data = legend.data,\n textStyle = legend.textStyle,\n textUnselectedStyle = legend.textUnselectedStyle;\n data.forEach(function (item) {\n var status = item.status,\n name = item.name;\n item.textWidth = getTextWidth(ctx, name, status ? textStyle : textUnselectedStyle);\n });\n return legend;\n}\n\nfunction getTextWidth(ctx, text, style) {\n ctx.font = getFontConfig(style);\n return ctx.measureText(text).width;\n}\n\nfunction getFontConfig(style) {\n var fontFamily = style.fontFamily,\n fontSize = style.fontSize;\n return \"\".concat(fontSize, \"px \").concat(fontFamily);\n}\n\nfunction calcLegendPosition(legend, chart) {\n var orient = legend.orient;\n\n if (orient === 'vertical') {\n calcVerticalPosition(legend, chart);\n } else {\n calcHorizontalPosition(legend, chart);\n }\n\n return legend;\n}\n\nfunction calcHorizontalPosition(legend, chart) {\n var iconHeight = legend.iconHeight,\n itemGap = legend.itemGap;\n var lines = calcDefaultHorizontalPosition(legend, chart);\n var xOffsets = lines.map(function (line) {\n return getHorizontalXOffset(line, legend, chart);\n });\n var yOffset = getHorizontalYOffset(legend, chart);\n var align = {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n lines.forEach(function (line, i) {\n return line.forEach(function (item) {\n var iconPosition = item.iconPosition,\n textPosition = item.textPosition;\n var xOffset = xOffsets[i];\n var realYOffset = yOffset + i * (itemGap + iconHeight);\n item.iconPosition = mergeOffset(iconPosition, [xOffset, realYOffset]);\n item.textPosition = mergeOffset(textPosition, [xOffset, realYOffset]);\n item.align = align;\n });\n });\n}\n\nfunction calcDefaultHorizontalPosition(legend, chart) {\n var data = legend.data,\n iconWidth = legend.iconWidth;\n var w = chart.render.area[0];\n var startIndex = 0;\n var lines = [[]];\n data.forEach(function (item, i) {\n var beforeWidth = getBeforeWidth(startIndex, i, legend);\n var endXPos = beforeWidth + iconWidth + 5 + item.textWidth;\n\n if (endXPos >= w) {\n startIndex = i;\n beforeWidth = getBeforeWidth(startIndex, i, legend);\n lines.push([]);\n }\n\n item.iconPosition = [beforeWidth, 0];\n item.textPosition = [beforeWidth + iconWidth + 5, 0];\n lines.slice(-1)[0].push(item);\n });\n return lines;\n}\n\nfunction getBeforeWidth(startIndex, currentIndex, legend) {\n var data = legend.data,\n iconWidth = legend.iconWidth,\n itemGap = legend.itemGap;\n var beforeItem = data.slice(startIndex, currentIndex);\n return (0, _util2.mulAdd)(beforeItem.map(function (_ref2) {\n var textWidth = _ref2.textWidth;\n return textWidth;\n })) + (currentIndex - startIndex) * (itemGap + 5 + iconWidth);\n}\n\nfunction getHorizontalXOffset(data, legend, chart) {\n var left = legend.left,\n right = legend.right,\n iconWidth = legend.iconWidth,\n itemGap = legend.itemGap;\n var w = chart.render.area[0];\n var dataNum = data.length;\n var allWidth = (0, _util2.mulAdd)(data.map(function (_ref3) {\n var textWidth = _ref3.textWidth;\n return textWidth;\n })) + dataNum * (5 + iconWidth) + (dataNum - 1) * itemGap;\n var horizontal = [left, right].findIndex(function (pos) {\n return pos !== 'auto';\n });\n\n if (horizontal === -1) {\n return (w - allWidth) / 2;\n } else if (horizontal === 0) {\n if (typeof left === 'number') return left;\n return parseInt(left) / 100 * w;\n } else {\n if (typeof right !== 'number') right = parseInt(right) / 100 * w;\n return w - (allWidth + right);\n }\n}\n\nfunction getHorizontalYOffset(legend, chart) {\n var top = legend.top,\n bottom = legend.bottom,\n iconHeight = legend.iconHeight;\n var h = chart.render.area[1];\n var vertical = [top, bottom].findIndex(function (pos) {\n return pos !== 'auto';\n });\n var halfIconHeight = iconHeight / 2;\n\n if (vertical === -1) {\n var _chart$gridArea = chart.gridArea,\n y = _chart$gridArea.y,\n height = _chart$gridArea.h;\n return y + height + 45 - halfIconHeight;\n } else if (vertical === 0) {\n if (typeof top === 'number') return top - halfIconHeight;\n return parseInt(top) / 100 * h - halfIconHeight;\n } else {\n if (typeof bottom !== 'number') bottom = parseInt(bottom) / 100 * h;\n return h - bottom - halfIconHeight;\n }\n}\n\nfunction mergeOffset(_ref4, _ref5) {\n var _ref6 = (0, _slicedToArray2[\"default\"])(_ref4, 2),\n x = _ref6[0],\n y = _ref6[1];\n\n var _ref7 = (0, _slicedToArray2[\"default\"])(_ref5, 2),\n ox = _ref7[0],\n oy = _ref7[1];\n\n return [x + ox, y + oy];\n}\n\nfunction calcVerticalPosition(legend, chart) {\n var _getVerticalXOffset = getVerticalXOffset(legend, chart),\n _getVerticalXOffset2 = (0, _slicedToArray2[\"default\"])(_getVerticalXOffset, 2),\n isRight = _getVerticalXOffset2[0],\n xOffset = _getVerticalXOffset2[1];\n\n var yOffset = getVerticalYOffset(legend, chart);\n calcDefaultVerticalPosition(legend, isRight);\n var align = {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n legend.data.forEach(function (item) {\n var textPosition = item.textPosition,\n iconPosition = item.iconPosition;\n item.textPosition = mergeOffset(textPosition, [xOffset, yOffset]);\n item.iconPosition = mergeOffset(iconPosition, [xOffset, yOffset]);\n item.align = align;\n });\n}\n\nfunction getVerticalXOffset(legend, chart) {\n var left = legend.left,\n right = legend.right;\n var w = chart.render.area[0];\n var horizontal = [left, right].findIndex(function (pos) {\n return pos !== 'auto';\n });\n\n if (horizontal === -1) {\n return [true, w - 10];\n } else {\n var offset = [left, right][horizontal];\n if (typeof offset !== 'number') offset = parseInt(offset) / 100 * w;\n return [Boolean(horizontal), offset];\n }\n}\n\nfunction getVerticalYOffset(legend, chart) {\n var iconHeight = legend.iconHeight,\n itemGap = legend.itemGap,\n data = legend.data,\n top = legend.top,\n bottom = legend.bottom;\n var h = chart.render.area[1];\n var dataNum = data.length;\n var allHeight = dataNum * iconHeight + (dataNum - 1) * itemGap;\n var vertical = [top, bottom].findIndex(function (pos) {\n return pos !== 'auto';\n });\n\n if (vertical === -1) {\n return (h - allHeight) / 2;\n } else {\n var offset = [top, bottom][vertical];\n if (typeof offset !== 'number') offset = parseInt(offset) / 100 * h;\n if (vertical === 1) offset = h - offset - allHeight;\n return offset;\n }\n}\n\nfunction calcDefaultVerticalPosition(legend, isRight) {\n var data = legend.data,\n iconWidth = legend.iconWidth,\n iconHeight = legend.iconHeight,\n itemGap = legend.itemGap;\n var halfIconHeight = iconHeight / 2;\n data.forEach(function (item, i) {\n var textWidth = item.textWidth;\n var yPos = (iconHeight + itemGap) * i + halfIconHeight;\n var iconXPos = isRight ? 0 - iconWidth : 0;\n var textXpos = isRight ? iconXPos - 5 - textWidth : iconWidth + 5;\n item.iconPosition = [iconXPos, yPos];\n item.textPosition = [textXpos, yPos];\n });\n}\n\nfunction getIconConfig(legendItem, updater) {\n var data = legendItem.data,\n selectAble = legendItem.selectAble,\n animationCurve = legendItem.animationCurve,\n animationFrame = legendItem.animationFrame,\n rLevel = legendItem.rLevel;\n return data.map(function (item, i) {\n return (0, _defineProperty2[\"default\"])({\n name: item.icon === 'line' ? 'lineIcon' : 'rect',\n index: rLevel,\n visible: legendItem.show,\n hover: selectAble,\n click: selectAble,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getIconShape(legendItem, i),\n style: getIconStyle(legendItem, i)\n }, \"click\", createClickCallBack(legendItem, i, updater));\n });\n}\n\nfunction getIconShape(legendItem, i) {\n var data = legendItem.data,\n iconWidth = legendItem.iconWidth,\n iconHeight = legendItem.iconHeight;\n\n var _data$i$iconPosition = (0, _slicedToArray2[\"default\"])(data[i].iconPosition, 2),\n x = _data$i$iconPosition[0],\n y = _data$i$iconPosition[1];\n\n var halfIconHeight = iconHeight / 2;\n return {\n x: x,\n y: y - halfIconHeight,\n w: iconWidth,\n h: iconHeight\n };\n}\n\nfunction getIconStyle(legendItem, i) {\n var data = legendItem.data,\n iconStyle = legendItem.iconStyle,\n iconUnselectedStyle = legendItem.iconUnselectedStyle;\n var _data$i = data[i],\n status = _data$i.status,\n color = _data$i.color;\n var style = status ? iconStyle : iconUnselectedStyle;\n return (0, _util2.deepMerge)({\n fill: color\n }, style);\n}\n\nfunction getTextConfig(legendItem, updater) {\n var data = legendItem.data,\n selectAble = legendItem.selectAble,\n animationCurve = legendItem.animationCurve,\n animationFrame = legendItem.animationFrame,\n rLevel = legendItem.rLevel;\n return data.map(function (foo, i) {\n return {\n name: 'text',\n index: rLevel,\n visible: legendItem.show,\n hover: selectAble,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n hoverRect: getTextHoverRect(legendItem, i),\n shape: getTextShape(legendItem, i),\n style: getTextStyle(legendItem, i),\n click: createClickCallBack(legendItem, i, updater)\n };\n });\n}\n\nfunction getTextShape(legendItem, i) {\n var _legendItem$data$i = legendItem.data[i],\n textPosition = _legendItem$data$i.textPosition,\n name = _legendItem$data$i.name;\n return {\n content: name,\n position: textPosition\n };\n}\n\nfunction getTextStyle(legendItem, i) {\n var textStyle = legendItem.textStyle,\n textUnselectedStyle = legendItem.textUnselectedStyle;\n var _legendItem$data$i2 = legendItem.data[i],\n status = _legendItem$data$i2.status,\n align = _legendItem$data$i2.align;\n var style = status ? textStyle : textUnselectedStyle;\n return (0, _util2.deepMerge)((0, _util.deepClone)(style, true), align);\n}\n\nfunction getTextHoverRect(legendItem, i) {\n var textStyle = legendItem.textStyle,\n textUnselectedStyle = legendItem.textUnselectedStyle;\n\n var _legendItem$data$i3 = legendItem.data[i],\n status = _legendItem$data$i3.status,\n _legendItem$data$i3$t = (0, _slicedToArray2[\"default\"])(_legendItem$data$i3.textPosition, 2),\n x = _legendItem$data$i3$t[0],\n y = _legendItem$data$i3$t[1],\n textWidth = _legendItem$data$i3.textWidth;\n\n var style = status ? textStyle : textUnselectedStyle;\n var fontSize = style.fontSize;\n return [x, y - fontSize / 2, textWidth, fontSize];\n}\n\nfunction createClickCallBack(legendItem, index, updater) {\n var name = legendItem.data[index].name;\n return function () {\n var _updater$chart = updater.chart,\n legendStatus = _updater$chart.legendStatus,\n option = _updater$chart.option;\n var status = !legendStatus[index];\n var change = option.series.find(function (_ref9) {\n var sn = _ref9.name;\n return sn === name;\n });\n change.show = status;\n legendStatus[index] = status;\n updater.chart.setOption(option);\n };\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/legend.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/line.js":
/*!*********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/line.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.line = line;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _config = __webpack_require__(/*! ../config */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _bezierCurve = _interopRequireDefault(__webpack_require__(/*! @jiaminghi/bezier-curve */ \"./node_modules/@jiaminghi/bezier-curve/lib/index.js\"));\n\nvar _util = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar polylineToBezierCurve = _bezierCurve[\"default\"].polylineToBezierCurve,\n getBezierCurveLength = _bezierCurve[\"default\"].getBezierCurveLength;\n\nfunction line(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var xAxis = option.xAxis,\n yAxis = option.yAxis,\n series = option.series;\n var lines = [];\n\n if (xAxis && yAxis && series) {\n lines = (0, _util.initNeedSeries)(series, _config.lineConfig, 'line');\n lines = calcLinesPosition(lines, chart);\n }\n\n (0, _updater.doUpdate)({\n chart: chart,\n series: lines,\n key: 'lineArea',\n getGraphConfig: getLineAreaConfig,\n getStartGraphConfig: getStartLineAreaConfig,\n beforeUpdate: beforeUpdateLineAndArea,\n beforeChange: beforeChangeLineAndArea\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: lines,\n key: 'line',\n getGraphConfig: getLineConfig,\n getStartGraphConfig: getStartLineConfig,\n beforeUpdate: beforeUpdateLineAndArea,\n beforeChange: beforeChangeLineAndArea\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: lines,\n key: 'linePoint',\n getGraphConfig: getPointConfig,\n getStartGraphConfig: getStartPointConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: lines,\n key: 'lineLabel',\n getGraphConfig: getLabelConfig\n });\n}\n\nfunction calcLinesPosition(lines, chart) {\n var axisData = chart.axisData;\n return lines.map(function (lineItem) {\n var lineData = (0, _util.mergeSameStackData)(lineItem, lines);\n lineData = mergeNonNumber(lineItem, lineData);\n var lineAxis = getLineAxis(lineItem, axisData);\n var linePosition = getLinePosition(lineData, lineAxis);\n var lineFillBottomPos = getLineFillBottomPos(lineAxis);\n return _objectSpread(_objectSpread({}, lineItem), {}, {\n linePosition: linePosition.filter(function (p) {\n return p;\n }),\n lineFillBottomPos: lineFillBottomPos\n });\n });\n}\n\nfunction mergeNonNumber(lineItem, lineData) {\n var data = lineItem.data;\n return lineData.map(function (v, i) {\n return typeof data[i] === 'number' ? v : null;\n });\n}\n\nfunction getLineAxis(line, axisData) {\n var xAxisIndex = line.xAxisIndex,\n yAxisIndex = line.yAxisIndex;\n var xAxis = axisData.find(function (_ref) {\n var axis = _ref.axis,\n index = _ref.index;\n return axis === 'x' && index === xAxisIndex;\n });\n var yAxis = axisData.find(function (_ref2) {\n var axis = _ref2.axis,\n index = _ref2.index;\n return axis === 'y' && index === yAxisIndex;\n });\n return [xAxis, yAxis];\n}\n\nfunction getLinePosition(lineData, lineAxis) {\n var valueAxisIndex = lineAxis.findIndex(function (_ref3) {\n var data = _ref3.data;\n return data === 'value';\n });\n var valueAxis = lineAxis[valueAxisIndex];\n var labelAxis = lineAxis[1 - valueAxisIndex];\n var linePosition = valueAxis.linePosition,\n axis = valueAxis.axis;\n var tickPosition = labelAxis.tickPosition;\n var tickNum = tickPosition.length;\n var valueAxisPosIndex = axis === 'x' ? 0 : 1;\n var valueAxisStartPos = linePosition[0][valueAxisPosIndex];\n var valueAxisEndPos = linePosition[1][valueAxisPosIndex];\n var valueAxisPosMinus = valueAxisEndPos - valueAxisStartPos;\n var maxValue = valueAxis.maxValue,\n minValue = valueAxis.minValue;\n var valueMinus = maxValue - minValue;\n var position = new Array(tickNum).fill(0).map(function (foo, i) {\n var v = lineData[i];\n if (typeof v !== 'number') return null;\n var valuePercent = (v - minValue) / valueMinus;\n if (valueMinus === 0) valuePercent = 0;\n return valuePercent * valueAxisPosMinus + valueAxisStartPos;\n });\n return position.map(function (vPos, i) {\n if (i >= tickNum || typeof vPos !== 'number') return null;\n var pos = [vPos, tickPosition[i][1 - valueAxisPosIndex]];\n if (valueAxisPosIndex === 0) return pos;\n pos.reverse();\n return pos;\n });\n}\n\nfunction getLineFillBottomPos(lineAxis) {\n var valueAxis = lineAxis.find(function (_ref4) {\n var data = _ref4.data;\n return data === 'value';\n });\n var axis = valueAxis.axis,\n linePosition = valueAxis.linePosition,\n minValue = valueAxis.minValue,\n maxValue = valueAxis.maxValue;\n var changeIndex = axis === 'x' ? 0 : 1;\n var changeValue = linePosition[0][changeIndex];\n\n if (minValue < 0 && maxValue > 0) {\n var valueMinus = maxValue - minValue;\n var posMinus = Math.abs(linePosition[0][changeIndex] - linePosition[1][changeIndex]);\n var offset = Math.abs(minValue) / valueMinus * posMinus;\n if (axis === 'y') offset *= -1;\n changeValue += offset;\n }\n\n return {\n changeIndex: changeIndex,\n changeValue: changeValue\n };\n}\n\nfunction getLineAreaConfig(lineItem) {\n var animationCurve = lineItem.animationCurve,\n animationFrame = lineItem.animationFrame,\n lineFillBottomPos = lineItem.lineFillBottomPos,\n rLevel = lineItem.rLevel;\n return [{\n name: getLineGraphName(lineItem),\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n visible: lineItem.lineArea.show,\n lineFillBottomPos: lineFillBottomPos,\n shape: getLineAndAreaShape(lineItem),\n style: getLineAreaStyle(lineItem),\n drawed: lineAreaDrawed\n }];\n}\n\nfunction getLineAndAreaShape(lineItem) {\n var linePosition = lineItem.linePosition;\n return {\n points: linePosition\n };\n}\n\nfunction getLineAreaStyle(lineItem) {\n var lineArea = lineItem.lineArea,\n color = lineItem.color;\n var gradient = lineArea.gradient,\n style = lineArea.style;\n var fillColor = [style.fill || color];\n var gradientColor = (0, _util.deepMerge)(fillColor, gradient);\n if (gradientColor.length === 1) gradientColor.push(gradientColor[0]);\n var gradientParams = getGradientParams(lineItem);\n style = _objectSpread(_objectSpread({}, style), {}, {\n stroke: 'rgba(0, 0, 0, 0)'\n });\n return (0, _util.deepMerge)({\n gradientColor: gradientColor,\n gradientParams: gradientParams,\n gradientType: 'linear',\n gradientWith: 'fill'\n }, style);\n}\n\nfunction getGradientParams(lineItem) {\n var lineFillBottomPos = lineItem.lineFillBottomPos,\n linePosition = lineItem.linePosition;\n var changeIndex = lineFillBottomPos.changeIndex,\n changeValue = lineFillBottomPos.changeValue;\n var mainPos = linePosition.map(function (p) {\n return p[changeIndex];\n });\n var maxPos = Math.max.apply(Math, (0, _toConsumableArray2[\"default\"])(mainPos));\n var minPos = Math.min.apply(Math, (0, _toConsumableArray2[\"default\"])(mainPos));\n var beginPos = maxPos;\n if (changeIndex === 1) beginPos = minPos;\n\n if (changeIndex === 1) {\n return [0, beginPos, 0, changeValue];\n } else {\n return [beginPos, 0, changeValue, 0];\n }\n}\n\nfunction lineAreaDrawed(_ref5, _ref6) {\n var lineFillBottomPos = _ref5.lineFillBottomPos,\n shape = _ref5.shape;\n var ctx = _ref6.ctx;\n var points = shape.points;\n var changeIndex = lineFillBottomPos.changeIndex,\n changeValue = lineFillBottomPos.changeValue;\n var linePoint1 = (0, _toConsumableArray2[\"default\"])(points[points.length - 1]);\n var linePoint2 = (0, _toConsumableArray2[\"default\"])(points[0]);\n linePoint1[changeIndex] = changeValue;\n linePoint2[changeIndex] = changeValue;\n ctx.lineTo.apply(ctx, (0, _toConsumableArray2[\"default\"])(linePoint1));\n ctx.lineTo.apply(ctx, (0, _toConsumableArray2[\"default\"])(linePoint2));\n ctx.closePath();\n ctx.fill();\n}\n\nfunction getStartLineAreaConfig(lineItem) {\n var config = getLineAreaConfig(lineItem)[0];\n\n var style = _objectSpread({}, config.style);\n\n style.opacity = 0;\n config.style = style;\n return [config];\n}\n\nfunction beforeUpdateLineAndArea(graphs, lineItem, i, updater) {\n var cache = graphs[i];\n if (!cache) return;\n var currentName = getLineGraphName(lineItem);\n var render = updater.chart.render;\n var name = cache[0].name;\n var delAll = currentName !== name;\n if (!delAll) return;\n cache.forEach(function (g) {\n return render.delGraph(g);\n });\n graphs[i] = null;\n}\n\nfunction beforeChangeLineAndArea(graph, config) {\n var points = config.shape.points;\n var graphPoints = graph.shape.points;\n var graphPointsNum = graphPoints.length;\n var pointsNum = points.length;\n\n if (pointsNum > graphPointsNum) {\n var lastPoint = graphPoints.slice(-1)[0];\n var newAddPoints = new Array(pointsNum - graphPointsNum).fill(0).map(function (foo) {\n return (0, _toConsumableArray2[\"default\"])(lastPoint);\n });\n graphPoints.push.apply(graphPoints, (0, _toConsumableArray2[\"default\"])(newAddPoints));\n } else if (pointsNum < graphPointsNum) {\n graphPoints.splice(pointsNum);\n }\n}\n\nfunction getLineConfig(lineItem) {\n var animationCurve = lineItem.animationCurve,\n animationFrame = lineItem.animationFrame,\n rLevel = lineItem.rLevel;\n return [{\n name: getLineGraphName(lineItem),\n index: rLevel + 1,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getLineAndAreaShape(lineItem),\n style: getLineStyle(lineItem)\n }];\n}\n\nfunction getLineGraphName(lineItem) {\n var smooth = lineItem.smooth;\n return smooth ? 'smoothline' : 'polyline';\n}\n\nfunction getLineStyle(lineItem) {\n var lineStyle = lineItem.lineStyle,\n color = lineItem.color,\n smooth = lineItem.smooth,\n linePosition = lineItem.linePosition;\n var lineLength = getLineLength(linePosition, smooth);\n return (0, _util.deepMerge)({\n stroke: color,\n lineDash: [lineLength, 0]\n }, lineStyle);\n}\n\nfunction getLineLength(points) {\n var smooth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!smooth) return (0, _util.getPolylineLength)(points);\n var curve = polylineToBezierCurve(points);\n return getBezierCurveLength(curve);\n}\n\nfunction getStartLineConfig(lineItem) {\n var lineDash = lineItem.lineStyle.lineDash;\n var config = getLineConfig(lineItem)[0];\n var realLineDash = config.style.lineDash;\n\n if (lineDash) {\n realLineDash = [0, 0];\n } else {\n realLineDash = (0, _toConsumableArray2[\"default\"])(realLineDash).reverse();\n }\n\n config.style.lineDash = realLineDash;\n return [config];\n}\n\nfunction getPointConfig(lineItem) {\n var animationCurve = lineItem.animationCurve,\n animationFrame = lineItem.animationFrame,\n rLevel = lineItem.rLevel;\n var shapes = getPointShapes(lineItem);\n var style = getPointStyle(lineItem);\n return shapes.map(function (shape) {\n return {\n name: 'circle',\n index: rLevel + 2,\n visible: lineItem.linePoint.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: style\n };\n });\n}\n\nfunction getPointShapes(lineItem) {\n var linePosition = lineItem.linePosition,\n radius = lineItem.linePoint.radius;\n return linePosition.map(function (_ref7) {\n var _ref8 = (0, _slicedToArray2[\"default\"])(_ref7, 2),\n rx = _ref8[0],\n ry = _ref8[1];\n\n return {\n r: radius,\n rx: rx,\n ry: ry\n };\n });\n}\n\nfunction getPointStyle(lineItem) {\n var color = lineItem.color,\n style = lineItem.linePoint.style;\n return (0, _util.deepMerge)({\n stroke: color\n }, style);\n}\n\nfunction getStartPointConfig(lineItem) {\n var configs = getPointConfig(lineItem);\n configs.forEach(function (config) {\n config.shape.r = 0.1;\n });\n return configs;\n}\n\nfunction getLabelConfig(lineItem) {\n var animationCurve = lineItem.animationCurve,\n animationFrame = lineItem.animationFrame,\n rLevel = lineItem.rLevel;\n var shapes = getLabelShapes(lineItem);\n var style = getLabelStyle(lineItem);\n return shapes.map(function (shape, i) {\n return {\n name: 'text',\n index: rLevel + 3,\n visible: lineItem.label.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: style\n };\n });\n}\n\nfunction getLabelShapes(lineItem) {\n var contents = formatterLabel(lineItem);\n var position = getLabelPosition(lineItem);\n return contents.map(function (content, i) {\n return {\n content: content,\n position: position[i]\n };\n });\n}\n\nfunction getLabelPosition(lineItem) {\n var linePosition = lineItem.linePosition,\n lineFillBottomPos = lineItem.lineFillBottomPos,\n label = lineItem.label;\n var position = label.position,\n offset = label.offset;\n var changeIndex = lineFillBottomPos.changeIndex,\n changeValue = lineFillBottomPos.changeValue;\n return linePosition.map(function (pos) {\n if (position === 'bottom') {\n pos = (0, _toConsumableArray2[\"default\"])(pos);\n pos[changeIndex] = changeValue;\n }\n\n if (position === 'center') {\n var bottom = (0, _toConsumableArray2[\"default\"])(pos);\n bottom[changeIndex] = changeValue;\n pos = getCenterLabelPoint(pos, bottom);\n }\n\n return getOffsetedPoint(pos, offset);\n });\n}\n\nfunction getOffsetedPoint(_ref9, _ref10) {\n var _ref11 = (0, _slicedToArray2[\"default\"])(_ref9, 2),\n x = _ref11[0],\n y = _ref11[1];\n\n var _ref12 = (0, _slicedToArray2[\"default\"])(_ref10, 2),\n ox = _ref12[0],\n oy = _ref12[1];\n\n return [x + ox, y + oy];\n}\n\nfunction getCenterLabelPoint(_ref13, _ref14) {\n var _ref15 = (0, _slicedToArray2[\"default\"])(_ref13, 2),\n ax = _ref15[0],\n ay = _ref15[1];\n\n var _ref16 = (0, _slicedToArray2[\"default\"])(_ref14, 2),\n bx = _ref16[0],\n by = _ref16[1];\n\n return [(ax + bx) / 2, (ay + by) / 2];\n}\n\nfunction formatterLabel(lineItem) {\n var data = lineItem.data,\n formatter = lineItem.label.formatter;\n data = data.filter(function (d) {\n return typeof d === 'number';\n }).map(function (d) {\n return d.toString();\n });\n if (!formatter) return data;\n var type = (0, _typeof2[\"default\"])(formatter);\n if (type === 'string') return data.map(function (d) {\n return formatter.replace('{value}', d);\n });\n if (type === 'function') return data.map(function (value, index) {\n return formatter({\n value: value,\n index: index\n });\n });\n return data;\n}\n\nfunction getLabelStyle(lineItem) {\n var color = lineItem.color,\n style = lineItem.label.style;\n return (0, _util.deepMerge)({\n fill: color\n }, style);\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/line.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/mergeColor.js":
/*!***************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/mergeColor.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.mergeColor = mergeColor;\n\nvar _config = __webpack_require__(/*! ../config */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction mergeColor(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var defaultColor = (0, _util.deepClone)(_config.colorConfig, true);\n var color = option.color,\n series = option.series;\n if (!series) series = [];\n if (!color) color = [];\n option.color = color = (0, _util2.deepMerge)(defaultColor, color);\n if (!series.length) return;\n var colorNum = color.length;\n series.forEach(function (item, i) {\n if (item.color) return;\n item.color = color[i % colorNum];\n });\n var pies = series.filter(function (_ref) {\n var type = _ref.type;\n return type === 'pie';\n });\n pies.forEach(function (pie) {\n return pie.data.forEach(function (di, i) {\n return di.color = color[i % colorNum];\n });\n });\n var gauges = series.filter(function (_ref2) {\n var type = _ref2.type;\n return type === 'gauge';\n });\n gauges.forEach(function (gauge) {\n return gauge.data.forEach(function (di, i) {\n return di.color = color[i % colorNum];\n });\n });\n var barWithIndependentColor = series.filter(function (_ref3) {\n var type = _ref3.type,\n independentColor = _ref3.independentColor;\n return type === 'bar' && independentColor;\n });\n barWithIndependentColor.forEach(function (bar) {\n if (bar.independentColors) return;\n bar.independentColors = color;\n });\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/mergeColor.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/pie.js":
/*!********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/pie.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pie = pie;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _pie = __webpack_require__(/*! ../config/pie */ \"./node_modules/@jiaminghi/charts/lib/config/pie.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction pie(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var series = option.series;\n if (!series) series = [];\n var pies = (0, _util2.initNeedSeries)(series, _pie.pieConfig, 'pie');\n pies = calcPiesCenter(pies, chart);\n pies = calcPiesRadius(pies, chart);\n pies = calcRosePiesRadius(pies, chart);\n pies = calcPiesPercent(pies);\n pies = calcPiesAngle(pies, chart);\n pies = calcPiesInsideLabelPos(pies);\n pies = calcPiesEdgeCenterPos(pies);\n pies = calcPiesOutSideLabelPos(pies);\n (0, _updater.doUpdate)({\n chart: chart,\n series: pies,\n key: 'pie',\n getGraphConfig: getPieConfig,\n getStartGraphConfig: getStartPieConfig,\n beforeChange: beforeChangePie\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: pies,\n key: 'pieInsideLabel',\n getGraphConfig: getInsideLabelConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: pies,\n key: 'pieOutsideLabelLine',\n getGraphConfig: getOutsideLabelLineConfig,\n getStartGraphConfig: getStartOutsideLabelLineConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: pies,\n key: 'pieOutsideLabel',\n getGraphConfig: getOutsideLabelConfig,\n getStartGraphConfig: getStartOutsideLabelConfig\n });\n}\n\nfunction calcPiesCenter(pies, chart) {\n var area = chart.render.area;\n pies.forEach(function (pie) {\n var center = pie.center;\n center = center.map(function (pos, i) {\n if (typeof pos === 'number') return pos;\n return parseInt(pos) / 100 * area[i];\n });\n pie.center = center;\n });\n return pies;\n}\n\nfunction calcPiesRadius(pies, chart) {\n var maxRadius = Math.min.apply(Math, (0, _toConsumableArray2[\"default\"])(chart.render.area)) / 2;\n pies.forEach(function (pie) {\n var radius = pie.radius,\n data = pie.data;\n radius = getNumberRadius(radius, maxRadius);\n data.forEach(function (item) {\n var itemRadius = item.radius;\n if (!itemRadius) itemRadius = radius;\n itemRadius = getNumberRadius(itemRadius, maxRadius);\n item.radius = itemRadius;\n });\n pie.radius = radius;\n });\n return pies;\n}\n\nfunction getNumberRadius(radius, maxRadius) {\n if (!(radius instanceof Array)) radius = [0, radius];\n radius = radius.map(function (r) {\n if (typeof r === 'number') return r;\n return parseInt(r) / 100 * maxRadius;\n });\n return radius;\n}\n\nfunction calcRosePiesRadius(pies, chart) {\n var rosePie = pies.filter(function (_ref) {\n var roseType = _ref.roseType;\n return roseType;\n });\n rosePie.forEach(function (pie) {\n var radius = pie.radius,\n data = pie.data,\n roseSort = pie.roseSort;\n var roseIncrement = getRoseIncrement(pie);\n var dataCopy = (0, _toConsumableArray2[\"default\"])(data);\n data = sortData(data);\n data.forEach(function (item, i) {\n item.radius[1] = radius[1] - roseIncrement * i;\n });\n\n if (roseSort) {\n data.reverse();\n } else {\n pie.data = dataCopy;\n }\n\n pie.roseIncrement = roseIncrement;\n });\n return pies;\n}\n\nfunction sortData(data) {\n return data.sort(function (_ref2, _ref3) {\n var a = _ref2.value;\n var b = _ref3.value;\n if (a === b) return 0;\n if (a > b) return -1;\n if (a < b) return 1;\n });\n}\n\nfunction getRoseIncrement(pie) {\n var radius = pie.radius,\n roseIncrement = pie.roseIncrement;\n if (typeof roseIncrement === 'number') return roseIncrement;\n\n if (roseIncrement === 'auto') {\n var data = pie.data;\n var allRadius = data.reduce(function (all, _ref4) {\n var radius = _ref4.radius;\n return [].concat((0, _toConsumableArray2[\"default\"])(all), (0, _toConsumableArray2[\"default\"])(radius));\n }, []);\n var minRadius = Math.min.apply(Math, (0, _toConsumableArray2[\"default\"])(allRadius));\n var maxRadius = Math.max.apply(Math, (0, _toConsumableArray2[\"default\"])(allRadius));\n return (maxRadius - minRadius) * 0.6 / (data.length - 1 || 1);\n }\n\n return parseInt(roseIncrement) / 100 * radius[1];\n}\n\nfunction calcPiesPercent(pies) {\n pies.forEach(function (pie) {\n var data = pie.data,\n percentToFixed = pie.percentToFixed;\n var sum = getDataSum(data);\n data.forEach(function (item) {\n var value = item.value;\n item.percent = value / sum * 100;\n item.percentForLabel = toFixedNoCeil(value / sum * 100, percentToFixed);\n });\n var percentSumNoLast = (0, _util2.mulAdd)(data.slice(0, -1).map(function (_ref5) {\n var percent = _ref5.percent;\n return percent;\n }));\n data.slice(-1)[0].percent = 100 - percentSumNoLast;\n data.slice(-1)[0].percentForLabel = toFixedNoCeil(100 - percentSumNoLast, percentToFixed);\n });\n return pies;\n}\n\nfunction toFixedNoCeil(number) {\n var toFixed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stringNumber = number.toString();\n var splitedNumber = stringNumber.split('.');\n var decimal = splitedNumber[1] || '0';\n var fixedDecimal = decimal.slice(0, toFixed);\n splitedNumber[1] = fixedDecimal;\n return parseFloat(splitedNumber.join('.'));\n}\n\nfunction getDataSum(data) {\n return (0, _util2.mulAdd)(data.map(function (_ref6) {\n var value = _ref6.value;\n return value;\n }));\n}\n\nfunction calcPiesAngle(pies) {\n pies.forEach(function (pie) {\n var start = pie.startAngle,\n data = pie.data;\n data.forEach(function (item, i) {\n var _getDataAngle = getDataAngle(data, i),\n _getDataAngle2 = (0, _slicedToArray2[\"default\"])(_getDataAngle, 2),\n startAngle = _getDataAngle2[0],\n endAngle = _getDataAngle2[1];\n\n item.startAngle = start + startAngle;\n item.endAngle = start + endAngle;\n });\n });\n return pies;\n}\n\nfunction getDataAngle(data, i) {\n var fullAngle = Math.PI * 2;\n var needAddData = data.slice(0, i + 1);\n var percentSum = (0, _util2.mulAdd)(needAddData.map(function (_ref7) {\n var percent = _ref7.percent;\n return percent;\n }));\n var percent = data[i].percent;\n var startPercent = percentSum - percent;\n return [fullAngle * startPercent / 100, fullAngle * percentSum / 100];\n}\n\nfunction calcPiesInsideLabelPos(pies) {\n pies.forEach(function (pieItem) {\n var data = pieItem.data;\n data.forEach(function (item) {\n item.insideLabelPos = getPieInsideLabelPos(pieItem, item);\n });\n });\n return pies;\n}\n\nfunction getPieInsideLabelPos(pieItem, dataItem) {\n var center = pieItem.center;\n\n var startAngle = dataItem.startAngle,\n endAngle = dataItem.endAngle,\n _dataItem$radius = (0, _slicedToArray2[\"default\"])(dataItem.radius, 2),\n ir = _dataItem$radius[0],\n or = _dataItem$radius[1];\n\n var radius = (ir + or) / 2;\n var angle = (startAngle + endAngle) / 2;\n return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(center).concat([radius, angle]));\n}\n\nfunction calcPiesEdgeCenterPos(pies) {\n pies.forEach(function (pie) {\n var data = pie.data,\n center = pie.center;\n data.forEach(function (item) {\n var startAngle = item.startAngle,\n endAngle = item.endAngle,\n radius = item.radius;\n var centerAngle = (startAngle + endAngle) / 2;\n\n var pos = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(center).concat([radius[1], centerAngle]));\n\n item.edgeCenterPos = pos;\n });\n });\n return pies;\n}\n\nfunction calcPiesOutSideLabelPos(pies) {\n pies.forEach(function (pieItem) {\n var leftPieDataItems = getLeftOrRightPieDataItems(pieItem);\n var rightPieDataItems = getLeftOrRightPieDataItems(pieItem, false);\n leftPieDataItems = sortPiesFromTopToBottom(leftPieDataItems);\n rightPieDataItems = sortPiesFromTopToBottom(rightPieDataItems);\n addLabelLineAndAlign(leftPieDataItems, pieItem);\n addLabelLineAndAlign(rightPieDataItems, pieItem, false);\n });\n return pies;\n}\n\nfunction getLabelLineBendRadius(pieItem) {\n var labelLineBendGap = pieItem.outsideLabel.labelLineBendGap;\n var maxRadius = getPieMaxRadius(pieItem);\n\n if (typeof labelLineBendGap !== 'number') {\n labelLineBendGap = parseInt(labelLineBendGap) / 100 * maxRadius;\n }\n\n return labelLineBendGap + maxRadius;\n}\n\nfunction getPieMaxRadius(pieItem) {\n var data = pieItem.data;\n var radius = data.map(function (_ref8) {\n var _ref8$radius = (0, _slicedToArray2[\"default\"])(_ref8.radius, 2),\n foo = _ref8$radius[0],\n r = _ref8$radius[1];\n\n return r;\n });\n return Math.max.apply(Math, (0, _toConsumableArray2[\"default\"])(radius));\n}\n\nfunction getLeftOrRightPieDataItems(pieItem) {\n var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var data = pieItem.data,\n center = pieItem.center;\n var centerXPos = center[0];\n return data.filter(function (_ref9) {\n var edgeCenterPos = _ref9.edgeCenterPos;\n var xPos = edgeCenterPos[0];\n if (left) return xPos <= centerXPos;\n return xPos > centerXPos;\n });\n}\n\nfunction sortPiesFromTopToBottom(dataItem) {\n dataItem.sort(function (_ref10, _ref11) {\n var _ref10$edgeCenterPos = (0, _slicedToArray2[\"default\"])(_ref10.edgeCenterPos, 2),\n t = _ref10$edgeCenterPos[0],\n ay = _ref10$edgeCenterPos[1];\n\n var _ref11$edgeCenterPos = (0, _slicedToArray2[\"default\"])(_ref11.edgeCenterPos, 2),\n tt = _ref11$edgeCenterPos[0],\n by = _ref11$edgeCenterPos[1];\n\n if (ay > by) return 1;\n if (ay < by) return -1;\n if (ay === by) return 0;\n });\n return dataItem;\n}\n\nfunction addLabelLineAndAlign(dataItem, pieItem) {\n var left = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var center = pieItem.center,\n outsideLabel = pieItem.outsideLabel;\n var radius = getLabelLineBendRadius(pieItem);\n dataItem.forEach(function (item) {\n var edgeCenterPos = item.edgeCenterPos,\n startAngle = item.startAngle,\n endAngle = item.endAngle;\n var labelLineEndLength = outsideLabel.labelLineEndLength;\n var angle = (startAngle + endAngle) / 2;\n\n var bendPoint = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(center).concat([radius, angle]));\n\n var endPoint = (0, _toConsumableArray2[\"default\"])(bendPoint);\n endPoint[0] += labelLineEndLength * (left ? -1 : 1);\n item.labelLine = [edgeCenterPos, bendPoint, endPoint];\n item.labelLineLength = (0, _util2.getPolylineLength)(item.labelLine);\n item.align = {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n if (left) item.align.textAlign = 'right';\n });\n}\n\nfunction getPieConfig(pieItem) {\n var data = pieItem.data,\n animationCurve = pieItem.animationCurve,\n animationFrame = pieItem.animationFrame,\n rLevel = pieItem.rLevel;\n return data.map(function (foo, i) {\n return {\n name: 'pie',\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getPieShape(pieItem, i),\n style: getPieStyle(pieItem, i)\n };\n });\n}\n\nfunction getStartPieConfig(pieItem) {\n var animationDelayGap = pieItem.animationDelayGap,\n startAnimationCurve = pieItem.startAnimationCurve;\n var configs = getPieConfig(pieItem);\n configs.forEach(function (config, i) {\n config.animationCurve = startAnimationCurve;\n config.animationDelay = i * animationDelayGap;\n config.shape.or = config.shape.ir;\n });\n return configs;\n}\n\nfunction beforeChangePie(graph) {\n graph.animationDelay = 0;\n}\n\nfunction getPieShape(pieItem, i) {\n var center = pieItem.center,\n data = pieItem.data;\n var dataItem = data[i];\n var radius = dataItem.radius,\n startAngle = dataItem.startAngle,\n endAngle = dataItem.endAngle;\n return {\n startAngle: startAngle,\n endAngle: endAngle,\n ir: radius[0],\n or: radius[1],\n rx: center[0],\n ry: center[1]\n };\n}\n\nfunction getPieStyle(pieItem, i) {\n var pieStyle = pieItem.pieStyle,\n data = pieItem.data;\n var dataItem = data[i];\n var color = dataItem.color;\n return (0, _util2.deepMerge)({\n fill: color\n }, pieStyle);\n}\n\nfunction getInsideLabelConfig(pieItem) {\n var animationCurve = pieItem.animationCurve,\n animationFrame = pieItem.animationFrame,\n data = pieItem.data,\n rLevel = pieItem.rLevel;\n return data.map(function (foo, i) {\n return {\n name: 'text',\n index: rLevel,\n visible: pieItem.insideLabel.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getInsideLabelShape(pieItem, i),\n style: getInsideLabelStyle(pieItem, i)\n };\n });\n}\n\nfunction getInsideLabelShape(pieItem, i) {\n var insideLabel = pieItem.insideLabel,\n data = pieItem.data;\n var formatter = insideLabel.formatter;\n var dataItem = data[i];\n var formatterType = (0, _typeof2[\"default\"])(formatter);\n var label = '';\n\n if (formatterType === 'string') {\n label = formatter.replace('{name}', dataItem.name);\n label = label.replace('{percent}', dataItem.percentForLabel);\n label = label.replace('{value}', dataItem.value);\n }\n\n if (formatterType === 'function') {\n label = formatter(dataItem);\n }\n\n return {\n content: label,\n position: dataItem.insideLabelPos\n };\n}\n\nfunction getInsideLabelStyle(pieItem, i) {\n var style = pieItem.insideLabel.style;\n return style;\n}\n\nfunction getOutsideLabelLineConfig(pieItem) {\n var animationCurve = pieItem.animationCurve,\n animationFrame = pieItem.animationFrame,\n data = pieItem.data,\n rLevel = pieItem.rLevel;\n return data.map(function (foo, i) {\n return {\n name: 'polyline',\n index: rLevel,\n visible: pieItem.outsideLabel.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getOutsideLabelLineShape(pieItem, i),\n style: getOutsideLabelLineStyle(pieItem, i)\n };\n });\n}\n\nfunction getStartOutsideLabelLineConfig(pieItem) {\n var data = pieItem.data;\n var configs = getOutsideLabelLineConfig(pieItem);\n configs.forEach(function (config, i) {\n config.style.lineDash = [0, data[i].labelLineLength];\n });\n return configs;\n}\n\nfunction getOutsideLabelLineShape(pieItem, i) {\n var data = pieItem.data;\n var dataItem = data[i];\n return {\n points: dataItem.labelLine\n };\n}\n\nfunction getOutsideLabelLineStyle(pieItem, i) {\n var outsideLabel = pieItem.outsideLabel,\n data = pieItem.data;\n var labelLineStyle = outsideLabel.labelLineStyle;\n var color = data[i].color;\n return (0, _util2.deepMerge)({\n stroke: color,\n lineDash: [data[i].labelLineLength, 0]\n }, labelLineStyle);\n}\n\nfunction getOutsideLabelConfig(pieItem) {\n var animationCurve = pieItem.animationCurve,\n animationFrame = pieItem.animationFrame,\n data = pieItem.data,\n rLevel = pieItem.rLevel;\n return data.map(function (foo, i) {\n return {\n name: 'text',\n index: rLevel,\n visible: pieItem.outsideLabel.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getOutsideLabelShape(pieItem, i),\n style: getOutsideLabelStyle(pieItem, i)\n };\n });\n}\n\nfunction getStartOutsideLabelConfig(pieItem) {\n var data = pieItem.data;\n var configs = getOutsideLabelConfig(pieItem);\n configs.forEach(function (config, i) {\n config.shape.position = data[i].labelLine[1];\n });\n return configs;\n}\n\nfunction getOutsideLabelShape(pieItem, i) {\n var outsideLabel = pieItem.outsideLabel,\n data = pieItem.data;\n var formatter = outsideLabel.formatter;\n var _data$i = data[i],\n labelLine = _data$i.labelLine,\n name = _data$i.name,\n percentForLabel = _data$i.percentForLabel,\n value = _data$i.value;\n var formatterType = (0, _typeof2[\"default\"])(formatter);\n var label = '';\n\n if (formatterType === 'string') {\n label = formatter.replace('{name}', name);\n label = label.replace('{percent}', percentForLabel);\n label = label.replace('{value}', value);\n }\n\n if (formatterType === 'function') {\n label = formatter(data[i]);\n }\n\n return {\n content: label,\n position: labelLine[2]\n };\n}\n\nfunction getOutsideLabelStyle(pieItem, i) {\n var outsideLabel = pieItem.outsideLabel,\n data = pieItem.data;\n var _data$i2 = data[i],\n color = _data$i2.color,\n align = _data$i2.align;\n var style = outsideLabel.style;\n return (0, _util2.deepMerge)(_objectSpread({\n fill: color\n }, align), style);\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/pie.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/radar.js":
/*!**********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/radar.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.radar = radar;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _index = __webpack_require__(/*! ../config/index */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _color = __webpack_require__(/*! @jiaminghi/color */ \"./node_modules/@jiaminghi/color/es/index.mjs\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction radar(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var series = option.series;\n if (!series) series = [];\n var radars = (0, _util2.initNeedSeries)(series, _index.radarConfig, 'radar');\n radars = calcRadarPosition(radars, chart);\n radars = calcRadarLabelPosition(radars, chart);\n radars = calcRadarLabelAlign(radars, chart);\n (0, _updater.doUpdate)({\n chart: chart,\n series: radars,\n key: 'radar',\n getGraphConfig: getRadarConfig,\n getStartGraphConfig: getStartRadarConfig,\n beforeChange: beforeChangeRadar\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: radars,\n key: 'radarPoint',\n getGraphConfig: getPointConfig,\n getStartGraphConfig: getStartPointConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: radars,\n key: 'radarLabel',\n getGraphConfig: getLabelConfig\n });\n}\n\nfunction calcRadarPosition(radars, chart) {\n var radarAxis = chart.radarAxis;\n if (!radarAxis) return [];\n var indicator = radarAxis.indicator,\n axisLineAngles = radarAxis.axisLineAngles,\n radius = radarAxis.radius,\n centerPos = radarAxis.centerPos;\n radars.forEach(function (radarItem) {\n var data = radarItem.data;\n radarItem.dataRadius = [];\n radarItem.radarPosition = indicator.map(function (_ref, i) {\n var max = _ref.max,\n min = _ref.min;\n var v = data[i];\n if (typeof max !== 'number') max = v;\n if (typeof min !== 'number') min = 0;\n if (typeof v !== 'number') v = min;\n var dataRadius = (v - min) / (max - min) * radius;\n radarItem.dataRadius[i] = dataRadius;\n return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(centerPos).concat([dataRadius, axisLineAngles[i]]));\n });\n });\n return radars;\n}\n\nfunction calcRadarLabelPosition(radars, chart) {\n var radarAxis = chart.radarAxis;\n if (!radarAxis) return [];\n var centerPos = radarAxis.centerPos,\n axisLineAngles = radarAxis.axisLineAngles;\n radars.forEach(function (radarItem) {\n var dataRadius = radarItem.dataRadius,\n label = radarItem.label;\n var labelGap = label.labelGap;\n radarItem.labelPosition = dataRadius.map(function (r, i) {\n return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(centerPos).concat([r + labelGap, axisLineAngles[i]]));\n });\n });\n return radars;\n}\n\nfunction calcRadarLabelAlign(radars, chart) {\n var radarAxis = chart.radarAxis;\n if (!radarAxis) return [];\n\n var _radarAxis$centerPos = (0, _slicedToArray2[\"default\"])(radarAxis.centerPos, 2),\n x = _radarAxis$centerPos[0],\n y = _radarAxis$centerPos[1];\n\n radars.forEach(function (radarItem) {\n var labelPosition = radarItem.labelPosition;\n var labelAlign = labelPosition.map(function (_ref2) {\n var _ref3 = (0, _slicedToArray2[\"default\"])(_ref2, 2),\n lx = _ref3[0],\n ly = _ref3[1];\n\n var textAlign = lx > x ? 'left' : 'right';\n var textBaseline = ly > y ? 'top' : 'bottom';\n return {\n textAlign: textAlign,\n textBaseline: textBaseline\n };\n });\n radarItem.labelAlign = labelAlign;\n });\n return radars;\n}\n\nfunction getRadarConfig(radarItem) {\n var animationCurve = radarItem.animationCurve,\n animationFrame = radarItem.animationFrame,\n rLevel = radarItem.rLevel;\n return [{\n name: 'polyline',\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getRadarShape(radarItem),\n style: getRadarStyle(radarItem)\n }];\n}\n\nfunction getStartRadarConfig(radarItem, updater) {\n var centerPos = updater.chart.radarAxis.centerPos;\n var config = getRadarConfig(radarItem)[0];\n var pointNum = config.shape.points.length;\n var points = new Array(pointNum).fill(0).map(function (foo) {\n return (0, _toConsumableArray2[\"default\"])(centerPos);\n });\n config.shape.points = points;\n return [config];\n}\n\nfunction getRadarShape(radarItem) {\n var radarPosition = radarItem.radarPosition;\n return {\n points: radarPosition,\n close: true\n };\n}\n\nfunction getRadarStyle(radarItem) {\n var radarStyle = radarItem.radarStyle,\n color = radarItem.color;\n var colorRgbaValue = (0, _color.getRgbaValue)(color);\n colorRgbaValue[3] = 0.5;\n var radarDefaultColor = {\n stroke: color,\n fill: (0, _color.getColorFromRgbValue)(colorRgbaValue)\n };\n return (0, _util2.deepMerge)(radarDefaultColor, radarStyle);\n}\n\nfunction beforeChangeRadar(graph, _ref4) {\n var shape = _ref4.shape;\n var graphPoints = graph.shape.points;\n var graphPointsNum = graphPoints.length;\n var pointsNum = shape.points.length;\n\n if (pointsNum > graphPointsNum) {\n var lastPoint = graphPoints.slice(-1)[0];\n var newAddPoints = new Array(pointsNum - graphPointsNum).fill(0).map(function (foo) {\n return (0, _toConsumableArray2[\"default\"])(lastPoint);\n });\n graphPoints.push.apply(graphPoints, (0, _toConsumableArray2[\"default\"])(newAddPoints));\n } else if (pointsNum < graphPointsNum) {\n graphPoints.splice(pointsNum);\n }\n}\n\nfunction getPointConfig(radarItem) {\n var radarPosition = radarItem.radarPosition,\n animationCurve = radarItem.animationCurve,\n animationFrame = radarItem.animationFrame,\n rLevel = radarItem.rLevel;\n return radarPosition.map(function (foo, i) {\n return {\n name: 'circle',\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n visible: radarItem.point.show,\n shape: getPointShape(radarItem, i),\n style: getPointStyle(radarItem, i)\n };\n });\n}\n\nfunction getStartPointConfig(radarItem) {\n var configs = getPointConfig(radarItem);\n configs.forEach(function (config) {\n return config.shape.r = 0.01;\n });\n return configs;\n}\n\nfunction getPointShape(radarItem, i) {\n var radarPosition = radarItem.radarPosition,\n point = radarItem.point;\n var radius = point.radius;\n var position = radarPosition[i];\n return {\n rx: position[0],\n ry: position[1],\n r: radius\n };\n}\n\nfunction getPointStyle(radarItem, i) {\n var point = radarItem.point,\n color = radarItem.color;\n var style = point.style;\n return (0, _util2.deepMerge)({\n stroke: color\n }, style);\n}\n\nfunction getLabelConfig(radarItem) {\n var labelPosition = radarItem.labelPosition,\n animationCurve = radarItem.animationCurve,\n animationFrame = radarItem.animationFrame,\n rLevel = radarItem.rLevel;\n return labelPosition.map(function (foo, i) {\n return {\n name: 'text',\n index: rLevel,\n visible: radarItem.label.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getLabelShape(radarItem, i),\n style: getLabelStyle(radarItem, i)\n };\n });\n}\n\nfunction getLabelShape(radarItem, i) {\n var labelPosition = radarItem.labelPosition,\n label = radarItem.label,\n data = radarItem.data;\n var offset = label.offset,\n formatter = label.formatter;\n var position = mergePointOffset(labelPosition[i], offset);\n var labelText = data[i] ? data[i].toString() : '0';\n var formatterType = (0, _typeof2[\"default\"])(formatter);\n if (formatterType === 'string') labelText = formatter.replace('{value}', labelText);\n if (formatterType === 'function') labelText = formatter(labelText);\n return {\n content: labelText,\n position: position\n };\n}\n\nfunction mergePointOffset(_ref5, _ref6) {\n var _ref7 = (0, _slicedToArray2[\"default\"])(_ref5, 2),\n x = _ref7[0],\n y = _ref7[1];\n\n var _ref8 = (0, _slicedToArray2[\"default\"])(_ref6, 2),\n ox = _ref8[0],\n oy = _ref8[1];\n\n return [x + ox, y + oy];\n}\n\nfunction getLabelStyle(radarItem, i) {\n var label = radarItem.label,\n color = radarItem.color,\n labelAlign = radarItem.labelAlign;\n var style = label.style;\n\n var defaultColorAndAlign = _objectSpread({\n fill: color\n }, labelAlign[i]);\n\n return (0, _util2.deepMerge)(defaultColorAndAlign, style);\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/radar.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/radarAxis.js":
/*!**************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/radarAxis.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.radarAxis = radarAxis;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _index = __webpack_require__(/*! ../config/index */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction radarAxis(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var radar = option.radar;\n var radarAxis = [];\n\n if (radar) {\n radarAxis = mergeRadarAxisDefaultConfig(radar);\n radarAxis = calcRadarAxisCenter(radarAxis, chart);\n radarAxis = calcRadarAxisRingRadius(radarAxis, chart);\n radarAxis = calcRadarAxisLinePosition(radarAxis);\n radarAxis = calcRadarAxisAreaRadius(radarAxis);\n radarAxis = calcRadarAxisLabelPosition(radarAxis);\n radarAxis = [radarAxis];\n }\n\n var radarAxisForUpdate = radarAxis;\n if (radarAxis.length && !radarAxis[0].show) radarAxisForUpdate = [];\n (0, _updater.doUpdate)({\n chart: chart,\n series: radarAxisForUpdate,\n key: 'radarAxisSplitArea',\n getGraphConfig: getSplitAreaConfig,\n beforeUpdate: beforeUpdateSplitArea,\n beforeChange: beforeChangeSplitArea\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: radarAxisForUpdate,\n key: 'radarAxisSplitLine',\n getGraphConfig: getSplitLineConfig,\n beforeUpdate: beforeUpdateSplitLine,\n beforeChange: beforeChangeSplitLine\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: radarAxisForUpdate,\n key: 'radarAxisLine',\n getGraphConfig: getAxisLineConfig\n });\n (0, _updater.doUpdate)({\n chart: chart,\n series: radarAxisForUpdate,\n key: 'radarAxisLable',\n getGraphConfig: getAxisLabelConfig\n });\n chart.radarAxis = radarAxis[0];\n}\n\nfunction mergeRadarAxisDefaultConfig(radar) {\n return (0, _util2.deepMerge)((0, _util.deepClone)(_index.radarAxisConfig), radar);\n}\n\nfunction calcRadarAxisCenter(radarAxis, chart) {\n var area = chart.render.area;\n var center = radarAxis.center;\n radarAxis.centerPos = center.map(function (v, i) {\n if (typeof v === 'number') return v;\n return parseInt(v) / 100 * area[i];\n });\n return radarAxis;\n}\n\nfunction calcRadarAxisRingRadius(radarAxis, chart) {\n var area = chart.render.area;\n var splitNum = radarAxis.splitNum,\n radius = radarAxis.radius;\n var maxRadius = Math.min.apply(Math, (0, _toConsumableArray2[\"default\"])(area)) / 2;\n if (typeof radius !== 'number') radius = parseInt(radius) / 100 * maxRadius;\n var splitGap = radius / splitNum;\n radarAxis.ringRadius = new Array(splitNum).fill(0).map(function (foo, i) {\n return splitGap * (i + 1);\n });\n radarAxis.radius = radius;\n return radarAxis;\n}\n\nfunction calcRadarAxisLinePosition(radarAxis) {\n var indicator = radarAxis.indicator,\n centerPos = radarAxis.centerPos,\n radius = radarAxis.radius,\n startAngle = radarAxis.startAngle;\n var fullAngle = Math.PI * 2;\n var indicatorNum = indicator.length;\n var indicatorGap = fullAngle / indicatorNum;\n var angles = new Array(indicatorNum).fill(0).map(function (foo, i) {\n return indicatorGap * i + startAngle;\n });\n radarAxis.axisLineAngles = angles;\n radarAxis.axisLinePosition = angles.map(function (g) {\n return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(centerPos).concat([radius, g]));\n });\n return radarAxis;\n}\n\nfunction calcRadarAxisAreaRadius(radarAxis) {\n var ringRadius = radarAxis.ringRadius;\n var subRadius = ringRadius[0] / 2;\n radarAxis.areaRadius = ringRadius.map(function (r) {\n return r - subRadius;\n });\n return radarAxis;\n}\n\nfunction calcRadarAxisLabelPosition(radarAxis) {\n var axisLineAngles = radarAxis.axisLineAngles,\n centerPos = radarAxis.centerPos,\n radius = radarAxis.radius,\n axisLabel = radarAxis.axisLabel;\n radius += axisLabel.labelGap;\n radarAxis.axisLabelPosition = axisLineAngles.map(function (angle) {\n return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(centerPos).concat([radius, angle]));\n });\n return radarAxis;\n}\n\nfunction getSplitAreaConfig(radarAxis) {\n var areaRadius = radarAxis.areaRadius,\n polygon = radarAxis.polygon,\n animationCurve = radarAxis.animationCurve,\n animationFrame = radarAxis.animationFrame,\n rLevel = radarAxis.rLevel;\n var name = polygon ? 'regPolygon' : 'ring';\n return areaRadius.map(function (foo, i) {\n return {\n name: name,\n index: rLevel,\n visible: radarAxis.splitArea.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getSplitAreaShape(radarAxis, i),\n style: getSplitAreaStyle(radarAxis, i)\n };\n });\n}\n\nfunction getSplitAreaShape(radarAxis, i) {\n var polygon = radarAxis.polygon,\n areaRadius = radarAxis.areaRadius,\n indicator = radarAxis.indicator,\n centerPos = radarAxis.centerPos;\n var indicatorNum = indicator.length;\n var shape = {\n rx: centerPos[0],\n ry: centerPos[1],\n r: areaRadius[i]\n };\n if (polygon) shape.side = indicatorNum;\n return shape;\n}\n\nfunction getSplitAreaStyle(radarAxis, i) {\n var splitArea = radarAxis.splitArea,\n ringRadius = radarAxis.ringRadius,\n axisLineAngles = radarAxis.axisLineAngles,\n polygon = radarAxis.polygon,\n centerPos = radarAxis.centerPos;\n var color = splitArea.color,\n style = splitArea.style;\n style = _objectSpread({\n fill: 'rgba(0, 0, 0, 0)'\n }, style);\n var lineWidth = ringRadius[0] - 0;\n\n if (polygon) {\n var point1 = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(centerPos).concat([ringRadius[0], axisLineAngles[0]]));\n\n var point2 = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2[\"default\"])(centerPos).concat([ringRadius[0], axisLineAngles[1]]));\n\n lineWidth = (0, _util2.getPointToLineDistance)(centerPos, point1, point2);\n }\n\n style = (0, _util2.deepMerge)((0, _util.deepClone)(style, true), {\n lineWidth: lineWidth\n });\n if (!color.length) return style;\n var colorNum = color.length;\n return (0, _util2.deepMerge)(style, {\n stroke: color[i % colorNum]\n });\n}\n\nfunction beforeUpdateSplitArea(graphs, radarAxis, i, updater) {\n var cache = graphs[i];\n if (!cache) return;\n var render = updater.chart.render;\n var polygon = radarAxis.polygon;\n var name = cache[0].name;\n var currentName = polygon ? 'regPolygon' : 'ring';\n var delAll = currentName !== name;\n if (!delAll) return;\n cache.forEach(function (g) {\n return render.delGraph(g);\n });\n graphs[i] = null;\n}\n\nfunction beforeChangeSplitArea(graph, config) {\n var side = config.shape.side;\n if (typeof side !== 'number') return;\n graph.shape.side = side;\n}\n\nfunction getSplitLineConfig(radarAxis) {\n var ringRadius = radarAxis.ringRadius,\n polygon = radarAxis.polygon,\n animationCurve = radarAxis.animationCurve,\n animationFrame = radarAxis.animationFrame,\n rLevel = radarAxis.rLevel;\n var name = polygon ? 'regPolygon' : 'ring';\n return ringRadius.map(function (foo, i) {\n return {\n name: name,\n index: rLevel,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n visible: radarAxis.splitLine.show,\n shape: getSplitLineShape(radarAxis, i),\n style: getSplitLineStyle(radarAxis, i)\n };\n });\n}\n\nfunction getSplitLineShape(radarAxis, i) {\n var ringRadius = radarAxis.ringRadius,\n centerPos = radarAxis.centerPos,\n indicator = radarAxis.indicator,\n polygon = radarAxis.polygon;\n var shape = {\n rx: centerPos[0],\n ry: centerPos[1],\n r: ringRadius[i]\n };\n var indicatorNum = indicator.length;\n if (polygon) shape.side = indicatorNum;\n return shape;\n}\n\nfunction getSplitLineStyle(radarAxis, i) {\n var splitLine = radarAxis.splitLine;\n var color = splitLine.color,\n style = splitLine.style;\n style = _objectSpread({\n fill: 'rgba(0, 0, 0, 0)'\n }, style);\n if (!color.length) return style;\n var colorNum = color.length;\n return (0, _util2.deepMerge)(style, {\n stroke: color[i % colorNum]\n });\n}\n\nfunction beforeUpdateSplitLine(graphs, radarAxis, i, updater) {\n var cache = graphs[i];\n if (!cache) return;\n var render = updater.chart.render;\n var polygon = radarAxis.polygon;\n var name = cache[0].name;\n var currenName = polygon ? 'regPolygon' : 'ring';\n var delAll = currenName !== name;\n if (!delAll) return;\n cache.forEach(function (g) {\n return render.delGraph(g);\n });\n graphs[i] = null;\n}\n\nfunction beforeChangeSplitLine(graph, config) {\n var side = config.shape.side;\n if (typeof side !== 'number') return;\n graph.shape.side = side;\n}\n\nfunction getAxisLineConfig(radarAxis) {\n var axisLinePosition = radarAxis.axisLinePosition,\n animationCurve = radarAxis.animationCurve,\n animationFrame = radarAxis.animationFrame,\n rLevel = radarAxis.rLevel;\n return axisLinePosition.map(function (foo, i) {\n return {\n name: 'polyline',\n index: rLevel,\n visible: radarAxis.axisLine.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getAxisLineShape(radarAxis, i),\n style: getAxisLineStyle(radarAxis, i)\n };\n });\n}\n\nfunction getAxisLineShape(radarAxis, i) {\n var centerPos = radarAxis.centerPos,\n axisLinePosition = radarAxis.axisLinePosition;\n var points = [centerPos, axisLinePosition[i]];\n return {\n points: points\n };\n}\n\nfunction getAxisLineStyle(radarAxis, i) {\n var axisLine = radarAxis.axisLine;\n var color = axisLine.color,\n style = axisLine.style;\n if (!color.length) return style;\n var colorNum = color.length;\n return (0, _util2.deepMerge)(style, {\n stroke: color[i % colorNum]\n });\n}\n\nfunction getAxisLabelConfig(radarAxis) {\n var axisLabelPosition = radarAxis.axisLabelPosition,\n animationCurve = radarAxis.animationCurve,\n animationFrame = radarAxis.animationFrame,\n rLevel = radarAxis.rLevel;\n return axisLabelPosition.map(function (foo, i) {\n return {\n name: 'text',\n index: rLevel,\n visible: radarAxis.axisLabel.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: getAxisLableShape(radarAxis, i),\n style: getAxisLableStyle(radarAxis, i)\n };\n });\n}\n\nfunction getAxisLableShape(radarAxis, i) {\n var axisLabelPosition = radarAxis.axisLabelPosition,\n indicator = radarAxis.indicator;\n return {\n content: indicator[i].name,\n position: axisLabelPosition[i]\n };\n}\n\nfunction getAxisLableStyle(radarAxis, i) {\n var axisLabel = radarAxis.axisLabel,\n _radarAxis$centerPos = (0, _slicedToArray2[\"default\"])(radarAxis.centerPos, 2),\n x = _radarAxis$centerPos[0],\n y = _radarAxis$centerPos[1],\n axisLabelPosition = radarAxis.axisLabelPosition;\n\n var color = axisLabel.color,\n style = axisLabel.style;\n\n var _axisLabelPosition$i = (0, _slicedToArray2[\"default\"])(axisLabelPosition[i], 2),\n labelXpos = _axisLabelPosition$i[0],\n labelYPos = _axisLabelPosition$i[1];\n\n var textAlign = labelXpos > x ? 'left' : 'right';\n var textBaseline = labelYPos > y ? 'top' : 'bottom';\n style = (0, _util2.deepMerge)({\n textAlign: textAlign,\n textBaseline: textBaseline\n }, style);\n if (!color.length) return style;\n var colorNum = color.length;\n return (0, _util2.deepMerge)(style, {\n fill: color[i % colorNum]\n });\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/radarAxis.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/core/title.js":
/*!**********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/core/title.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.title = title;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\"));\n\nvar _updater = __webpack_require__(/*! ../class/updater.class */ \"./node_modules/@jiaminghi/charts/lib/class/updater.class.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _config = __webpack_require__(/*! ../config */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _util2 = __webpack_require__(/*! ../util */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction title(chart) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var title = [];\n\n if (option.title) {\n title[0] = (0, _util2.deepMerge)((0, _util.deepClone)(_config.titleConfig, true), option.title);\n }\n\n (0, _updater.doUpdate)({\n chart: chart,\n series: title,\n key: 'title',\n getGraphConfig: getTitleConfig\n });\n}\n\nfunction getTitleConfig(titleItem, updater) {\n var animationCurve = _config.titleConfig.animationCurve,\n animationFrame = _config.titleConfig.animationFrame,\n rLevel = _config.titleConfig.rLevel;\n var shape = getTitleShape(titleItem, updater);\n var style = getTitleStyle(titleItem);\n return [{\n name: 'text',\n index: rLevel,\n visible: titleItem.show,\n animationCurve: animationCurve,\n animationFrame: animationFrame,\n shape: shape,\n style: style\n }];\n}\n\nfunction getTitleShape(titleItem, updater) {\n var offset = titleItem.offset,\n text = titleItem.text;\n var _updater$chart$gridAr = updater.chart.gridArea,\n x = _updater$chart$gridAr.x,\n y = _updater$chart$gridAr.y,\n w = _updater$chart$gridAr.w;\n\n var _offset = (0, _slicedToArray2[\"default\"])(offset, 2),\n ox = _offset[0],\n oy = _offset[1];\n\n return {\n content: text,\n position: [x + w / 2 + ox, y + oy]\n };\n}\n\nfunction getTitleStyle(titleItem) {\n var style = titleItem.style;\n return style;\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/core/title.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/extend/index.js":
/*!************************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/extend/index.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _cRender = __webpack_require__(/*! @jiaminghi/c-render */ \"./node_modules/@jiaminghi/c-render/lib/index.js\");\n\nvar _graphs = __webpack_require__(/*! @jiaminghi/c-render/lib/config/graphs */ \"./node_modules/@jiaminghi/c-render/lib/config/graphs.js\");\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nvar _color = __webpack_require__(/*! @jiaminghi/color */ \"./node_modules/@jiaminghi/color/es/index.mjs\");\n\nvar _index = __webpack_require__(/*! ../util/index */ \"./node_modules/@jiaminghi/charts/lib/util/index.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar pie = {\n shape: {\n rx: 0,\n ry: 0,\n ir: 0,\n or: 0,\n startAngle: 0,\n endAngle: 0,\n clockWise: true\n },\n validator: function validator(_ref) {\n var shape = _ref.shape;\n var keys = ['rx', 'ry', 'ir', 'or', 'startAngle', 'endAngle'];\n\n if (keys.find(function (key) {\n return typeof shape[key] !== 'number';\n })) {\n console.error('Pie shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref2, _ref3) {\n var ctx = _ref2.ctx;\n var shape = _ref3.shape;\n ctx.beginPath();\n var rx = shape.rx,\n ry = shape.ry,\n ir = shape.ir,\n or = shape.or,\n startAngle = shape.startAngle,\n endAngle = shape.endAngle,\n clockWise = shape.clockWise;\n rx = parseInt(rx) + 0.5;\n ry = parseInt(ry) + 0.5;\n ctx.arc(rx, ry, ir > 0 ? ir : 0, startAngle, endAngle, !clockWise);\n var connectPoint1 = (0, _util.getCircleRadianPoint)(rx, ry, or, endAngle).map(function (p) {\n return parseInt(p) + 0.5;\n });\n var connectPoint2 = (0, _util.getCircleRadianPoint)(rx, ry, ir, startAngle).map(function (p) {\n return parseInt(p) + 0.5;\n });\n ctx.lineTo.apply(ctx, (0, _toConsumableArray2[\"default\"])(connectPoint1));\n ctx.arc(rx, ry, or > 0 ? or : 0, endAngle, startAngle, clockWise);\n ctx.lineTo.apply(ctx, (0, _toConsumableArray2[\"default\"])(connectPoint2));\n ctx.closePath();\n ctx.stroke();\n ctx.fill();\n }\n};\nvar agArc = {\n shape: {\n rx: 0,\n ry: 0,\n r: 0,\n startAngle: 0,\n endAngle: 0,\n gradientStartAngle: null,\n gradientEndAngle: null\n },\n validator: function validator(_ref4) {\n var shape = _ref4.shape;\n var keys = ['rx', 'ry', 'r', 'startAngle', 'endAngle'];\n\n if (keys.find(function (key) {\n return typeof shape[key] !== 'number';\n })) {\n console.error('AgArc shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref5, _ref6) {\n var ctx = _ref5.ctx;\n var shape = _ref6.shape,\n style = _ref6.style;\n var gradient = style.gradient;\n gradient = gradient.map(function (cv) {\n return (0, _color.getColorFromRgbValue)(cv);\n });\n\n if (gradient.length === 1) {\n gradient = [gradient[0], gradient[0]];\n }\n\n var gradientArcNum = gradient.length - 1;\n var gradientStartAngle = shape.gradientStartAngle,\n gradientEndAngle = shape.gradientEndAngle,\n startAngle = shape.startAngle,\n endAngle = shape.endAngle,\n r = shape.r,\n rx = shape.rx,\n ry = shape.ry;\n if (gradientStartAngle === null) gradientStartAngle = startAngle;\n if (gradientEndAngle === null) gradientEndAngle = endAngle;\n var angleGap = (gradientEndAngle - gradientStartAngle) / gradientArcNum;\n if (angleGap === Math.PI * 2) angleGap = Math.PI * 2 - 0.001;\n\n for (var i = 0; i < gradientArcNum; i++) {\n ctx.beginPath();\n var startPoint = (0, _util.getCircleRadianPoint)(rx, ry, r, startAngle + angleGap * i);\n var endPoint = (0, _util.getCircleRadianPoint)(rx, ry, r, startAngle + angleGap * (i + 1));\n var color = (0, _index.getLinearGradientColor)(ctx, startPoint, endPoint, [gradient[i], gradient[i + 1]]);\n var arcStartAngle = startAngle + angleGap * i;\n var arcEndAngle = startAngle + angleGap * (i + 1);\n var doBreak = false;\n\n if (arcEndAngle > endAngle) {\n arcEndAngle = endAngle;\n doBreak = true;\n }\n\n ctx.arc(rx, ry, r, arcStartAngle, arcEndAngle);\n ctx.strokeStyle = color;\n ctx.stroke();\n if (doBreak) break;\n }\n }\n};\nvar numberText = {\n shape: {\n number: [],\n content: '',\n position: [0, 0],\n toFixed: 0,\n rowGap: 0,\n formatter: null\n },\n validator: function validator(_ref7) {\n var shape = _ref7.shape;\n var number = shape.number,\n content = shape.content,\n position = shape.position;\n\n if (!(number instanceof Array) || typeof content !== 'string' || !(position instanceof Array)) {\n console.error('NumberText shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref8, _ref9) {\n var ctx = _ref8.ctx;\n var shape = _ref9.shape;\n var number = shape.number,\n content = shape.content,\n toFixed = shape.toFixed,\n rowGap = shape.rowGap,\n formatter = shape.formatter;\n var textSegments = content.split('{nt}');\n var textString = '';\n textSegments.forEach(function (t, i) {\n var currentNumber = number[i];\n if (typeof currentNumber !== 'number') currentNumber = '';\n\n if (typeof currentNumber === 'number') {\n currentNumber = currentNumber.toFixed(toFixed);\n if (typeof formatter === 'function') currentNumber = formatter(currentNumber);\n }\n\n textString += t + (currentNumber || '');\n });\n\n _graphs.text.draw({\n ctx: ctx\n }, {\n shape: _objectSpread(_objectSpread({}, shape), {}, {\n content: textString,\n rowGap: rowGap\n })\n });\n }\n};\nvar lineIcon = {\n shape: {\n x: 0,\n y: 0,\n w: 0,\n h: 0\n },\n validator: function validator(_ref10) {\n var shape = _ref10.shape;\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n\n if (typeof x !== 'number' || typeof y !== 'number' || typeof w !== 'number' || typeof h !== 'number') {\n console.error('lineIcon shape configuration is abnormal!');\n return false;\n }\n\n return true;\n },\n draw: function draw(_ref11, _ref12) {\n var ctx = _ref11.ctx;\n var shape = _ref12.shape;\n ctx.beginPath();\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n var halfH = h / 2;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.moveTo(x, y + halfH);\n ctx.lineTo(x + w, y + halfH);\n ctx.lineWidth = 1;\n ctx.stroke();\n ctx.beginPath();\n var radius = halfH - 5 * 2;\n if (radius <= 0) radius = 3;\n ctx.arc(x + w / 2, y + halfH, radius, 0, Math.PI * 2);\n ctx.lineWidth = 5;\n ctx.stroke();\n ctx.fillStyle = '#fff';\n ctx.fill();\n },\n hoverCheck: function hoverCheck(position, _ref13) {\n var shape = _ref13.shape;\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n return (0, _util.checkPointIsInRect)(position, x, y, w, h);\n },\n setGraphCenter: function setGraphCenter(e, _ref14) {\n var shape = _ref14.shape,\n style = _ref14.style;\n var x = shape.x,\n y = shape.y,\n w = shape.w,\n h = shape.h;\n style.graphCenter = [x + w / 2, y + h / 2];\n }\n};\n(0, _cRender.extendNewGraph)('pie', pie);\n(0, _cRender.extendNewGraph)('agArc', agArc);\n(0, _cRender.extendNewGraph)('numberText', numberText);\n(0, _cRender.extendNewGraph)('lineIcon', lineIcon);\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/extend/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/index.js":
/*!*****************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/index.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"changeDefaultConfig\", {\n enumerable: true,\n get: function get() {\n return _config.changeDefaultConfig;\n }\n});\nexports[\"default\"] = void 0;\n\nvar _charts = _interopRequireDefault(__webpack_require__(/*! ./class/charts.class */ \"./node_modules/@jiaminghi/charts/lib/class/charts.class.js\"));\n\nvar _config = __webpack_require__(/*! ./config */ \"./node_modules/@jiaminghi/charts/lib/config/index.js\");\n\nvar _default = _charts[\"default\"];\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/charts/lib/util/index.js":
/*!**********************************************************!*\
!*** ./node_modules/@jiaminghi/charts/lib/util/index.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.filterNonNumber = filterNonNumber;\nexports.deepMerge = deepMerge;\nexports.mulAdd = mulAdd;\nexports.mergeSameStackData = mergeSameStackData;\nexports.getTwoPointDistance = getTwoPointDistance;\nexports.getLinearGradientColor = getLinearGradientColor;\nexports.getPolylineLength = getPolylineLength;\nexports.getPointToLineDistance = getPointToLineDistance;\nexports.initNeedSeries = initNeedSeries;\nexports.radianToAngle = radianToAngle;\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _util = __webpack_require__(/*! @jiaminghi/c-render/lib/plugin/util */ \"./node_modules/@jiaminghi/c-render/lib/plugin/util.js\");\n\nfunction filterNonNumber(array) {\n return array.filter(function (n) {\n return typeof n === 'number';\n });\n}\n\nfunction deepMerge(target, merged) {\n for (var key in merged) {\n if (target[key] && (0, _typeof2[\"default\"])(target[key]) === 'object') {\n deepMerge(target[key], merged[key]);\n continue;\n }\n\n if ((0, _typeof2[\"default\"])(merged[key]) === 'object') {\n target[key] = (0, _util.deepClone)(merged[key], true);\n continue;\n }\n\n target[key] = merged[key];\n }\n\n return target;\n}\n\nfunction mulAdd(nums) {\n nums = filterNonNumber(nums);\n return nums.reduce(function (all, num) {\n return all + num;\n }, 0);\n}\n\nfunction mergeSameStackData(item, series) {\n var stack = item.stack;\n if (!stack) return (0, _toConsumableArray2[\"default\"])(item.data);\n var stacks = series.filter(function (_ref) {\n var s = _ref.stack;\n return s === stack;\n });\n var index = stacks.findIndex(function (_ref2) {\n var d = _ref2.data;\n return d === item.data;\n });\n var datas = stacks.splice(0, index + 1).map(function (_ref3) {\n var data = _ref3.data;\n return data;\n });\n var dataLength = datas[0].length;\n return new Array(dataLength).fill(0).map(function (foo, i) {\n return mulAdd(datas.map(function (d) {\n return d[i];\n }));\n });\n}\n\nfunction getTwoPointDistance(pointOne, pointTwo) {\n var minusX = Math.abs(pointOne[0] - pointTwo[0]);\n var minusY = Math.abs(pointOne[1] - pointTwo[1]);\n return Math.sqrt(minusX * minusX + minusY * minusY);\n}\n\nfunction getLinearGradientColor(ctx, begin, end, color) {\n if (!ctx || !begin || !end || !color.length) return;\n var colors = color;\n typeof colors === 'string' && (colors = [color, color]);\n var linearGradientColor = ctx.createLinearGradient.apply(ctx, (0, _toConsumableArray2[\"default\"])(begin).concat((0, _toConsumableArray2[\"default\"])(end)));\n var colorGap = 1 / (colors.length - 1);\n colors.forEach(function (c, i) {\n return linearGradientColor.addColorStop(colorGap * i, c);\n });\n return linearGradientColor;\n}\n\nfunction getPolylineLength(points) {\n var lineSegments = new Array(points.length - 1).fill(0).map(function (foo, i) {\n return [points[i], points[i + 1]];\n });\n var lengths = lineSegments.map(function (item) {\n return getTwoPointDistance.apply(void 0, (0, _toConsumableArray2[\"default\"])(item));\n });\n return mulAdd(lengths);\n}\n\nfunction getPointToLineDistance(point, linePointOne, linePointTwo) {\n var a = getTwoPointDistance(point, linePointOne);\n var b = getTwoPointDistance(point, linePointTwo);\n var c = getTwoPointDistance(linePointOne, linePointTwo);\n return 0.5 * Math.sqrt((a + b + c) * (a + b - c) * (a + c - b) * (b + c - a)) / c;\n}\n\nfunction initNeedSeries(series, config, type) {\n series = series.filter(function (_ref4) {\n var st = _ref4.type;\n return st === type;\n });\n series = series.map(function (item) {\n return deepMerge((0, _util.deepClone)(config, true), item);\n });\n return series.filter(function (_ref5) {\n var show = _ref5.show;\n return show;\n });\n}\n\nfunction radianToAngle(radian) {\n return radian / Math.PI * 180;\n}\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/charts/lib/util/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/color/es/config/keywords.mjs":
/*!**************************************************************!*\
!*** ./node_modules/@jiaminghi/color/es/config/keywords.mjs ***!
\**************************************************************/
/*! exports provided: ColorKeywords */
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ColorKeywords\", function() { return a; });\nvar a = /* @__PURE__ */ ((f) => (f.transparent = \"rgba(0,0,0,0)\", f.black = \"#000000\", f.silver = \"#C0C0C0\", f.gray = \"#808080\", f.white = \"#FFFFFF\", f.maroon = \"#800000\", f.red = \"#FF0000\", f.purple = \"#800080\", f.fuchsia = \"#FF00FF\", f.green = \"#008000\", f.lime = \"#00FF00\", f.olive = \"#808000\", f.yellow = \"#FFFF00\", f.navy = \"#000080\", f.blue = \"#0000FF\", f.teal = \"#008080\", f.aqua = \"#00FFFF\", f.aliceblue = \"#f0f8ff\", f.antiquewhite = \"#faebd7\", f.aquamarine = \"#7fffd4\", f.azure = \"#f0ffff\", f.beige = \"#f5f5dc\", f.bisque = \"#ffe4c4\", f.blanchedalmond = \"#ffebcd\", f.blueviolet = \"#8a2be2\", f.brown = \"#a52a2a\", f.burlywood = \"#deb887\", f.cadetblue = \"#5f9ea0\", f.chartreuse = \"#7fff00\", f.chocolate = \"#d2691e\", f.coral = \"#ff7f50\", f.cornflowerblue = \"#6495ed\", f.cornsilk = \"#fff8dc\", f.crimson = \"#dc143c\", f.cyan = \"#00ffff\", f.darkblue = \"#00008b\", f.darkcyan = \"#008b8b\", f.darkgoldenrod = \"#b8860b\", f.darkgray = \"#a9a9a9\", f.darkgreen = \"#006400\", f.darkgrey = \"#a9a9a9\", f.darkkhaki = \"#bdb76b\", f.darkmagenta = \"#8b008b\", f.darkolivegreen = \"#556b2f\", f.darkorange = \"#ff8c00\", f.darkorchid = \"#9932cc\", f.darkred = \"#8b0000\", f.darksalmon = \"#e9967a\", f.darkseagreen = \"#8fbc8f\", f.darkslateblue = \"#483d8b\", f.darkslategray = \"#2f4f4f\", f.darkslategrey = \"#2f4f4f\", f.darkturquoise = \"#00ced1\", f.darkviolet = \"#9400d3\", f.deeppink = \"#ff1493\", f.deepskyblue = \"#00bfff\", f.dimgray = \"#696969\", f.dimgrey = \"#696969\", f.dodgerblue = \"#1e90ff\", f.firebrick = \"#b22222\", f.floralwhite = \"#fffaf0\", f.forestgreen = \"#228b22\", f.gainsboro = \"#dcdcdc\", f.ghostwhite = \"#f8f8ff\", f.gold = \"#ffd700\", f.goldenrod = \"#daa520\", f.greenyellow = \"#adff2f\", f.grey = \"#808080\", f.honeydew = \"#f0fff0\", f.hotpink = \"#ff69b4\", f.indianred = \"#cd5c5c\", f.indigo = \"#4b0082\", f.ivory = \"#fffff0\", f.khaki = \"#f0e68c\", f.lavender = \"#e6e6fa\", f.lavenderblush = \"#fff0f5\", f.lawngreen = \"#7cfc00\", f.lemonchiffon = \"#fffacd\", f.lightblue = \"#add8e6\", f.lightcoral = \"#f08080\", f.lightcyan = \"#e0ffff\", f.lightgoldenrodyellow = \"#fafad2\", f.lightgray = \"#d3d3d3\", f.lightgreen = \"#90ee90\", f.lightgrey = \"#d3d3d3\", f.lightpink = \"#ffb6c1\", f.lightsalmon = \"#ffa07a\", f.lightseagreen = \"#20b2aa\", f.lightskyblue = \"#87cefa\", f.lightslategray = \"#778899\", f.lightslategrey = \"#778899\", f.lightsteelblue = \"#b0c4de\", f.lightyellow = \"#ffffe0\", f.limegreen = \"#32cd32\", f.linen = \"#faf0e6\", f.magenta = \"#ff00ff\", f.mediumaquamarine = \"#66cdaa\", f.mediumblue = \"#0000cd\", f.mediumorchid = \"#ba55d3\", f.mediumpurple = \"#9370db\", f.mediumseagreen = \"#3cb371\", f.mediumslateblue = \"#7b68ee\", f.mediumspringgreen = \"#00fa9a\", f.mediumturquoise = \"#48d1cc\", f.mediumvioletred = \"#c71585\", f.midnightblue = \"#191970\", f.mintcream = \"#f5fffa\", f.mistyrose = \"#ffe4e1\", f.moccasin = \"#ffe4b5\", f.navajowhite = \"#ffdead\", f.oldlace = \"#fdf5e6\", f.olivedrab = \"#6b8e23\", f.orange = \"#ffa500\", f.orangered = \"#ff4500\", f.orchid = \"#da70d6\", f.palegoldenrod = \"#eee8aa\", f.palegreen = \"#98fb98\", f.paleturquoise = \"#afeeee\", f.palevioletred = \"#db7093\", f.papayawhip = \"#ffefd5\", f.peachpuff = \"#ffdab9\", f.peru = \"#cd853f\", f.pink = \"#ffc0cb\", f.plum = \"#dda0dd\", f.powderblue = \"#b0e0e6\", f.rosybrown = \"#bc8f8f\", f.royalblue = \"#4169e1\", f.saddlebrown = \"#8b4513\", f.salmon = \"#fa8072\", f.sandybrown = \"#f4a460\", f.seagreen = \"#2e8b57\", f.seashell = \"#fff5ee\", f.sienna = \"#a0522d\", f.skyblue = \"#87ceeb\", f.slateblue = \"#6a5acd\", f.slategray = \"#708090\", f.snow = \"#fffafa\", f.springgreen = \"#00ff7f\", f.steelblue = \"#4682b4\", f.tan = \"#d2b48c\", f.thistle = \"#d8bfd8\", f.tomato = \"#ff6347\", f.turquoise = \"#40e0d0\", f.violet = \"#ee82ee\", f.wheat = \"#f5deb3\", f.whitesmoke = \"#f5f5f5\", f.yellowgreen = \"#9acd32\", f))(a || {});\n\n\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/color/es/config/keywords.mjs?");
/***/ }),
/***/ "./node_modules/@jiaminghi/color/es/index.mjs":
/*!****************************************************!*\
!*** ./node_modules/@jiaminghi/color/es/index.mjs ***!
\****************************************************/
/*! exports provided: darken, fade, getColorFromRgbValue, getOpacity, getRgbValue, getRgbaValue, isHex, isRgb, isRgbOrRgba, isRgba, lighten, toHex, toRgb */
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"darken\", function() { return d; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fade\", function() { return $; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getColorFromRgbValue\", function() { return u; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOpacity\", function() { return c; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRgbValue\", function() { return a; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRgbaValue\", function() { return f; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isHex\", function() { return i; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isRgb\", function() { return C; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isRgbOrRgba\", function() { return l; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isRgba\", function() { return b; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lighten\", function() { return h; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"toHex\", function() { return y; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"toRgb\", function() { return V; });\n/* harmony import */ var _config_keywords_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config/keywords.mjs */ \"./node_modules/@jiaminghi/color/es/config/keywords.mjs\");\n\nfunction i(r) {\n return typeof r != \"string\" ? !1 : (r = r.toLowerCase(), /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(r));\n}\nfunction C(r) {\n return typeof r != \"string\" ? !1 : (r = r.toLowerCase(), /^(rgb\\(|RGB\\()/.test(r));\n}\nfunction b(r) {\n return typeof r != \"string\" ? !1 : (r = r.toLowerCase(), /^(rgba|RGBA)/.test(r));\n}\nfunction l(r) {\n return /^(rgb|rgba|RGB|RGBA)/.test(r);\n}\nfunction p(r) {\n return _config_keywords_mjs__WEBPACK_IMPORTED_MODULE_0__[\"ColorKeywords\"][r];\n}\nfunction g(r) {\n if (i(r) || l(r))\n return r;\n const t = p(r);\n if (!t)\n throw new Error(`Color: Invalid Input of ${r}`);\n return t;\n}\nfunction m(r) {\n r = r.replace(\"#\", \"\"), r.length === 3 && (r = Array.from(r).map((e) => e + e).join(\"\"));\n const t = r.split(\"\");\n return new Array(3).fill(0).map((e, n) => parseInt(`0x${t[n * 2]}${t[n * 2 + 1]}`));\n}\nfunction R(r) {\n return r.replace(/rgb\\(|rgba\\(|\\)/g, \"\").split(\",\").slice(0, 3).map((t) => parseInt(t));\n}\nfunction a(r) {\n const e = g(r).toLowerCase();\n return i(e) ? m(e) : R(e);\n}\nfunction c(r) {\n const t = g(r);\n return b(t) ? Number(\n t.toLowerCase().split(\",\").slice(-1)[0].replace(/[)|\\s]/g, \"\")\n ) : 1;\n}\nfunction f(r) {\n const t = a(r);\n return t && [...t, c(r)];\n}\nfunction V(r, t) {\n const e = a(r);\n return typeof t == \"number\" ? `rgba(${e.join(\",\")},${t})` : `rgb(${e.join(\",\")})`;\n}\nfunction y(r) {\n if (i(r))\n return r;\n const t = a(r), e = (n) => Number(n).toString(16).padStart(2, \"0\");\n return `#${t.map(e).join(\"\")}`;\n}\nfunction u(r) {\n if (!Array.isArray(r))\n throw new Error(`getColorFromRgbValue: ${r} is not an array`);\n const { length: t } = r;\n if (t !== 3 && t !== 4)\n throw new Error(\"getColorFromRgbValue: value length should be 3 or 4\");\n return (t === 3 ? \"rgb(\" : \"rgba(\") + r.join(\",\") + \")\";\n}\nfunction d(r, t = 0) {\n let e = f(r);\n return e = e.map((n, o) => o === 3 ? n : n - Math.ceil(2.55 * t)).map((n) => n < 0 ? 0 : n), u(e);\n}\nfunction h(r, t = 0) {\n let e = f(r);\n return e = e.map((n, o) => o === 3 ? n : n + Math.ceil(2.55 * t)).map((n) => n > 255 ? 255 : n), u(e);\n}\nfunction $(r, t = 100) {\n const e = a(r);\n return u([...e, t / 100]);\n}\n\n\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/color/es/index.mjs?");
/***/ }),
/***/ "./node_modules/@jiaminghi/data-view/lib/components/activeRingChart/index.js":
/*!***********************************************************************************!*\
!*** ./node_modules/@jiaminghi/data-view/lib/components/activeRingChart/index.js ***!
\***********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _src_main_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/main.css */ \"./node_modules/@jiaminghi/data-view/lib/components/activeRingChart/src/main.css\");\n/* harmony import */ var _src_main_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_src_main_css__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _src_main_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./src/main.vue */ \"./node_modules/@jiaminghi/data-view/lib/components/activeRingChart/src/main.vue\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (Vue) {\n Vue.component(_src_main_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].name, _src_main_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n});\n\n\n//# sourceURL=webpack:///./node_modules/@jiaminghi/data-view/lib/components/activeRingChart/index.js?");
/***/ }),
/***/ "./node_modules/@jiaminghi/data-view/lib/components/activeRingChart/src/main.css":
/*!***************************************************************************************!*\
!*** ./node_modules/@jiaminghi/data-view/lib/components/activeRingChart/src/main.css ***!
\***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a \"}return i}var c=a({},(function(t){t&&t(\"data-v-942335c2_0\",{source:\".fa-icon{display:inline-block;fill:currentColor;overflow:visible;vertical-align:-.125em}.fa-icon>g{transform-origin:50% 50%}.fa-flip-horizontal{transform:scale(-1,1)}.fa-flip-vertical{transform:scale(1,-1)}.fa-flip-both{transform:scale(-1,-1)}.fa-spin>g{animation:fa-spin 1s 0s infinite linear}.fa-pulse>g{animation:fa-spin 1s infinite steps(8)}.fa-inverse{color:#fff}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}\",map:void 0,media:void 0})}),e,void 0,void 0,\"data-v-942335c2\",!1,void 0,l,void 0);/* harmony default export */ __webpack_exports__[\"default\"] = (c);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))\n\n//# sourceURL=webpack:///./node_modules/vue-awesome/components/Icon.js?");
/***/ }),
/***/ "./node_modules/vue-awesome/icons/align-left.js":
/*!******************************************************!*\
!*** ./node_modules/vue-awesome/icons/align-left.js ***!
\******************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components_Icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Icon */ \"./node_modules/vue-awesome/components/Icon.js\");\n\n\n_components_Icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"].register({\n 'align-left': {\n width: 448,\n height: 512,\n paths: [\n {\n d: 'M12.8 352c-7.1 0-12.8-5.7-12.8-12.8v0-38.3 0c0-7.1 5.7-12.8 12.8-12.8h0 262.3 0c7.1 0 12.8 5.7 12.8 12.8v0 38.3 0c0 7.1-5.7 12.8-12.8 12.8h0-262.3zM12.8 96c-7.1 0-12.8-5.7-12.8-12.8v0-38.3 0c0-7.1 5.7-12.8 12.8-12.8h0 262.3 0c7.1 0 12.8 5.7 12.8 12.8v0 38.3 0c0 7.1-5.7 12.8-12.8 12.8h0-262.3zM432 160c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16h-416c-8.8 0-16-7.2-16-16v-32c0-8.8 7.2-16 16-16h416zM432 416c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16h-416c-8.8 0-16-7.2-16-16v-32c0-8.8 7.2-16 16-16h416z'\n }\n ]\n }\n})\n\n\n//# sourceURL=webpack:///./node_modules/vue-awesome/icons/align-left.js?");
/***/ }),
/***/ "./node_modules/vue-awesome/icons/chart-area.js":
/*!******************************************************!*\
!*** ./node_modules/vue-awesome/icons/chart-area.js ***!
\******************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components_Icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Icon */ \"./node_modules/vue-awesome/components/Icon.js\");\n\n\n_components_Icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"].register({\n 'chart-area': {\n width: 512,\n height: 512,\n paths: [\n {\n d: 'M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-488c-6.6 0-12-5.4-12-12v-360c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5c6-4 14.2-1.8 17.4 4.7l89.9 187.8h-384v-104l86.8-144.7c4.4-7.3 14.8-7.8 19.9-1l85.3 113.7z'\n }\n ]\n }\n})\n\n\n//# sourceURL=webpack:///./node_modules/vue-awesome/icons/chart-area.js?");
/***/ }),
/***/ "./node_modules/vue-awesome/icons/chart-bar.js":
/*!*****************************************************!*\
!*** ./node_modules/vue-awesome/icons/chart-bar.js ***!
\*****************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components_Icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Icon */ \"./node_modules/vue-awesome/components/Icon.js\");\n\n\n_components_Icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"].register({\n 'chart-bar': {\n width: 512,\n height: 512,\n paths: [\n {\n d: 'M332.8 320c-6.4 0-12.8-6.4-12.8-12.8v-134.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v134.4c0 6.4-6.4 12.8-12.8 12.8h-38.4zM428.8 320c-6.4 0-12.8-6.4-12.8-12.8v-230.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v230.4c0 6.4-6.4 12.8-12.8 12.8h-38.4zM140.8 320c-6.4 0-12.8-6.4-12.8-12.8v-70.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v70.4c0 6.4-6.4 12.8-12.8 12.8h-38.4zM236.8 320c-6.4 0-12.8-6.4-12.8-12.8v-198.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v198.4c0 6.4-6.4 12.8-12.8 12.8h-38.4zM496 384c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16h-464c-17.7 0-32-14.3-32-32v-336c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v304h432z'\n }\n ]\n }\n})\n\n\n//# sourceURL=webpack:///./node_modules/vue-awesome/icons/chart-bar.js?");
/***/ }),
/***/ "./node_modules/vue-awesome/icons/chart-line.js":
/*!******************************************************!*\
!*** ./node_modules/vue-awesome/icons/chart-line.js ***!
\******************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components_Icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Icon */ \"./node_modules/vue-awesome/components/Icon.js\");\n\n\n_components_Icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"].register({\n 'chart-line': {\n width: 512,\n height: 512,\n paths: [\n {\n d: 'M496 384c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16h-464c-17.7 0-32-14.3-32-32v-336c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v304h432zM464 96c8.8 0 16 7.2 16 16v118c0 21.4-25.9 32.1-41 17l-32.4-32.4-96 96c-12.5 12.5-32.8 12.5-45.3 0l-73.4-73.4-46.1 46.1c-6.3 6.3-16.4 6.3-22.6 0l-22.6-22.6c-6.3-6.3-6.3-16.4 0-22.6l68.7-68.7c12.5-12.5 32.8-12.5 45.3 0l73.4 73.4 73.4-73.4-32.4-32.4c-15.1-15.1-4.4-41 17-41h118.1z'\n }\n ]\n }\n})\n\n\n//# sourceURL=webpack:///./node_modules/vue-awesome/icons/chart-line.js?");
/***/ }),
/***/ "./node_modules/vue-awesome/icons/chart-pie.js":
/*!*****************************************************!*\
!*** ./node_modules/vue-awesome/icons/chart-pie.js ***!
\*****************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components_Icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Icon */ \"./node_modules/vue-awesome/components/Icon.js\");\n\n\n_components_Icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"].register({\n 'chart-pie': {\n width: 544,\n height: 512,\n paths: [\n {\n d: 'M527.8 288c9.5 0 17.4 8.4 16.1 17.8-7.8 55.3-34.4 104.4-73.1 140.9-6.2 5.8-16.1 5.4-22.2-0.7l-158-158h237.3zM512 223.2c0.6 9.1-7 16.8-16.2 16.8h-223.8v-223.8c0-9.1 7.7-16.8 16.8-16.2 119.5 8.2 214.9 103.7 223.2 223.2zM224 288l155.9 155.9c6.8 6.8 6.3 18.5-1.6 24.1-38.3 27.2-84.9 43.4-135.3 44-128.2 1.6-238.5-103.5-242.9-231.6-4.2-124.8 86.9-228.9 206-245.7 9.5-1.3 17.8 6.5 17.8 16.1v237.3z'\n }\n ]\n }\n})\n\n\n//# sourceURL=webpack:///./node_modules/vue-awesome/icons/chart-pie.js?");
/***/ }),
/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
/*!********************************************************************!*\
!*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.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 normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n//# sourceURL=webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js?");
/***/ }),
/***/ "./node_modules/vue-puzzle-verification/dist/puzzleVerification.min.js":
/*!*****************************************************************************!*\
!*** ./node_modules/vue-puzzle-verification/dist/puzzleVerification.min.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse { var i, a; }\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWIAAAVLCAMAAAAvblKlAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABgUExURQAAAP////qZPv79/fj5+f////3+//Ls4/////7+/f///////wEBAf///7+znFOqUHJQL2vVY/dKQv7KUHBgvL+YZVO+/3VvW9XP0P////Ls4vj07evj2/v799rQwP7+/Gc9v+EAAAAZdFJOUwDN/nFHLVzg4RWGoKe2/P0n/fr9+IX95ddooTvrAAAgAElEQVR42u2dC0PiPBOFQS6CfFbU5YW2afv//+XXpBd6SdoiGZauz1GxoOvq43EymUzCYlHqFPw6nRaPVA44TVP1i5T/uA+FnANWv1A55P3DCBf/ZfTrIAfB5kFRouYb/ZKX8lVF6UN8fArUL1ZweUSYUOUv9dfEiauLNeOVvInT1n/+K8JEE3aa7h9mYvVbbfwmTHj9+9K1no2l40TzlxqpX5FLdGycCidul1+YRUTty3Qrj7jt4l8B9/qTRipdSSOOrIPBv5tLRG3S6gGI1a/xsN3Gj0GsOqnxv4q6Z+PoMYHC7uF/M5Owu1h4uHuz5OS/xsRlYrx5wNSj97/+a5Sj7k/V/LOVnnosUlsUjhqZxfUvbcbvXCbWhKUn0IuV1cT/aCYRdU2s44R4GWifNr+NqHHVDMwWf8/oXmTl/JiUTWubqt54207Oo+5wMd97UfUDVfTFi0BF3pZ2vqXIUZNSnbg2l3uqwbUTPx5QLTahomTcmri3BoeZ2zfqheWrhx+zPFowtlg3csw8Z3iv5Zbo2kzxqEV+HY+nNapEzjs33Bv6oJ+vGQ1/43WzymrxQO23l/SX6bJ6kIXTCA0qBTGIQQzixyNWjv9JtW/sl6Mf6n3sh19y8Guq7s9h/Wp/38Wq8zZXqadysfL2bREo/lIsVg/6mrr/XStVvw7xg1zX2M1R/HA91GnavR74bfwtxMrtIzXNtmrgk0e/pBr4kiXcBuJAVffS4rEgUFHrOr+jql+LFGI1kaoa+MHVrR8aZDv671wfqyNEWhBWKr+fe1UZrqkBnXav8/fVzQNcrOQjquhwarzZ+MPXJHMVESE3q9JM9VvzOjJLfPKIrank7JK28s//OtiVGE1cKN6ZDWHN6zQwyB/lYk92VLd89rQ4bP0CyjLclQE5rR9QOibkps1jRlDW2VrXJoqYz0pTAcQ+LaoeEC7UyKPGkVExwpk/wXLsM/G4QJo7PFDN6xqxrix3vvD9iC//3DyjtK+GnBax2Di2JF9aN+hcB/rTbIFC3b+jaaWG84bRP+ZJ2YQa9+TN2YRyJ8aq8T41o1oRPwqmQVokcNfrwup2xPevjOzTn/3dqruCicifTlUVKsJwWgfjwESDcgDMI2+q0vKXUF+nZii0IfaxundRN0BUD4zVPxgrG4yvw51JL8xwF9Rz66Bz3bijfMcJ3Tfoy3TKA0w1fF9NAt+c2plQUY5ixfJz/W/VhG8yXXvaivB3phBKbCai0gbhu76Qn+27+/QhVUzl67elBH7bjv/JW0vhOlUTIoNy/+kq+1114+CmLKsBt81ilO8/hvViIcH4Z1ZSDw8S4n9yHgm7GCv/P8rPKx7q0aSVV8JFV9vfLpE91/+v0ovvZqG1ac+MUFS0bF7WC//ar35dW9tj2t1oVRmbfIAYxCAGMYhBDGIQg1gUzlnLrIuCWGSOpvEGgcF8fhrE6lE3wx/+2RftlEBzwsVKXJCDPqdPgPifq06cK6zpjxArAsWYgsLDOgyfKz+b0GEidBDpAKKKGBJUN8oaU0DsNHE13unKWW3sNMhv9f18FNSPnsu3qCR7Zri7DXHONHdz0bWm7wb6798gVj3EgSBi5YhBalqosjXtqKHPU5P/o3vGB41M6ZsiowiKx/JwEBWJXBkSil+EvizidR+x3542Bw8VufYv/RRv5PoK1g4tNfFtwMUV4hxk8RFVDoDnK1bzkAWxt562x2YUYv1WyhaLS4cWxB2xWL+3I/bY0/bPTDkaGUU5sSvThCI6NDKKAqnJKMpg0kcs2tP2QE8KhOPzNRcuE7iffWcSPW3KB1clGxOmzZ+D9sXP5naSPW3Kr5vV+NjnN1ZfaxR3EPbf0zaUKtgfUlMMPNj642zdVvciryptPwfsv6dNjYzVP9zF6DdhmJSz+Rka/m5Pm58fYsLvSN36K/D4Tcr3tM06a7v7Xz+op21aD+zQv5zrr07R0yaLl562f+cIN4TmquPiaJRfIBHAbQFEgu/q8rpLkt3rZQVjCcKn1yRXnEu/fz0BWQBwDlfjjRODWUMGjT/ElyQp7WtuDO7kgpH9efi1BFxCjksnv4LYF+LXpAZcmrg0Moy9Em7ALZwMY49xOK4Hug7mWMdjGN2L+FREiQbga9DIP3IC8f1hIo4rF3dAmzGPUHG/iRu5RFeGMTb2YmJNOPgIkuZt6WJsfDfieqz7+Pzs3BaQExDfHycKxj3ElY2JFHdmbAXg2OFirQuIPeQTmrHNxeQUHhBHcWXjLuKKcByB+C7EcVzZOMfaDBdVJM4FYh+Ic5oaa/s2BrG3QGHUQ1zZmEDhZbiLnS6O8uEOUPcwvsTRMOI4ImnzMfUYdDFTj3vHu6j0sR1xxGjnZXpnFHymnVtDOKIof3+kiIxX4yRMOreGMHHCQ04RRbFdmn3E9NmLjSP9Gkc9vvphTOwjGkcl4Kj7QiT2yjiqU4t6oMsZQ9hfOI5aNi5uCMTeGUfdKAFhz7GiAlu8EYd9Mz69RlHUAJwHCZpfPTM+ni7NDWgXWrglIOeUX3Mzv74avgCWgcxumgdhhgNCCP3FSNx4QSJ8mwkFkEVyidVhucuy3fKwIrGQcPBqGTa0XOFkzxZe7cKOdit87DNGLEOLljD2hnidhFYlaxj78fA2Cx3KtjD24mEn4ZwxPvZh4iQcEPuVPCBehoNagvjubC0c0QrGdyLejSHeESruQzxqYmzsMRKrr68XM/QlL19fimjsK0403PqllTNOzEXjA0QKX3Hiq2BcEP4iUnhCfGiQfPlqqvGBA4g9JcVJk3BCauwJcStlS+yE87QNUj9H3C5PJFbCYQZiEBMoGO4Y7v5K0vZC0sbUgwk0ogz0VyIFxUyZSEFJ/u/bGBN7TY1pCZIJFSzyizOmVUWeMQ1XD/AxbYPy8ZjmV3nGq56RE1q4PTO2bESAsHfIne00MJGhzC5z9A84ecFWMIQQ+pvabN/e35fL9/e37QYa/rXfvi93u90yl373vt3DxK+27znXw9tqm2v1lk9Bdu9bqPgMEYcc6Wrd0CpHfiBceNN62QFcQl6uYeMpSOSG3RqsW/O6Lu/k1iZY+PHwbvdWAa7eFZdvux0+9hGHlwXh7bqvt92SeHy/DruDHbB+KP8ghO4PxO99vKca8zvh+O4Zx3K3amYRr3H8elldIa9278xB7jZxHYi3r1mmn/45y16vxsbG9+r9auJVnFXPsZ3Fq8rHuY2hdF86sazDbvMJzbP4VEdjkoo748ShQvyaNZ8rPns9lT4+ECnu0pvJiXXkXbUI54xPdW78BicvofjSRXypgvGSYHwX4mWVO7wmHcSvJeItiO/SskYcdxAn0elUIl7CSQRxBmLvgSLrBYqCMYHiXsSu4S68lC5muPORtK2tSVuJmKTN09Tj1IkU4WtJmKmHvwn0Kc5aE+hTMb1jAu1t7nFqMg7jKkxQBvIQKd5rG59eM6Mwn9mdqhIFxcx7dS3J50xPp4t+MjYN+HiiJO/Rxtf6+6nSsTQxC0s+dKjrmRprDvdYW5jlUV9JRZ0b15yrtTsW+f2oblVprDyvaVXxHI6rhquCclXFpOHKo49pG5SPx93m1y3Nr/6DhW7avrZw64ZugoTvOQgbER4RLthOgxBCCKH7VT0VNOclSAFuCyASfFeX112S7F4vnA0kQvhkGgfjXPr96wnIAoBzuBpvnBjMGjJo/CG+JElp37J9UN+5YGR/Hn4tAZeQ49LJryD2hfg1qQE3emBh7Jtwq8HYRGUY+4vDcT3QdTDHOh7D6F7EpyJKNABfg0b+kROI7w8TcVy5uAPajHmEivtN3MglkqTF2SCOsbEXE5vBrXzppm7Y+F7ESU246eAr5ZinnfAQJ67ujduYiRReMraScJx+aqwq+PgIlL76TAvAcXwBsYd8Is7RasTq4+Mzl2b88RmomGDsAXFkCKefOdqca2AIfwYG8WduZK0IxHchNhADY978In8X5C/lZX7HfBjEHhAb7yYl18YliH0FiiT9LFwcFC4OSkOrhEDhbfocFdEhKkwcGcRBVBB+hfBdjC9xMeDlRjY8tY/NI59pkbNFJG0+ph6GcVasjIZhgTZLqo8w9bh3vItKH1ulP0go9jC9i4cYU5S/P1JEsdPH2sTEiftzisjBWPONIqbPXmxcQI46gDGxv2gcabdWtr2+049GRGJfjKMKbB0zCsgQ9heOozoymAhcvhGIPTOuvVyFCQh7jhVR3HjVb0QJr4xPlZGr24jmV9+Mj6dL1NCFFm4JyDnlV3380qvhC2AZyOymeRBmOCCE0F+MxI0XJMK3mVAAWSSXWB2WuyzbLQ8rEgsJB6+WYUPLFU72bOHVLuxot8LHPmPEMrRoCWNviNdJaFWyhrEfD2+z0KFsC2MvHnYSzhnjYx8mTsIBsV/JA+JlOKgliO/O1sIRrWB8J+LdGOIdoeI+xKMmxsYykTjTm++Ixn7ihN24n3ofXn2PSOE/Tny2ERMp7kF8cHm4ifgAYj+hOErLOUhQEE5Ijb0gvqZsendjXBD+bBPO0zZI/Rxx1h7hYo36o7y65hcg9ob44zNOy/chiH0Hiqx0b9/DBApvw12JV79EVIJkkrYKcZcwSZu/qUcZJRRFCrkJ9KeVMBNon2WgTxthQrFEkYI44TNSUJL/+zbGxJ6jMS1BEqGCRX5xxrSqyDOm4eoBPqZtUD4e0/wqz3jVM3JCC7dnxpaNCBD2DrmznQYmMpTZZY7+AScv2AomoFN59vbnCRaygIEsFBg+OyJMSBOGsTxhGPvVp1VwERrpGPMeYeI0jLGxqInTMAwVNhY0sSaMjSURp2HVIw9iGcRNwiD2jDjtEQaxV8RBGCZdwiD2iljvOUhUmzCIvSK+NrsGzO+EYnHSJwxiz1OPpEeYqYfvlCLpEMbE/mfQcZswJpabQmNi/6Ik/1cYQ1iaMYTlxjxGukdABjBCCCGEEEIIzXt+V87rvr5gIUT4q2D79QVjIX0VbL9ALKbjVy1gSDMGhTRjQEiHYxCLE4axPGEYS+bFX0U8Zm1JdOpxBLH4BPoIYYQQQgghhBCasdary6v6NXq9rNaPBnxRURRHcazfBl7n+tZ7jSJ1eSTkTQ44nqK5Qrb/MOqyeZiFVfGt6N+tfnO9RvFMX6yvBvL6cYQrtvEQ48EPPu1rPGSZxzDep43/dOjbuX7SzG7dP1EcpfsHINYD3VXKvHYu5q6Bn0hdHhImiv+8eDH/f31RXanmRdT+Vp/5tvxpej/R9Ud6RKi4NBh2XlT3kQbv5rtnvjbfcu8nUo0fQ9zGm7SVkket68jykaj5Lqpen/O6ddn8iaL6LVKpdOa2mj4jiv7Rmd5KPE78dqUXEEtLGnGqpr2o9N99kUZc07PzrF8bl6p1Zw6vgy/SiC+Tfs/Xm9ZFeedpr5vfrvuHuzwAcZebBWDjTuf1mUE7fdH6DUgjPhX/TVrcFFKtq+tHHZCvn/dM1+1vsPXztaTSk/jUo01Qpa1vsfXR/q+g9+Gnue58gwV/y59kLvGicWD5huz3VN/hTm88gyZ+g4F8GShIf7ceUDH+5YjlTbxY7H814+ARJflOqPhdwINHLd4FgWEbFHwD58vIq+POoz+n92HHD5N/IHjYOv8+CDyY2PHHEDz4c4KpP0UQPCZKVDOQ/P8b8/DYS9qxyPDDYp+Tdj7X8ZLr0ZtaNpryL9Jp82DAi+Ppj9GJI0mFAP9pCMgSkfhPWxDxrT89wUSaMIzlCcPY/0inVMW2vGLM82ziJAyTgnBWXUHGr4n1s//8aV9hY7/52iUML3/aVxyZ4DFOXBjwpBGHAYhlEatQgVgWcRZmIJZGXCYTF6UuIJZAfClSiPL5Ry8glkna/vyJc7rBJedcBWaSNr9Tj5xw/Kec5ymqxhIT6D9JUsWHKjJDxreNu8LE3m1MyvZoxlCRZgwTYcbka9JjHiOdEGRaVcRnedUp50QJYcBAFgoSXx0RLKQJw1ieMIz96ssquHge6dJQVWyjMGXMEzBxGIZRRTgMsbFAuhZVjOsLbOw7Epdor4SxsffBTsON4wZhEHvPJ6JiBToip5BL2QzjmLQNxAQKxHD3t/JikjamHkyg0aiN02sIpgwkmbZRzBQSJfm/whjC0owhLJYds8j/EMgAFtJ+sW9oc9W61rbSqtRbqUOhd6Nlod10lf+i+OfvxdeqvnT1X5X/8/WbuX6D+03jG1/sn5hwB3IT83rjxPy2smKuQC93Q6yXNd023xLwqgt4uy4Z6+/oCnjTIvzElPdNxvn3vdn3CeufsQB8dXLB+FAwfu8w3jUZJ+a1AbjH+FAwfmsz1v9bE3DBeNNnvNg/Nd/CxYsr432L8aZmXLl4WwAeYbw0IFtKmi7eFYBHGdeyQW74+JlN3LFxA3DXx9uWj6tIUSIecnHPx4bwbkKkKBnXNm4EilakWDw748V+34a8rwBfGdeh4hor2jYuIS9dlBs+bkaKEvKhgPzWhVz72BKNbaFiP49g3B7vNh0bN1y8ag547+8Hl48Tdzjuu/hgI7xuGdk94D13pGhS3vdGvK07VBzeWqGiyXggrbja2J61OWy8aULuMX7qzG1/jRUjLrZEiiJUdFzczttyC2cNIy8bI17Hxoc3h437w918IsW+O+K5kgrXiFe5uJtU7JaTbNym/DY5Gu83M4oUi25OYZ1+9CZ53QGvGyhahLN2QK5cbBK3Rto2YOPhaLyYwxTPPubVNt62goUlN353Z27JgI/fp+bGJeONc8ibUW5sJdxMKlb2WfS7bRa9bIfjXjC+BooW4t4k2hqN+7lxYZjjc9p470rd1pYhrz3iHeylCmss7ocKx/xjUm48Ixd3B7ymjd0zvE5qbLXxUHLcnX4MjnfOSkUF+akrFdUcb9E08X4oc1tNrLgNFdwaeZstVPSm0Y1o7Brxnr7cZrfx0CT6rY4UrSlea7xbNnKKRm7cnkVPCRQ2G+9nUzXuUx6x8eoajW3VoNYUz+3ikYLbrTaeRTFoLDduZ22tUkVr+mGNxrZgPJRU9NK2po1bjPfNrKKY4R2f08WLvTVWrBtJxbY3AxmpVLTGu16S3Fv+aE0/mj4uGdc5RStSzCmpcNi4mVV0hrtV28WHfr2tU6pIbLnxezupONjrbVsz+xlw8dOXNIfKmg0XO2xcUX4fX8ZLrInbpHqbI3Hrzz+eOTVeDNaCGmnbypFU9G3cyY0dwXg5MN41ovF2aIZXlzSfuFjRSSkGIW8Hl5ha5aCdY5GptVLaqgZ1CxWWoqZlEW/R8vE8ptGWSGGrVKxageLgXidNBpb7m3nbdfXjrbXa35xEb+qiZnu8e/7U2Gbj9WClop1UvHdsvOtF46SbHbvnH9dQ0S9UuGLF8y/4L4aneBMqFQMuLottSS8YO6JxNze2Fiosk+j9c9t4tKrphOye4jVtnO2sLrZPP25ei94/d+I2afnDusC0ehuMxsvBrG1nm35068ZDq3hzar0a8vH4Kt7h7eCIxrvG8kcyOsWbtBbdWv3YbzbNYFyu4jznNHrvsvF6MxQoVm+WSsXVxR0b9+oUu46L329fi943ikGLWVTchpc/elXNt5U9Ny5aYnf99Y9kcC368KNo3F2M3s95vBtrvurV2zqxorPA1LPx+6QGt27ZeDOT1f5Oo+Z+WqNmbxXvfXAVL+k3EVp6YfsNbttuZ1BnhWkmTRXtnm5nT8V6sGvFmlMsRyrzU8e7dXuKZ7Px/sr3OKekojHF29qHvIHceNla7a/f7C3dB8ccb7vqNRvbbTynteheMWg91qjZbXBzrfcnu8mVeUs0vtbb1n0bL2ZQq1hMaOreTutwm1wN2k1ocLMvMTlr8/t52LhTDXKmbc1A0Zp/LJfvNhs7SpquGZ4jOR7YXvPsmfFioBrkzo3btfnKxe/WthVXZ5B1yOsvRQ83ES6ePDWeGo4tNrZE48rFHRvbNn/Y622dSkVnD9NmsKVi/8yV+f5WsSvhjb1t/q3bU/He3vM4sIdpaSm42fpWtsNdhNYmwjmsRbtsbC1prqyreO9WG1u3MI01uFn2MFlXP55/EW/hsvGktnl7T3dvyMs6qdtwL+xbZ/HDklTMqTPInVTY2uYdyx/XmqbNxlk/a9sN7Ci1zD62o3t2n7ulwpVUtKZ465FGzcHc2NULO3X1w1Ga38zJxY6k4pYdpQfnFC/pjXgTbWwrVDj72563MG8PFoMr/ta6cSNUWItB2eD+ftdC6djWhLn0wrZbgzZ72wLTaN24a+PlYDSeuPnDnlQ4ysYz6JsfKc4P7Hd8c5WNu8sf7ilex8Zvb45TKlwrpQ0bH5+WcOsMhSlTPHs0trp4sMGtbeOfrfY/v407/cb1/v5GUrGV6qlYLod27Q4dtjKv9qvFvtniNlyocNnY4uLleCfs8CLe0GEr+zmVNK05xX5C3Xh0+aPbU3E9paLZ4LbsVypWvWi8HS5qLp69MWgxod/Y3Ro00cbJbnj1o9mn6W4MGkrbZtRS4UwqhmPFu9vGtoJQZ/N5p972Zs+NN24bX4uaz1nT7OTGrg3+62m58dI1xbOmbdaueee+6C7hzSzOAVn0D3Gzdbhtx8pBlg43d07h6pof6Qwa2t0/h57uxWAPYf8MN2elwjKNTuynizW75of2MLUnH2vbOuni+deifzDFc1Yq3FtK7bGi2VIxtr3f2W387Jg73VfDrUHb1c3RuFeXd9j47TBy9NVw2vb8849Fsxi0v2WDv7MzaDnQfLVr19vGbLwes/Gcdti4tjuOVCoGD9S0HH7VqWmaEW+KjW3RePHcS9F2ynWH23r6FK83AenvjB5a/5hk40Z/2751nOZ+//R7PxbTN/iPTvHeLaX5zJ5TjBwEMtSn2d94PoPTVka2Rq8trUFv1tzYedpK4q5q3rlP7Pk7KhbjbfPbW5c/+gfDTjhAunf0lbPBbb+ZzXE27rVS9+FXg8sf1h02SXdfQjcaO5OKwZOvZmNjy2r/pMOvhpc/dp1wnAyfLnZo5sbdsvHoMmkrGj/taSuL0d0fPcjVFG+8a9559FWj4DbNxsOQZ7MaPTWpcNQ07ccbm2JQ4qwFOY/TXN1wRN4MKsfDBTebjW2Jm/OQ7mRC99Xb1cc3LuLNa8Db7B0n2gzbeKjglriW8eyBYsq+6G5Fcx6VCusq3qTlD+uO0uVwf5v9WNjDwb6IN2nB/8nT41tODZq2pXQ3dC5T/yDC99bsozDy0OHGe9vRV7Px8WY/fR49daOYq3HlvaR86G4Us64xbQaeXGW2pz2uJ0TjocOvxp+WwmbjqqPbXphfz3K4s6TGllU895MmTKgbJ/2sonWe5rTjNAe2MO2fevrRqbltJi5/vA3Oone20x7HWmEdBbfRLUzz6Frp7LGZOOQNPWdCJ1S0j96dVm+bvoi3mEWlYtFcYtpYnl9l21+MXk1cxcucs+gu4+HDVjbzrRvvu+Ug2yYmW09Fe/7R3lI6tIepd0j3YWx7f9fG+01n9WMGkO0lt5GeCuss2hYqMveTqzRag94cT5ngejaxGeFd9J4Yz3Heo93GB/vyx8ChQcuxBrf+k+KtJ0Tj/XwiRWMavR5um1/ZIoV7R2nirLe9W4++sp5SYcmN60LF8dkDxWLo6R23o0nFYXganTlGvOGkoreIN/LkKrOqBt2+GD2w+6O9+GE5+srZ4Laa/CSwi+dPjvc3H0U4eLzxbrAatHQeaTP2NEzWZyhdXBs1j7Ow8cZ1Muyk5Q/LgZpJP6voL+K920+pmHSAwizKbYvx5/6w7Iy27z53PkdpMhCNHZ1BEyEvZrcz4cZVvPHn2q2eTKxfb+vlFIfWGd2rwaPmZ7X1Y9LBsKMFt8MdW/Gc+8QGdibMavVjoKliQtt8FY3HnpUisQNe2o5ws2+Mdox3LRc/d0lzNKnYuho1HU+L59iKtytbWizP/NHOjbdj0Xg/mynefmJSsZ6SGw88ucrQ2VeHged2XDcPW3EcpzmL2Uc7qejZeGvtqZi6MbrX0d2bf4zlxrai5n4/r7XonycVzkW8G57MeHjr+dqxFt08TnNWpflOUXPCafOOJ2La9RbxkrGzd12reMPReLGfQ9uKMxo3D4Z1bCmtn/r8JhvvxvclTH4O2Ln0t43nxr2kYvhJSluQs7Hd545nsJm8iPf8R5YOPb/j6CYm13Ptug97dNjYeYDbdnARbzGHYPyzKd7basjGjQX/gWqQdTF69eY6+qqGvO+VjYtQcZxHNJ6eVJQjXhWMO4vR/YJmMvoUpa0Gt6Ht/Zve+W1P72L3afODJ4yNPi/3aOOK4yR0+yEKG0ehYiYtFXvnev/E54wezo2Tzn7Snb0zyNrg1uzTtO/un0OHWy91m7gz+u2GtnmHi1t7mBxPdWXZUGpZ8H/2joopzyi2nbgYbW0hzAZOUBjZs7u2bsWzLZMe55NVTO6Gbe0ovcHGruUP1zR6a93BNK8zFNy58eDsY9VzsWObWNJf8LccRDi2h2k9dCrTLNrmRyoVzp3R05Y/mitMrvM0D4fJ0+jN3BZK94vFfsLyx8hJIAdH10rifq7ddm7saIW1bO93nkN4fN6k4kfRuF1wG9lSmg2dID28vX87dtjjsx9SMVI4dp/hNvwkQbspjZq9Y2EP4w1utnPQF4t5nRrUPAp9PTTklZWKSXXj3gRkZ6/NDze4bdbrWZ7R3T+oYu86GHZtrVQ4bDxlDj1cmbc0dG+G9kXPyMZj3catvLgTia11oIEF094cpHNKtyUe/932q9Ppxeh0WiARwC8NAVngT/2loz1M/Or40tMRKhIeTlN8LKQSqgrD6IoYLAIjXZiLAU/SxE0XQ1goXftOGevkM2LCsGScaIXhE8FCDvHp6mzYiCA+LkAMYgIFYrgjafsViJl6SEcKJtCPsDGM5W1MQParvQ0xJXmvYmHpL/gYDwuPeQx2QpBpVZGMxacg14n4K+dfzdfcwEKMsPHvEcZSUSII8tvyhlghY+JjhfiIjQ5KXHEAABAfSURBVEVk4LZukW/EpyvcE4hBPONA0b9GDHckbYipBxPofyxWUAYSR3z+yHUGsVyg+ChFoJAjXAx3MJaKEh8f+W15Q6yQ0NlwNYiPH2d4CMjAbd0iEIMYWRH3rxHDHUkbYurBBPofixWUgaRd/HKP4CfOGHzjUSLXCcTPzBiAdzD+jkAszPg7ikEsyjhNXlIb428FYj+MNd4otSBOw/g7v1XfIL6P8Xf4/Z1owul318VhmERJfaYb7H7GOE1zF8dpmqoo/O652EiB+C7G3yrKX3Oa6Xc3HH/HBeJvEN8bK6JYWzlKVYdwFoLYB+NUpZG+SYNQdQNxqRjEdzLOs4ZYJxVp1D529zuN24zB9lPG38l3TvY7+tYBIY16410cx98gvptxGkU5RqVy6zZTN521MfXwwjiMCq5hHiaCrME4biZyMLszVuhzjaPGnf6J6CC7i/F3OZHWb0n2TRlIJD9WWU44f4vTpo9B7I9xPsdL0zz06oLQN4hlGKd6pIvClHqxWDyOwzxKqBeTBX+DWMTHUapUNedIQSzCOE7qSbUJySCW8HHh4UhfdhebQOXHxznjSJfezMyOtTuR/DhN9Bwv/P6OIxV9g1iAcarXQ7P0JU/gVIiLpeZ5uXtVmk9AFC4W8nH6/fIdKhMmmnUgKPmbg+TpcRKVdeM4BbFMrIi+v8opX5KCWIRxHKRF7Th9UdUcBER+43GsNNg8TOgGgATEIrHiJY50IP6OFMujYozTSGdtqioJwUeAsS7O55hVCmIZxt+6mdAkbcU6NHQE8uOyqSJWuFg0VrwkilgsmLvlqVuWMvWQZBzH1wV/yMgwDigDPSgeg/ghjMEizhgq4oyBIs4YJuKMQSLOGCLijAEizhge4ozBIc4YGuKMgSHOGBbijEEhzhgS4owBIc4YDsKMFxzIK80YBuKMQTBBr+gVxCAGMYhBDGIQgxjEIAYwiEEMYhCDGMQgBjGIQQxiEIMYxCAGMYhB7ENpGtz4ojLW7W9ScDPiIIbabYhVmN30kgYR1G50cZbcogzEt7u4jTjLijcQS7k4U2kQpCmI5VxsAAdBEGUgFnFxzi+NsyzOIeNiERdnqgSepw2uURDEd7lY4yuuch/jYpFYnE8rapAxiGVcDGLhWJxW92JisVBGERXZWpak3RkJiD3F4kynxVGk3AkFiO+d3YUqMHIXLkB87+wuS5Q+n7j5WNa+B+I7axS6BtSuAunqZQhify7uKdQVCxWC2KOLe6E3yONzGoJYysV5bpEH45wxiEVcrEtuaZknp+WgB+K7XBx3FkDiOnvT8aIY9ED8cxdryzaGtXygixox2MTkEMT3uDiLOlMOPQtpZhKq+CiIf+piAzS6hlyTrLVMXQ56IP6hiw3QTA9rJVcTfDuh2Qx69FH8zMU1UG3mPEszD8SZLUmOQPwjF1+BmqXRqEiHLVM9/RsA8c0uDpsziyQzBU1XtpxnGSC+3cVx0CtopkGSuWcjIL7Vxc0KRCNYhNSLPambm11XP0IQ+3KxCh3jmjVYgPgHsTi0KktT+4dAfLuLXdJ5hfVxEN8cix0yyZvtcfZ63KZyta6vxITiLAvLRLnxMip1S+f9b0A8LJ0m3yh3ygdiB+LclPENL1kaKBDfiDhsxxCTcbjVaQsA8STErcw4zOI4CcOhvgAQ34M4rHbchCCWQRxed9yEIJZArGudaZSFulIUhyAWQKxTuDwYZ3oinYJYxMUVvjAJAkc4BvE9iHUkLuLDQGoG4nsQZy3EMYglYrGeuZm16thRUAbxvYj1jhs9u4vds2QQ35kXq2LHjV55ykAsgTird9w0ptBZCGKPE+gcp9lx0/BwlrUGPhDfWwZKijW85v1qDASxJ8TdTyh33GQgFkKsF55S1YzNIPaLODQthqajvppPg/iuCXQXXWh23IQF6XLQA/EdiMM4bifDpqvTcA+LHTcZiO9CrIGqVjocXWNwWGxdyEB8B+Kw3HETNmch10zC3NXAQfxDxFm946YIB13CVdgwdgbxDxCXcSBMynfFAx2U5qMxiH+EuASa5ReqsGpmW70rPg3EP0Bc2rOID2ZptEiHLVO9YscNiG9FHDdmFknVSJjZOJosA8Q3I47btcsqWDj+QYyLb0actgmXGNvZBMXMuxBbaJpxLbU3toH4By6OcpadBu/QzOzikM5MXxmFTWWKbNtxQ3/xrS52t8MHdMnfj9icoODacZO69npkIJ6OWM814jixvRpZHk4yttPchDjJwluVJCC+CbGwQAxiEIMYxCD+y4iHkoPMLIWGIL4LcaZcbdrmeJs4n5aoDMT3IHZvNqhL9WkI4jsR63Px6tlEPa/QD10X/1sPZ2EG4hsR5zDTYmE/jFJ9pVeaVRpFGrGKskTFcWqarfTDKlZxBuKbEIdFGSg1TzsaFOX5uKj25LR1oKjuZOWVYgJ9I2LdDxhpcJFeeFZBoFkrfVEjTvN7qdlQmigQ3x4ogkBHWn3wo9I5Wn5X3yl7fgxifa++SEF8K2JDMcvM1ueiCJ/nEbp5xQx3Jdks/1D5cATiHyPWzRSmCG9DHBrEKYh/Hig0vtRsasxjcT9QGBcn5jPToj+rmhqOT/9AbFagzdimxz294m9GwCgNWog13vwzVdFfofTSUn6T6CsQj83usrRM1ZJiOVSTNVetWJybu9j1aM6B1MC1qTN9lYF4oEYRKdOlplQ5s1A53nxqoR+KMz3HqN6SyMxBkqiIxZF+mtjrDYiHqmnlDDmr5seNh8yEr3zT3bCZPpA+MmemE4tl6sXFRoVbEwoQ38Q41jWKW0tvIL5F2c0r/L8Bcan96bvUab9AAqoBG8jw8G/h744wsjRhGMsThrFffVsFF6GRjjHvUWGCUPEAE2Nj6UhMNAYxiFEHcdrbOAdiz4ijLuIIxLiYWIxAzNSDCTTyYWNMLB6N4SIdKggT0owhLM0YwsJjHiOdjJFpVRHW8X93C4jCgEEsTxjEtxK+dB9QIPZC+NK+Olf14+B/QRieL/nVpX7MMFcXEI+r6UTD7n+XEuK5fDTIry4auvrf+dL8VQTNz4PkpDBxsVydtV8L7+Y+PtfWPucWvui7Z1w80cTnlneviPMooSPCOVDnS3DufF4ZL0A8DXFBNTgH9RJeY5zTJ7yeA4P4bB67nDXrSx2VQfxzF5eIcxcb9s3PO4cX8yEQTx7tquHtbBBfzh0XX85FoKgNr/6X+5pYPBlxcD4HOc+cog1xjlep0rzXXCNPPi7E4qmIL4GmmWNVVS5WhIJitDublE3DP5tcwnxYNViD+KZAYY8dYYGY2Z0QYmoUIP4V9TYICgMGsTxhEP80IJ/P1zTifAaxwJCXTy0uQV3UBLFfwsa0YXC9A2LPcfhi5ndZ8L84MKWfi65OBOEZxL5MrC2rLv9LAm3kgu85u7gJg/jmMKFUVZDXlM9lufNCoPCXrkUF4qyFGBf7zCZ0oHjNqkARmEAR/k+FIPaXsOnDRc91IE5CpRH/zx0qQPmjWUd+Y17LMmb1BmIqbSAGMYg9a72LkZh265wwGGS1XuBhaR8vYCAtEIMYxAjEIAYxAjGIEYhBDGIEYhCDGIEYxAjEIAYxAjGIQYxADGIEYhCDGIEYxCBGIAYxAjGIQYxADGIQIxCDGDUQqzTlVfR1kYVIVgsQgBjECMQgBjECMYgRiEEMYgRiEIMYgRjECMQgBjECMYhBjEAMYgRiEIMYgRjEIEYgBjECMYhBjEAMYhAjEIMYgRjEIEYgBjGIEYhBjEAMYhAjEIMYxAjEIEYgBjGIEYhBDGIEYhAjEIMYxAjEIAYxAjGIEYhBDGIEYhCDGIEYxAjEIAYxAjGIQYxADGIEYhCDGIEYxCBGIAYxAjGIQYxADGIQIxCDGIEYxCBGIAYxiBGIQYxADGIQIxCDGMQIxCBGIAYxiBGIQQxiBGIQIxCDGMQIxCBGIAYxiBGIQQxiBGIQIxCDGMQIxCAGMQIxiBGIQQxiBGIQgxiBGMQIxCAGMQIxiEGMQAxiBGIQgxiBGMQgRiAGMQIxiEGMQAxiECMQgxiBGMQgRiAGMYgRiEGMQAxiECMQgxjECMQgRiAGMYgRiEEMYgRiECMQgxjECMQgBjECMYgRiEEMYgRiEIMYgRjECMQgBjECMYhBjEAMYgRiEIMYgRjEIEYgnjPiBAayShbvQJDV+2KDjWVNvFksNu9AlgP8nhM+nxeVjufTAvnXuWZ8PDdwI3+qwUJYmrF+d4SGJGMISzOG8AMYQ1gcMRiEEzcYSxM+krJJEyYtlicMY3nCMBZEfGwkFvAQ1H79n9F6DwsZwNv/am2BLKD1fy2tIeJb2/862sJEmDCMhaKE0otNilghMNKVUHfhrrwxYszzHyYKuLuQUCFl4v/C1jtsLJCvdRETjX3pvzoUq2LMq4Lxf7Dxi7jZwgJiOcRJAmJZxKrMjUEshrj5HsQiiJP//ktALJa0lUG4EYtJ2jxPPQxbpRqImXp4nkD3kjYm0L5tnDSEicWm0Cx8CIcKSvIPZQxh6VhBlJAY81jkfwBkWlUEdTwFuU7HxYJ9dzIygA3kUwANIcLawAVpcEhEiZxwdQFiIROXATgAsZCCgN1g4ohhAGICBZo63CHxpG1xws6yUw89i4ax+AQaFmKxoi4DISnE549cZyptcoHio9Tp9AENIcJFpU1TBodElPj4OFYXIBbR+aMMwB8gFlJlYiSIGAYgJlCgqcMdEk/aFkfsLDv1OJ4IGQ+YQMNCLFaYMhCVNoQQQgj5Sd8+c5G6CeZun6XI3qT0WQsWglEiVxQQK2RNnIQpNhZFnISKSCGHOA3TKIwIxoKIgzAsCINYbLgLSsIMdyRtTD0QE2iEEEIIIYQQQuiuCfRXLibQcjp+laIMJKUS8MvXFyykosRLmH59qfCFWCFnYhWmaai+sLFgnEhDbWQQg3jGiFMChfhwpxjuhG38QtLG1IMJNEIIIYQQQggh9Csm0N+5mEDLaf9diqdjk9J3LVgIRolCxAppE2NjMcRpKRCLIa6eMB7EuJjhDpG0MfVgAo0QQgghhBBCCP32CfTp5eXEBFqS8IsRjCUJf3/DWFDHHG4SasRspxGShqtdjIdFEZsocYSyKOKTuYAGLp41YvjKZhSFyCiEZx74mNndvBlTo0AIIYQQQgihf0DHP7koAgnqTylIyBG+aMAXGMtFiUuY49U3xAqxMFG5GBvL6BL/+UM0lkUcagtfQCwYKC5/gkRFCYglk+LMDHekxuJpMSZm6sEEGiGEEEK/T6ePH4rGrKn6+LFgB2IQgxjEIAYxAjGIQQxiEIMYxCAGMYgRiEEMYhCD+JnEwtKDdSz50RIkzRjC0owhLM0YwlLaHF4VMno9bAQAv+V8oxhpRVFO+c0z4C18u5iV2vokfCkAR6hQCfnij/Crgq8Ns3r152EA2yH78vEbhN2MvQx6ewVLt5SPp7C8RHi4B/Z6efFh4rj5pXlRTcBR7MHGK+LEoI3V6v6Erf2VeWm7OIruT9ww8YifQSzP+F7C/we5sIhf3xO9twAAAABJRU5ErkJggg==\"\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"data:application/vnd.ms-fontobject;base64,zAcAACQHAAABAAIAAAAAAAIABQMAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAbGH4SQAAAAAAAAAAAAAAAAAAAAAAABAAaQBjAG8AbgBmAG8AbgB0AAAADgBSAGUAZwB1AGwAYQByAAAAFgBWAGUAcgBzAGkAbwBuACAAMQAuADAAAAAQAGkAYwBvAG4AZgBvAG4AdAAAAAAAAAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzI8f2HxAAABfAAAAFZjbWFw51C5tgAAAeAAAAF8Z2x5ZgBIDOYAAANkAAABFGhlYWQWAG1cAAAA4AAAADZoaGVhB94DhAAAALwAAAAkaG10eAwAAAAAAAHUAAAADGxvY2EAWACKAAADXAAAAAhtYXhwAREAQgAAARgAAAAgbmFtZT5U/n0AAAR4AAACbXBvc3TLcp3HAAAG6AAAADoAAQAAA4D/gABcBAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAMAAQAAAAEAAEn4YWxfDzz1AAsEAAAAAADZcJSwAAAAANlwlLAAAP/fBAADIAAAAAgAAgAAAAAAAAABAAAAAwA2AAQAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQQAAZAABQAIAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA5gn//wOA/4AAXAOAAIAAAAABAAAAAAAABAAAAAQAAAAEAAAAAAAABQAAAAMAAAAsAAAABAAAAVQAAQAAAAAATgADAAEAAAAsAAMACgAAAVQABAAiAAAABAAEAAEAAOYJ//8AAOYJ//8AAAABAAQAAAACAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAoAAAAAAAAAAIAAOYJAADmCQAAAAIADwHxAA8B8QAAAAEAAAAAAFgAigAEAAD/4AOgAyAAAQANABkANQAAJTE3LgEnDgEHHgEXPgEFLgEnPgE3HgEXDgE3Jzc2NCYiDwEnJiIGFB8BBwYUFjI/ARcWMjY0A2k3BeuwsOsFBeuwsOv+ZZfJBATJl5fJBATJE4CACRIXCoB/CRgSCX+ACRIYCYCACRgSjPSw6wUF67Cw6wUF67QEyZeXyQQEyZeXyd6BfwkYEgl/fwkSGAl/fgkYEgl+gQkSGAAAAAEAAP/fA48DHgAbAAABDgEXDgEHLgEnPgE3FzcnBw4BBx4BFz4BNy4BA1oUAQEFwoB/wgUFwn8B0NABqeEFBeGpquEFAR0BhwEbFXe5BQW5d3i4BVKDYlIE05+f0wQE058VGwAAABIA3gABAAAAAAAAABUAAAABAAAAAAABAAgAFQABAAAAAAACAAcAHQABAAAAAAADAAgAJAABAAAAAAAEAAgALAABAAAAAAAFAAsANAABAAAAAAAGAAgAPwABAAAAAAAKACsARwABAAAAAAALABMAcgADAAEECQAAACoAhQADAAEECQABABAArwADAAEECQACAA4AvwADAAEECQADABAAzQADAAEECQAEABAA3QADAAEECQAFABYA7QADAAEECQAGABABAwADAAEECQAKAFYBEwADAAEECQALACYBaQpDcmVhdGVkIGJ5IGljb25mb250Cmljb25mb250UmVndWxhcmljb25mb250aWNvbmZvbnRWZXJzaW9uIDEuMGljb25mb250R2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20ACgBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AAoAaQBjAG8AbgBmAG8AbgB0AFIAZQBnAHUAbABhAHIAaQBjAG8AbgBmAG8AbgB0AGkAYwBvAG4AZgBvAG4AdABWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbgBmAG8AbgB0AEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBAgEDAQQABmd1YW5iaQdzaHVheGluAAAAAA==\"\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n\tname: \"puzzleVerification\",\n\tdata() {\n\t\treturn {\n\t\t\tisVerificationShow: false,\n\t\t\tmoveStart: \"\",\n\t\t\tdisplayTips: false,\n\t\t\tverification: false,\n\t\t\trandomX: null,\n\t\t\trandomY: null,\n\t\t\timgRandom: \"\",\n\t\t\tleft_Num: 0,\n\t\t\tdataWidth: null,\n\t\t\tdataHeight: null,\n\t\t\tpuzzleSize: null, // 滑块的大小\n\t\t\tdeviationValue: null,\n\t\t\tradius: null,\n\t\t\tpadding: null\n\t\t};\n\t},\n\tmodel: {\n\t\tprop: 'verificationShow',\n\t\tevent: 'setVisible'\n\t},\n\twatch: {\n\t\tisVerificationShow(val) {\n\t\t\tthis.$emit('setVisible', val);\n\t\t},\n\t\tverificationShow(val) {\n\t\t\tthis.isVerificationShow = val;\n\t\t}\n\t},\n\tprops: {\n\t\t// 画布图片的尺寸\n\t\twidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 260\n\t\t},\n\t\theight: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 120\n\t\t},\n\t\t// 图集\n\t\tpuzzleImgList: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [\"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1551244602306&di=5b40d29f1de52815d2643ce3eb3f6d3b&imgtype=0&src=http%3A%2F%2Fimg1.3lian.com%2F2015%2Fa1%2F38%2Fd%2F168.jpg\", \"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1551244644208&di=3f09dbe3476994f15ed207e4d0c008ef&imgtype=0&src=http%3A%2F%2Fpic3.16pic.com%2F00%2F47%2F90%2F16pic_4790939_b.jpg\", \"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1551244821054&di=bf03257cfaf9d0a0f020e7f1363cf5f8&imgtype=0&src=http%3A%2F%2Fpic.58pic.com%2F58pic%2F15%2F11%2F96%2F88W58PIC7Y2_1024.jpg\"]\n\t\t},\n\t\t// 滑块的大小\n\t\tblockSize: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 40\n\t\t},\n\t\t// 误差\n\t\tdeviation: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 4\n\t\t},\n\t\t// 滑块的圆角大小\n\t\tblockRadius: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 4\n\t\t},\n\t\t// 滑块随机出现的范围\n\t\twraperPadding: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 20\n\t\t},\n\t\t// 滑块形状 square puzzle\n\t\tblockType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'square'\n\t\t},\n\t\t// 成功的回调\n\t\tonSuccess: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => {\n\t\t\t\tconsole.log(\"成功\");\n\t\t\t}\n\t\t},\n\t\t// 失败的回调\n\t\tonError: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => {\n\t\t\t\tconsole.log(\"失败\");\n\t\t\t}\n\t\t},\n\t\tverificationShow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$nextTick(() => {\n\t\t\tthis.initCanvas();\n\t\t});\n\t},\n\tcreated() {\n\t\t// 随机显示一张图片\n\t\tlet imgRandomIndex = Math.round(Math.random() * (this.puzzleImgList.length - 1));\n\t\tthis.imgRandom = this.puzzleImgList[imgRandomIndex];\n\n\t\tthis.puzzleSize = Number(this.blockSize);\n\t\tthis.deviationValue = Number(this.deviation);\n\t\tthis.radius = Number(this.blockRadius);\n\t\tthis.dataWidth = Number(this.width);\n\t\tthis.dataHeight = Number(this.height);\n\t\tthis.padding = Number(this.wraperPadding);\n\t},\n\tmethods: {\n\t\t/* 关闭验证 */\n\t\tcloseVerificationBox() {\n\t\t\tthis.isVerificationShow = false;\n\t\t},\n\t\t/* 刷新 */\n\t\trefreshImg() {\n\t\t\tlet imgRandomIndex = Math.round(Math.random() * (this.puzzleImgList.length - 1));\n\t\t\tthis.imgRandom = this.puzzleImgList[imgRandomIndex];\n\t\t\tthis.initCanvas();\n\t\t},\n\t\t/* 画布初始化 */\n\t\tinitCanvas() {\n\t\t\tthis.clearCanvas();\n\t\t\tlet w = this.dataWidth;\n\t\t\tlet h = this.dataHeight;\n\t\t\tlet PL_Size = this.puzzleSize;\n\t\t\tlet padding = this.padding;\n\t\t\tlet MinN_X = padding + PL_Size;\n\t\t\tlet MaxN_X = w - padding - PL_Size - PL_Size / 6;\n\t\t\tlet MaxN_Y = padding;\n\t\t\tlet MinN_Y = h - padding - PL_Size - PL_Size / 6;\n\t\t\tthis.randomX = Math.round(Math.random() * (MaxN_X - PL_Size) + MinN_X);\n\t\t\tthis.randomY = Math.round(Math.random() * MaxN_Y + MinN_Y);\n\t\t\tlet X = this.randomX;\n\t\t\tlet Y = this.randomY;\n\t\t\tthis.left_Num = -X + 10;\n\t\t\tlet d = PL_Size / 3;\n\t\t\tlet radius = Number(this.radius);\n\n\t\t\tlet c = this.$refs.puzzleBox;\n\t\t\tlet c_l = this.$refs.puzzleLost;\n\t\t\tlet c_s = this.$refs.puzzleShadow;\n\t\t\tlet ctx = c.getContext(\"2d\");\n\t\t\tlet ctx_l = c_l.getContext(\"2d\");\n\t\t\tlet ctx_s = c_s.getContext(\"2d\");\n\t\t\tctx.globalCompositeOperation = \"xor\";\n\t\t\tctx.shadowBlur = 10;\n\t\t\tctx.shadowColor = \"#fff\";\n\t\t\tctx.shadowOffsetX = 3;\n\t\t\tctx.shadowOffsetY = 3;\n\t\t\tctx.fillStyle = \"rgba(0,0,0,0.7)\";\n\t\t\tctx.beginPath();\n\t\t\tctx.lineWidth = \"1\";\n\t\t\tctx.strokeStyle = \"rgba(0,0,0,0)\";\n\t\t\tif (this.blockType === 'square') {\n\t\t\t\tctx.arc(X + radius, Y + radius, radius, Math.PI, Math.PI * 3 / 2);\n\t\t\t\tctx.lineTo(PL_Size - radius + X, Y);\n\t\t\t\tctx.arc(PL_Size - radius + X, radius + Y, radius, Math.PI * 3 / 2, Math.PI * 2);\n\t\t\t\tctx.lineTo(PL_Size + X, PL_Size + Y - radius);\n\t\t\t\tctx.arc(PL_Size - radius + X, PL_Size - radius + Y, radius, 0, Math.PI * 1 / 2);\n\t\t\t\tctx.lineTo(radius + X, PL_Size + Y);\n\t\t\t\tctx.arc(radius + X, PL_Size - radius + Y, radius, Math.PI * 1 / 2, Math.PI);\n\t\t\t} else {\n\t\t\t\tctx.moveTo(X, Y);\n\t\t\t\tctx.lineTo(X + d, Y);\n\t\t\t\tctx.bezierCurveTo(X + d, Y - d, X + 2 * d, Y - d, X + 2 * d, Y);\n\t\t\t\tctx.lineTo(X + 3 * d, Y);\n\t\t\t\tctx.lineTo(X + 3 * d, Y + d);\n\t\t\t\tctx.bezierCurveTo(X + 2 * d, Y + d, X + 2 * d, Y + 2 * d, X + 3 * d, Y + 2 * d);\n\t\t\t\tctx.lineTo(X + 3 * d, Y + 3 * d);\n\t\t\t\tctx.lineTo(X, Y + 3 * d);\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t\tctx.stroke();\n\t\t\tctx.fill();\n\n\t\t\tlet img = new Image();\n\t\t\timg.src = this.imgRandom;\n\n\t\t\timg.onload = function () {\n\t\t\t\tctx_l.drawImage(img, 0, 0, w, h);\n\t\t\t};\n\t\t\tctx_l.beginPath();\n\t\t\tctx_l.strokeStyle = \"rgba(0,0,0,0)\";\n\t\t\tif (this.blockType === 'square') {\n\t\t\t\tctx_l.arc(X + radius, Y + radius, radius, Math.PI, Math.PI * 3 / 2);\n\t\t\t\tctx_l.lineTo(PL_Size - radius + X, Y);\n\t\t\t\tctx_l.arc(PL_Size - radius + X, radius + Y, radius, Math.PI * 3 / 2, Math.PI * 2);\n\t\t\t\tctx_l.lineTo(PL_Size + X, PL_Size + Y - radius);\n\t\t\t\tctx_l.arc(PL_Size - radius + X, PL_Size - radius + Y, radius, 0, Math.PI * 1 / 2);\n\t\t\t\tctx_l.lineTo(radius + X, PL_Size + Y);\n\t\t\t\tctx_l.arc(radius + X, PL_Size - radius + Y, radius, Math.PI * 1 / 2, Math.PI);\n\t\t\t} else {\n\t\t\t\tctx_l.moveTo(X, Y);\n\t\t\t\tctx_l.lineTo(X + d, Y);\n\t\t\t\tctx_l.bezierCurveTo(X + d, Y - d, X + 2 * d, Y - d, X + 2 * d, Y);\n\t\t\t\tctx_l.lineTo(X + 3 * d, Y);\n\t\t\t\tctx_l.lineTo(X + 3 * d, Y + d);\n\t\t\t\tctx_l.bezierCurveTo(X + 2 * d, Y + d, X + 2 * d, Y + 2 * d, X + 3 * d, Y + 2 * d);\n\t\t\t\tctx_l.lineTo(X + 3 * d, Y + 3 * d);\n\t\t\t\tctx_l.lineTo(X, Y + 3 * d);\n\t\t\t}\n\t\t\tctx_l.closePath();\n\t\t\tctx_l.stroke();\n\t\t\tctx_l.shadowBlur = 10;\n\t\t\tctx_l.shadowColor = \"black\";\n\t\t\tctx_l.clip();\n\t\t\tctx_s.beginPath();\n\t\t\tctx_s.lineWidth = \"1\";\n\t\t\tctx_s.strokeStyle = \"rgba(0,0,0,0)\";\n\t\t\tif (this.blockType === 'square') {\n\t\t\t\tctx_s.arc(X + radius, Y + radius, radius, Math.PI, Math.PI * 3 / 2);\n\t\t\t\tctx_s.lineTo(PL_Size - radius + X, Y);\n\t\t\t\tctx_s.arc(PL_Size - radius + X, radius + Y, radius, Math.PI * 3 / 2, Math.PI * 2);\n\t\t\t\tctx_s.lineTo(PL_Size + X, PL_Size + Y - radius);\n\t\t\t\tctx_s.arc(PL_Size - radius + X, PL_Size - radius + Y, radius, 0, Math.PI * 1 / 2);\n\t\t\t\tctx_s.lineTo(radius + X, PL_Size + Y);\n\t\t\t\tctx_s.arc(radius + X, PL_Size - radius + Y, radius, Math.PI * 1 / 2, Math.PI);\n\t\t\t} else {\n\t\t\t\tctx_s.moveTo(X, Y);\n\t\t\t\tctx_s.lineTo(X + d, Y);\n\t\t\t\tctx_s.bezierCurveTo(X + d, Y - d, X + 2 * d, Y - d, X + 2 * d, Y);\n\t\t\t\tctx_s.lineTo(X + 3 * d, Y);\n\t\t\t\tctx_s.lineTo(X + 3 * d, Y + d);\n\t\t\t\tctx_s.bezierCurveTo(X + 2 * d, Y + d, X + 2 * d, Y + 2 * d, X + 3 * d, Y + 2 * d);\n\t\t\t\tctx_s.lineTo(X + 3 * d, Y + 3 * d);\n\t\t\t\tctx_s.lineTo(X, Y + 3 * d);\n\t\t\t}\n\t\t\tctx_s.closePath();\n\t\t\tctx_s.stroke();\n\t\t\tctx_s.shadowBlur = 20;\n\t\t\tctx_s.shadowColor = \"black\";\n\t\t\tctx_s.fill();\n\t\t},\n\t\t/* 通过重置画布尺寸清空画布,这种方式更彻底 */\n\t\tclearCanvas() {\n\t\t\tlet c = this.$refs.puzzleBox;\n\t\t\tlet c_l = this.$refs.puzzleLost;\n\t\t\tlet c_s = this.$refs.puzzleShadow;\n\t\t\tc.setAttribute(\"height\", c.getAttribute(\"height\"));\n\t\t\tc_l.setAttribute(\"height\", c.getAttribute(\"height\"));\n\t\t\tc_s.setAttribute(\"height\", c.getAttribute(\"height\"));\n\t\t},\n\t\t/* 按住滑块后初始化移动监听,记录初始位置 */\n\t\tstartMove(e) {\n\t\t\t// console.log(e);\n\t\t\te = e || window.event;\n\t\t\tthis.$refs.sliderBtn.style.backgroundPosition = \"0 -216px\";\n\t\t\tthis.moveStart = e.pageX || e.targetTouches[0].pageX;\n\t\t\tthis.addMouseMoveListener();\n\t\t},\n\t\t/* 滑块移动 */\n\t\tmoving(e) {\n\t\t\tlet self = this;\n\t\t\te = e || window.event;\n\t\t\tlet moveX = e.pageX || e.targetTouches[0].pageX;\n\t\t\tlet d = moveX - self.moveStart;\n\t\t\tlet w = self.dataWidth;\n\t\t\tlet PL_Size = this.puzzleSize;\n\t\t\tlet padding = this.padding;\n\t\t\tif (self.moveStart === \"\") {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\tif (d < 0 || d > w - padding - PL_Size) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\tself.$refs.sliderBtn.style.left = d + \"px\";\n\t\t\tself.$refs.sliderBtn.style.transition = \"inherit\";\n\t\t\tself.$refs.puzzleLost.style.left = d + \"px\";\n\t\t\tself.$refs.puzzleLost.style.transition = \"inherit\";\n\t\t\tself.$refs.puzzleShadow.style.left = d + \"px\";\n\t\t\tself.$refs.puzzleShadow.style.transition = \"inherit\";\n\t\t},\n\t\t/* 移动结束,验证并回调 */\n\t\tmoveEnd(e) {\n\t\t\tlet self = this;\n\t\t\te = e || window.event;\n\t\t\tlet moveEnd_X = (e.pageX || e.changedTouches[0].pageX) - self.moveStart;\n\t\t\tlet ver_Num = self.randomX - 10;\n\t\t\tlet deviationValue = this.deviationValue;\n\t\t\tlet Min_left = ver_Num - deviationValue;\n\t\t\tlet Max_left = ver_Num + deviationValue;\n\t\t\tif (self.moveStart !== \"\") {\n\t\t\t\tif (Max_left > moveEnd_X && moveEnd_X > Min_left) {\n\t\t\t\t\tself.displayTips = true;\n\t\t\t\t\tself.verification = true;\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tself.displayTips = false;\n\t\t\t\t\t\tself.initCanvas();\n\t\t\t\t\t\t/* 成功的回调函数 */\n\t\t\t\t\t\tself.onSuccess();\n\t\t\t\t\t}, 500);\n\t\t\t\t} else {\n\t\t\t\t\tself.displayTips = true;\n\t\t\t\t\tself.verification = false;\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tself.displayTips = false;\n\t\t\t\t\t\tself.initCanvas();\n\t\t\t\t\t\t/* 失败的回调函数 */\n\t\t\t\t\t\tself.onError();\n\t\t\t\t\t}, 800);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof self.$refs.sliderBtn !== \"undefined\" && typeof self.$refs.puzzleLost !== \"undefined\" && typeof self.$refs.puzzleShadow !== \"undefined\") {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tself.$refs.sliderBtn.style.left = 0;\n\t\t\t\t\tself.$refs.sliderBtn.style.transition = \"left 0.5s\";\n\t\t\t\t\tself.$refs.puzzleLost.style.left = 0;\n\t\t\t\t\tself.$refs.puzzleLost.style.transition = \"left 0.5s\";\n\t\t\t\t\tself.$refs.puzzleShadow.style.left = 0;\n\t\t\t\t\tself.$refs.puzzleShadow.style.transition = \"left 0.5s\";\n\t\t\t\t}, 400);\n\t\t\t\tself.$refs.sliderBtn.style.backgroundPosition = \"0 -84px\";\n\t\t\t}\n\t\t\tself.moveStart = \"\";\n\t\t},\n\t\t/* 全局绑定滑块移动与滑动结束,移动过程中鼠标可在页面任何位置 */\n\t\taddMouseMoveListener() {\n\t\t\tlet self = this;\n\t\t\tdocument.addEventListener(\"mousemove\", self.moving);\n\t\t\tdocument.addEventListener(\"touchmove\", self.moving);\n\t\t\tdocument.addEventListener(\"mouseup\", self.moveEnd);\n\t\t\tdocument.addEventListener(\"touchend\", self.moveEnd);\n\t\t}\n\t}\n});\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__puzzleVerification_vue__ = __webpack_require__(4);\n\n\n__WEBPACK_IMPORTED_MODULE_0__puzzleVerification_vue__[\"a\" /* default */].install = function (Vue) {\n Vue.component(__WEBPACK_IMPORTED_MODULE_0__puzzleVerification_vue__[\"a\" /* default */].name, __WEBPACK_IMPORTED_MODULE_0__puzzleVerification_vue__[\"a\" /* default */]);\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__WEBPACK_IMPORTED_MODULE_0__puzzleVerification_vue__[\"a\" /* default */]);\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_puzzleVerification_vue__ = __webpack_require__(2);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6d4bc492_hasScoped_true_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_puzzleVerification_vue__ = __webpack_require__(15);\nvar disposed = false\nfunction injectStyle (ssrContext) {\n if (disposed) return\n __webpack_require__(5)\n}\nvar normalizeComponent = __webpack_require__(14)\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-6d4bc492\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_puzzleVerification_vue__[\"a\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6d4bc492_hasScoped_true_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_puzzleVerification_vue__[\"a\" /* default */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/puzzleVerification.vue\"\n\n/* hot reload */\nif (false) {}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Component.exports);\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a \"],\"sourceRoot\":\"\"}]);\n\n// exports\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nmodule.exports = function escape(url) {\n if (typeof url !== 'string') {\n return url\n }\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]/.test(url)) {\n return '\"' + url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n') + '\"'\n }\n\n return url\n}\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"data:application/font-woff;base64,d09GRgABAAAAAAS4AAsAAAAAByQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8f2HxY21hcAAAAYAAAABUAAABfOdQubZnbHlmAAAB1AAAAO0AAAEUAEgM5mhlYWQAAALEAAAALwAAADYWAG1caGhlYQAAAvQAAAAcAAAAJAfeA4RobXR4AAADEAAAAAwAAAAMDAAAAGxvY2EAAAMcAAAACAAAAAgAWACKbWF4cAAAAyQAAAAfAAAAIAERAEJuYW1lAAADRAAAAUUAAAJtPlT+fXBvc3QAAASMAAAAKQAAADrLcp3HeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByecf7/z9zwv4EhhrmBoQEozAiSAwDyww0EeJxjYGBgZWBgYAZiHSBmYWBgDGFgZAABP6AoI1icmYELLM7CoARWwwISf8b5/z+MBPKBOhmYgAw2hlHAAyY1oDwmUChBMJDNz/gRjIFBBQDCtgufeJxjYGFg+P+AeQGzAgMjAy+DJIMpA4OqobkeozofI7sco7gdIyuQbcdoDmTzMZqrm5uZqCnxM6qrKbGJyDOys4mIGdkziosZmZkwZ5qzvt6w4TUrmPyXOv0kC8vJ6WBSuKGBU0icq6GeU0KIsx7IluAEikgI9XyBKQeSW2CqgeS9RojSepDS+joQu64RyGZgALqS4f995n5mOQZpIIcP5Cp2iAvFzdXZYY4GeoA5SoSRkfVQQ/0hVtZD9YwXLjCufMjK+nDlqoesjLKM7YzSouU7WVl3llfsYA1qTgpiuTx//mUWICkqDQCl3EkHAAAAeJxjYGRgYABizx9hOfH8Nl8ZuFkYQOBmwZQNCPr/fRYGZgUgl4OBCSQKADl3Ct0AeJxjYGRgYG7438AQw8IAAkCSkQEVMAMARwkCbAQAAAAEAAAABAAAAAAAAAAAWACKeJxjYGRgYGBmMGNgYQABJiDmAkIGhv9gPgMADj0BVAB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxjYGKAAC4G7ICZkYmRmZGFgS29NDEvKZO9OKM0sSIzj4EBADfcBZ8AAAA=\"\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"data:application/x-font-ttf;base64,AAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzI8f2HxAAABfAAAAFZjbWFw51C5tgAAAeAAAAF8Z2x5ZgBIDOYAAANkAAABFGhlYWQWAG1cAAAA4AAAADZoaGVhB94DhAAAALwAAAAkaG10eAwAAAAAAAHUAAAADGxvY2EAWACKAAADXAAAAAhtYXhwAREAQgAAARgAAAAgbmFtZT5U/n0AAAR4AAACbXBvc3TLcp3HAAAG6AAAADoAAQAAA4D/gABcBAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAMAAQAAAAEAAEn4VmxfDzz1AAsEAAAAAADZcJSwAAAAANlwlLAAAP/fBAADIAAAAAgAAgAAAAAAAAABAAAAAwA2AAQAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQQAAZAABQAIAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA5gn//wOA/4AAXAOAAIAAAAABAAAAAAAABAAAAAQAAAAEAAAAAAAABQAAAAMAAAAsAAAABAAAAVQAAQAAAAAATgADAAEAAAAsAAMACgAAAVQABAAiAAAABAAEAAEAAOYJ//8AAOYJ//8AAAABAAQAAAACAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAoAAAAAAAAAAIAAOYJAADmCQAAAAIADwHxAA8B8QAAAAEAAAAAAFgAigAEAAD/4AOgAyAAAQANABkANQAAJTE3LgEnDgEHHgEXPgEFLgEnPgE3HgEXDgE3Jzc2NCYiDwEnJiIGFB8BBwYUFjI/ARcWMjY0A2k3BeuwsOsFBeuwsOv+ZZfJBATJl5fJBATJE4CACRIXCoB/CRgSCX+ACRIYCYCACRgSjPSw6wUF67Cw6wUF67QEyZeXyQQEyZeXyd6BfwkYEgl/fwkSGAl/fgkYEgl+gQkSGAAAAAEAAP/fA48DHgAbAAABDgEXDgEHLgEnPgE3FzcnBw4BBx4BFz4BNy4BA1oUAQEFwoB/wgUFwn8B0NABqeEFBeGpquEFAR0BhwEbFXe5BQW5d3i4BVKDYlIE05+f0wQE058VGwAAABIA3gABAAAAAAAAABUAAAABAAAAAAABAAgAFQABAAAAAAACAAcAHQABAAAAAAADAAgAJAABAAAAAAAEAAgALAABAAAAAAAFAAsANAABAAAAAAAGAAgAPwABAAAAAAAKACsARwABAAAAAAALABMAcgADAAEECQAAACoAhQADAAEECQABABAArwADAAEECQACAA4AvwADAAEECQADABAAzQADAAEECQAEABAA3QADAAEECQAFABYA7QADAAEECQAGABABAwADAAEECQAKAFYBEwADAAEECQALACYBaQpDcmVhdGVkIGJ5IGljb25mb250Cmljb25mb250UmVndWxhcmljb25mb250aWNvbmZvbnRWZXJzaW9uIDEuMGljb25mb250R2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20ACgBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AAoAaQBjAG8AbgBmAG8AbgB0AFIAZQBnAHUAbABhAHIAaQBjAG8AbgBmAG8AbgB0AGkAYwBvAG4AZgBvAG4AdABWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbgBmAG8AbgB0AEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBAgEDAQQABmd1YW5iaQdzaHVheGluAAAAAA==\"\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPCEtLQoyMDEzLTktMzA6IENyZWF0ZWQuCi0tPgo8c3ZnPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgaWNvbmZvbnQKPC9tZXRhZGF0YT4KPGRlZnM+Cgo8Zm9udCBpZD0iaWNvbmZvbnQiIGhvcml6LWFkdi14PSIxMDI0IiA+CiAgPGZvbnQtZmFjZQogICAgZm9udC1mYW1pbHk9Imljb25mb250IgogICAgZm9udC13ZWlnaHQ9IjUwMCIKICAgIGZvbnQtc3RyZXRjaD0ibm9ybWFsIgogICAgdW5pdHMtcGVyLWVtPSIxMDI0IgogICAgYXNjZW50PSI4OTYiCiAgICBkZXNjZW50PSItMTI4IgogIC8+CiAgICA8bWlzc2luZy1nbHlwaCAvPgogICAgCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ3VhbmJpIiB1bmljb2RlPSImIzk4MzUzNzsiIGQ9Ik04NzIuODAyOTI4IDE0MC4wMDU5NCA4NzIuODY0MzI2IDE0MC4wMDU5NCA4NzIuODY0MzI2IDE0MC4zNzUzNTRaTTkyNy44NDY1NjggMzg0LjAwMjA0N2MwIDIyOS4zMTU3NTYtMTg2LjU2NzEzOSA0MTUuODM5OTE3LTQxNS44Mzg4OTMgNDE1LjgzOTkxNy0yMjkuMzI5MDU5IDAtNDE1Ljg1MzIyLTE4Ni41MjQxNjEtNDE1Ljg1MzIyLTQxNS44Mzk5MTcgMC0yMjkuMzAwNDA2IDE4Ni41MjQxNjEtNDE1Ljg0MDk0IDQxNS44NTMyMi00MTUuODQwOTRDNzQxLjI3ODQwNS0zMS44Mzg4OTMgOTI3Ljg0NjU2OCAxNTQuNzAxNjQgOTI3Ljg0NjU2OCAzODQuMDAyMDQ3TTUxMi4wMDc2NzUgMjcuODI4MDQ1Yy0xOTYuMzc1NTI5IDAtMzU2LjE3Mjk3OSAxNTkuODI3MTI1LTM1Ni4xNzI5NzkgMzU2LjE3NDAwMiAwIDE5Ni4zNzQ1MDYgMTU5Ljc5NzQ0OSAzNTYuMTU3NjI5IDM1Ni4xNzI5NzkgMzU2LjE1NzYyOSAxOTYuMzQ0ODMgMCAzNTYuMTQ0MzI2LTE1OS43ODMxMjMgMzU2LjE0NDMyNi0zNTYuMTU3NjI5Qzg2OC4xNTIwMDEgMTg3LjY1NTE3IDcwOC4zNTI1MDUgMjcuODI4MDQ1IDUxMi4wMDc2NzUgMjcuODI4MDQ1TTY4Mi4zNzg5NDcgMjUzLjc3MjAwNyA1NTMuNzk3NDUzIDM4Mi43MzUxOTQgNjgyLjI2MTI2NyA1MDkuNzcwNDcyYzExLjY2MTU5NyAxMS41MTQyNDEgMTEuNzQ5NjAyIDMwLjMzMjg0MiAwLjIzNDMzNyA0MS45OTU0NjMtMTEuNTE0MjQxIDExLjY3Njk0Ny0zMC4zNjI1MTggMTEuNzY1OTc1LTQyLjAyNjE2MiAwLjIyMjA1N0w1MTEuODg4OTcxIDQyNC44MDQzMzUgMzg1LjIyMzEwNyA1NTEuODY5Mjg5Yy0xMS42MDIyNDYgMTEuNjAzMjY5LTMwLjM5MzIxNyAxMS42NjE1OTctNDIuMDI1MTM5IDAuMDU5MzUyLTExLjYwMzI2OS0xMS42MTg2MTktMTEuNjAzMjY5LTMwLjQwNzU0NC0wLjA1OTM1Mi00Mi4wMTE4MzZsMTI2LjUxODUwOC0xMjYuODg3OTIyTDM0Mi4xMzc4MjMgMjU2Ljg5NTEzN2MtMTEuNjYyNjIxLTExLjU0MzkxNy0xMS43ODAzMDEtMzAuMzA1MjEzLTAuMjM1MzYtNDEuOTY5ODggNS44MzA3OTktNS44OTAxNSAxMy40Mjk4NzEtOC44MzMxNzkgMjEuMDg2MjQ4LTguODMzMTc5IDcuNTM5NzIgMCAxNS4xMzY3NDUgMi44ODQ3IDIwLjkxMDIzOSA4LjU2OTE2NmwxMjcuNjk1MzExIDEyNi4zMTE4MDFMNjQwLjI5MzQzMyAyMTEuODA0MTczYzUuODAyMTQ2LTUuODAwMSAxMy40Mjg4NDctOC43MTc1NDYgMjEuMDU2NTcyLTguNzE3NTQ2IDcuNTk5MDcyIDAgMTUuMTY1Mzk4IDIuOTE3NDQ2IDIwLjk2ODU2NyA4LjY1OTIxN0M2OTMuOTIyODY0IDIyMy4zMTg0MTQgNjkzLjk1MDQ5NCAyNDIuMTEwNDA5IDY4Mi4zNzg5NDcgMjUzLjc3MjAwNyIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgoKICAgIAogICAgPGdseXBoIGdseXBoLW5hbWU9InNodWF4aW4iIHVuaWNvZGU9IiYjNTg4ODk7IiBkPSJNODU4LjQgMzkwLjljLTI4LjcgMC0yMC4xLTIxLjktMjAuMS00OC44IDAtMTUyLjYtMTY0LjMtMzA4LjYtMzI2LjktMzA4LjYtMTYyLjcgMC0zMjYuOSAxNTYuMS0zMjYuOSAzMDguNiAwIDE1Mi42IDE2NC4zIDMwOC42IDMyNi45IDMwOC42aDAuMXYtODEuNGwyMDguMiAxMzAuMi0yMDguMiA5OC4zdi04MS40aC0wLjFjLTIyMC4xIDAtMzk5LjEtMTY3LjktMzk5LjEtMzc0LjMgMC0yMDYuNSAxNzkuMS0zNzQuNCAzOTkuMS0zNzQuNCAyMjAuMSAwIDM5OS4xIDE2Ny45IDM5OS4xIDM3NC40IDAgMjYuOS0yMy4zIDQ4LjgtNTIuMSA0OC44eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgoKICAgIAoKCiAgPC9mb250Pgo8L2RlZnM+PC9zdmc+Cg==\"\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\nvar listToStyles = __webpack_require__(13)\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of '];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(SSF._table[xf.numFmtId])}));\n\t\tstyles.push(writextag('Style', payload.join(\"\"), {\"ss:ID\": \"s\" + (21+id)}));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb) {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\nvar names = wb.Workbook.Names;\n\tvar out = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws, opts, idx, wb) {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\nvar names = wb.Workbook.Names;\n\tvar out = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws, opts, idx, wb) {\n\tif(!ws) return \"\";\n\tvar o = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments) {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr){\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': return \"\";\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || SSF._table[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = '' + _v + '';\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R, row) {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws, opts, idx, wb) {\n\tif(!ws['!ref']) return \"\";\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar marr = ws['!merges'] || [], mi = 0;\n\tvar o = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = Array.isArray(ws);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_cell(addr), cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"
\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx, opts, wb) {\n\tvar o = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts) {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = SSF.get_table();\n\tif(wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj) {\n\tvar v = {};\n\tvar o = obj.content;\n/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue\n\t- 2.4.59 ContinueBigName\n\t- 2.4.60 ContinueFrt\n\t- 2.4.61 ContinueFrt11\n\t- 2.4.62 ContinueFrt12\n*/\nfunction slurp(R, blob, length, opts) {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu) switch(R.n) {\n\tcase 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break;\n\tdefault:\n\t\tif(d.length === 0) break;\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);\n\tvar start = 0;\n\twhile(next != null && next.n.slice(0,8) === 'Continue') {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(next.n == 'ContinueFrt') start += 4;\n\t\telse if(next.n.slice(0,11) == 'ContinueFrt') start += 12;\n\t\tbufs.push(blob.slice(start,blob.l+4+l));\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs));\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p, opts, date1904) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF._general(p.v);\n\t\t}\n\t\telse p.w = SSF.format(fmtid,p.v, {date1904:!!date1904});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t) {\n\treturn ({v:val, ixfe:ixfe, t:t});\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options) {\n\tvar wb = ({opts:{}});\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out = ((options.dense ? [] : {}));\n\tvar Directory = {};\n\tvar range = ({});\n\tvar last_formula = null;\n\tvar sst = ([]);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf = [];\n\tvar temp_val;\n\tvar country;\n\tvar cell_valid = true;\n\tvar XFs = []; /* XF records */\n\tvar palette = [];\n\tvar Workbook = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }), wsprops = {};\n\tvar get_rgb = function getrgb(icv) {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({});\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell, line, options) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) cell_valid = false;\n\t\tif(!cell_valid) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[cell.r]) out[cell.r] = [];\n\t\t\t\tout[cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t});\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges = [];\n\tvar objects = [];\n\tvar colinfo = [], rowinfo = [];\n\t// eslint-disable-next-line no-unused-vars\n\tvar defwidth = 0, defheight = 0; // twips / MDW respectively\n\tvar seencol = false;\n\tvar supbooks = ([]); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_Rn = '';\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_Rn === 'EOF') break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;\n\t\t\t}\n\t\t\tlast_Rn = R.n;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val;\n\t\t\tif(R.n === 'EOF') val = R.f(blob, length, opts);\n\t\t\telse val = slurp(R, blob, length, opts);\n\t\t\tvar Rn = R.n;\n\t\t\tif(file_depth == 0 && Rn != 'BOF') continue;\n\t\t\t/* nested switch statements to workaround V8 128 limit */\n\t\t\tswitch(Rn) {\n\t\t\t\t/* Workbook Options */\n\t\t\t\tcase 'Date1904':\nwb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 'WriteProtect': wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 'FilePass':\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'WriteAccess': opts.lastuser = val; break;\n\t\t\t\tcase 'FileSharing': break; //TODO\n\t\t\t\tcase 'CodePage':\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(val) {\n\t\t\t\t\t\tcase 0x5212: val = 1200; break;\n\t\t\t\t\t\tcase 0x8000: val = 10000; break;\n\t\t\t\t\t\tcase 0x8001: val = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = val);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'RRTabId': opts.rrtabid = val; break;\n\t\t\t\tcase 'WinProtect': opts.winlocked = val; break;\n\t\t\t\tcase 'Template': break; // TODO\n\t\t\t\tcase 'BookBool': break; // TODO\n\t\t\t\tcase 'UsesELFs': break;\n\t\t\t\tcase 'MTRSettings': break;\n\t\t\t\tcase 'RefreshAll':\n\t\t\t\tcase 'CalcCount':\n\t\t\t\tcase 'CalcDelta':\n\t\t\t\tcase 'CalcIter':\n\t\t\t\tcase 'CalcMode':\n\t\t\t\tcase 'CalcPrecision':\n\t\t\t\tcase 'CalcSaveRecalc':\n\t\t\t\t\twb.opts[Rn] = val; break;\n\t\t\t\tcase 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 'Uncalced': break;\n\t\t\t\tcase 'ForceFullCalculation': wb.opts.FullCalc = val; break;\n\t\t\t\tcase 'WsBool':\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 'XF': XFs.push(val); break;\n\t\t\t\tcase 'ExtSST': break; // TODO\n\t\t\t\tcase 'BookExt': break; // TODO\n\t\t\t\tcase 'RichTextStream': break;\n\t\t\t\tcase 'BkHim': break;\n\n\t\t\t\tcase 'SupBook':\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternName':\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Index': break; // TODO\n\t\t\t\tcase 'Lbl':\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t});\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternCount': opts.ExternCount = val; break;\n\t\t\t\tcase 'ExternSheet':\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 'NameCmt':\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Protect': out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 'Password': if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/\n\n\t\t\t\tcase 'BoundSheet8': {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 'EOF': {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ((options.dense ? [] : {}));\n\t\t\t\t} break;\n\t\t\t\tcase 'BOF': {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n0x0009:2,\n0x0209:3,\n0x0409:4\n\t\t\t\t\t}[RecordType] || {\n0x0200:2,\n0x0300:3,\n0x0400:4,\n0x0500:5,\n0x0600:8,\n0x0002:2,\n0x0007:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tcell_valid = true;\n\t\t\t\t\tout = ((options.dense ? [] : {}));\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\t\t\t\t\tif(opts.biff < 5) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tdefwidth = defheight = 0;\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\n\t\t\t\tcase 'Number': case 'BIFF2NUM': case 'BIFF2INT': {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'BoolErr': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'RK': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulRk': {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'});\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Formula': {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'String': {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 'Array': {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'ShrFmla': {\n\t\t\t\t\tif(!cell_valid) break;\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'LabelSst':\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Blank': if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulBlank': if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'});\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'RString':\n\t\t\t\tcase 'Label': case 'BIFF2STR':\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Dimensions': {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 'SST': {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'Format': { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(SSF._table[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF.load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF.load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 'BIFF2FORMAT': {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(SSF._table[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF.load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 'MergeCells': merges = merges.concat(val); break;\n\n\t\t\t\tcase 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 'TxO': opts.lastobj.TxO = val; break;\n\t\t\t\tcase 'ImData': opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 'HLink': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'HLinkTooltip': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\t/* Comments */\n\t\t\t\tcase 'Note': {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) break;\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\tcase 'ClrtClient': break;\n\t\t\t\tcase 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;\n\n\t\t\t\tcase 'DefColWidth': defwidth = val; break;\n\t\t\t\tcase 'DefaultRowHeight': defheight = val[1]; break; // TODO: flags\n\n\t\t\t\tcase 'ColInfo': {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256 };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Row': {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tcase 'LeftMargin':\n\t\t\t\tcase 'RightMargin':\n\t\t\t\tcase 'TopMargin':\n\t\t\t\tcase 'BottomMargin':\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][Rn.slice(0,-6).toLowerCase()] = val;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Setup': // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Window2': // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Header': break; // TODO\n\t\t\t\tcase 'Footer': break; // TODO\n\t\t\t\tcase 'HCenter': break; // TODO\n\t\t\t\tcase 'VCenter': break; // TODO\n\t\t\t\tcase 'Pls': break; // TODO\n\t\t\t\tcase 'GCW': break;\n\t\t\t\tcase 'LHRecord': break;\n\t\t\t\tcase 'DBCell': break; // TODO\n\t\t\t\tcase 'EntExU2': break; // TODO\n\t\t\t\tcase 'SxView': break; // TODO\n\t\t\t\tcase 'Sxvd': break; // TODO\n\t\t\t\tcase 'SXVI': break; // TODO\n\t\t\t\tcase 'SXVDEx': break; // TODO\n\t\t\t\tcase 'SxIvd': break; // TODO\n\t\t\t\tcase 'SXString': break; // TODO\n\t\t\t\tcase 'Sync': break;\n\t\t\t\tcase 'Addin': break;\n\t\t\t\tcase 'SXDI': break; // TODO\n\t\t\t\tcase 'SXLI': break; // TODO\n\t\t\t\tcase 'SXEx': break; // TODO\n\t\t\t\tcase 'QsiSXTag': break; // TODO\n\t\t\t\tcase 'Selection': break;\n\t\t\t\tcase 'Feat': break;\n\t\t\t\tcase 'FeatHdr': case 'FeatHdr11': break;\n\t\t\t\tcase 'Feature11': case 'Feature12': case 'List12': break;\n\t\t\t\tcase 'Country': country = val; break;\n\t\t\t\tcase 'RecalcId': break;\n\t\t\t\tcase 'DxGCol': break; // TODO: htmlify\n\t\t\t\tcase 'Fbi': case 'Fbi2': case 'GelFrame': break;\n\t\t\t\tcase 'Font': break; // TODO\n\t\t\t\tcase 'XFCRC': break; // TODO\n\t\t\t\tcase 'Style': break; // TODO\n\t\t\t\tcase 'StyleExt': break; // TODO\n\t\t\t\tcase 'Palette': palette = val; break;\n\t\t\t\tcase 'Theme': themes = val; break;\n\t\t\t\t/* Protection */\n\t\t\t\tcase 'ScenarioProtect': break;\n\t\t\t\tcase 'ObjProtect': break;\n\n\t\t\t\t/* Conditional Formatting */\n\t\t\t\tcase 'CondFmt12': break;\n\n\t\t\t\t/* Table */\n\t\t\t\tcase 'Table': break; // TODO\n\t\t\t\tcase 'TableStyles': break; // TODO\n\t\t\t\tcase 'TableStyle': break; // TODO\n\t\t\t\tcase 'TableStyleElement': break; // TODO\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'SXStreamID': break; // TODO\n\t\t\t\tcase 'SXVS': break; // TODO\n\t\t\t\tcase 'DConRef': break; // TODO\n\t\t\t\tcase 'SXAddl': break; // TODO\n\t\t\t\tcase 'DConBin': break; // TODO\n\t\t\t\tcase 'DConName': break; // TODO\n\t\t\t\tcase 'SXPI': break; // TODO\n\t\t\t\tcase 'SxFormat': break; // TODO\n\t\t\t\tcase 'SxSelect': break; // TODO\n\t\t\t\tcase 'SxRule': break; // TODO\n\t\t\t\tcase 'SxFilt': break; // TODO\n\t\t\t\tcase 'SxItm': break; // TODO\n\t\t\t\tcase 'SxDXF': break; // TODO\n\n\t\t\t\t/* Scenario Manager */\n\t\t\t\tcase 'ScenMan': break;\n\n\t\t\t\t/* Data Consolidation */\n\t\t\t\tcase 'DCon': break;\n\n\t\t\t\t/* Watched Cell */\n\t\t\t\tcase 'CellWatch': break;\n\n\t\t\t\t/* Print Settings */\n\t\t\t\tcase 'PrintRowCol': break;\n\t\t\t\tcase 'PrintGrid': break;\n\t\t\t\tcase 'PrintSize': break;\n\n\t\t\t\tcase 'XCT': break;\n\t\t\t\tcase 'CRN': break;\n\n\t\t\t\tcase 'Scl': {\n\t\t\t\t\t//console.log(\"Zoom Level:\", val[0]/val[1],val);\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExt': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExtOptional': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\t/* VBA */\n\t\t\t\tcase 'ObNoMacros': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'ObProj': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'CodeName': {\nif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t\tcase 'GUIDTypeLib': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\tcase 'WOpt': break; // TODO: WTF?\n\t\t\t\tcase 'PhoneticInfo': break;\n\n\t\t\t\tcase 'OleObjectSize': break;\n\n\t\t\t\t/* Differential Formatting */\n\t\t\t\tcase 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;\n\n\t\t\t\t/* Data Validation */\n\t\t\t\tcase 'Dv': case 'DVal': break;\n\n\t\t\t\t/* Data Series */\n\t\t\t\tcase 'BRAI': case 'Series': case 'SeriesText': break;\n\n\t\t\t\t/* Data Connection */\n\t\t\t\tcase 'DConn': break;\n\t\t\t\tcase 'DbOrParamQry': break;\n\t\t\t\tcase 'DBQueryExt': break;\n\n\t\t\t\tcase 'OleDbConn': break;\n\t\t\t\tcase 'ExtString': break;\n\n\t\t\t\t/* Formatting */\n\t\t\t\tcase 'IFmtRecord': break;\n\t\t\t\tcase 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;\n\n\t\t\t\t/* Explicitly Ignored */\n\t\t\t\tcase 'Excel9File': break;\n\t\t\t\tcase 'Units': break;\n\t\t\t\tcase 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': break;\n\t\t\t\tcase 'BuiltInFnGroupCount': /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */ break;\n\t\t\t\t/* View Stuff */\n\t\t\t\tcase 'Window1': case 'HideObj': case 'GridSet': case 'Guts':\n\t\t\t\tcase 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd':\n\t\t\t\tcase 'Pane': break;\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* Chart */\n\t\t\t\tcase 'Dat':\n\t\t\t\tcase 'Begin': case 'End':\n\t\t\t\tcase 'StartBlock': case 'EndBlock':\n\t\t\t\tcase 'Frame': case 'Area':\n\t\t\t\tcase 'Axis': case 'AxisLine': case 'Tick': break;\n\t\t\t\tcase 'AxesUsed':\n\t\t\t\tcase 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;\n\t\t\t\tcase 'LineFormat': case 'AreaFormat':\n\t\t\t\tcase 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;\n\t\t\t\tcase 'PlotArea': case 'PlotGrowth': break;\n\t\t\t\tcase 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;\n\t\t\t\tcase 'DataFormat': case 'SerToCrt': case 'FontX': break;\n\t\t\t\tcase 'CatSerRange': case 'AxcExt': case 'SerFmt': break;\n\t\t\t\tcase 'ShtProps': break;\n\t\t\t\tcase 'DefaultText': case 'Text': case 'CatLab': break;\n\t\t\t\tcase 'DataLabExtContents': break;\n\t\t\t\tcase 'Legend': case 'LegendException': break;\n\t\t\t\tcase 'Pie': case 'Scatter': break;\n\t\t\t\tcase 'PieFormat': case 'MarkerFormat': break;\n\t\t\t\tcase 'StartObject': case 'EndObject': break;\n\t\t\t\tcase 'AlRuns': case 'ObjectLink': break;\n\t\t\t\tcase 'SIIndex': break;\n\t\t\t\tcase 'AttachedLabel': case 'YMult': break;\n\n\t\t\t\t/* Chart Group */\n\t\t\t\tcase 'Line': case 'Bar': break;\n\t\t\t\tcase 'Surf': break;\n\n\t\t\t\t/* Axis Group */\n\t\t\t\tcase 'AxisParent': break;\n\t\t\t\tcase 'Pos': break;\n\t\t\t\tcase 'ValueRange': break;\n\n\t\t\t\t/* Pivot Chart */\n\t\t\t\tcase 'SXViewEx9': break; // TODO\n\t\t\t\tcase 'SXViewLink': break;\n\t\t\t\tcase 'PivotChartBits': break;\n\t\t\t\tcase 'SBaseRef': break;\n\t\t\t\tcase 'TextPropsStream': break;\n\n\t\t\t\t/* Chart Misc */\n\t\t\t\tcase 'LnExt': break;\n\t\t\t\tcase 'MkrExt': break;\n\t\t\t\tcase 'CrtCoopt': break;\n\n\t\t\t\t/* Query Table */\n\t\t\t\tcase 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;\n\t\t\t\tcase 'TxtQry': break;\n\n\t\t\t\t/* Filter */\n\t\t\t\tcase 'FilterMode': break;\n\t\t\t\tcase 'AutoFilter': case 'AutoFilterInfo': break;\n\t\t\t\tcase 'AutoFilter12': break;\n\t\t\t\tcase 'DropDownObjIds': break;\n\t\t\t\tcase 'Sort': break;\n\t\t\t\tcase 'SortData': break;\n\n\t\t\t\t/* Drawing */\n\t\t\t\tcase 'ShapePropsStream': break;\n\t\t\t\tcase 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;\n\t\t\t\t/* Pub Stuff */\n\t\t\t\tcase 'WebPub': case 'AutoWebPub': break;\n\n\t\t\t\t/* Print Stuff */\n\t\t\t\tcase 'HeaderFooter': case 'HFPicture': case 'PLV':\n\t\t\t\tcase 'HorizontalPageBreaks': case 'VerticalPageBreaks': break;\n\t\t\t\t/* Behavioral */\n\t\t\t\tcase 'Backup': case 'CompressPictures': case 'Compat12': break;\n\n\t\t\t\t/* Should not Happen */\n\t\t\t\tcase 'Continue': case 'ContinueFrt12': break;\n\n\t\t\t\t/* Future Records */\n\t\t\t\tcase 'FrtFontList': case 'FrtWrapper': break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* BIFF5 records */\n\t\t\t\tcase 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;\n\n\t\t\t\t/* BIFF2-4 records */\n\t\t\t\tcase 'BIFF2FONTCLR': case 'BIFF2FMTCNT': case 'BIFF2FONTXTRA': break;\n\t\t\t\tcase 'BIFF2XF': case 'BIFF3XF': case 'BIFF4XF': break;\n\t\t\t\tcase 'BIFF4FMTCNT': case 'BIFF2ROW': case 'BIFF2WINDOW2': break;\n\n\t\t\t\t/* Miscellaneous */\n\t\t\t\tcase 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':\n\t\t\t\tcase 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':\n\t\t\t\tcase 'Name': break;\n\t\t\t\tcase 'LHNGraph': case 'FnGroupName': case 'AddMenu': case 'LPr': break;\n\t\t\t\tcase 'ListObj': case 'ListField': break;\n\t\t\t\tcase 'RRSort': break;\n\t\t\t\tcase 'BigName': break;\n\t\t\t\tcase 'ToolbarHdr': case 'ToolbarEnd': break;\n\t\t\t\tcase 'DDEObjName': break;\n\t\t\t\tcase 'FRTArchId$': break;\n\t\t\t\tdefault: if(options.WTF) throw 'Unrecognized Record ' + R.n;\n\t\t\t}}}}\n\t\t} else blob.l += length;\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Preamble=Preamble;\n\twb.Strings = sst;\n\twb.SSF = SSF.get_table();\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb, cfb) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (DocSummaryRE.hasOwnProperty(Keys[i]) ? DSEntries : SummaryRE.hasOwnProperty(Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!(wb.Props||{}).hasOwnProperty(Keys[i])) (DocSummaryRE.hasOwnProperty(Keys[i]) ? DSEntries : SummaryRE.hasOwnProperty(Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb, options) {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj, WB;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64.decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb});\n}\nvar WorkbookP;\n\nvar _data;\nif(CompObj) parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({});\nelse {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(cfb, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb, opts) {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n0x0000: { n:\"BrtRowHdr\", f:parse_BrtRowHdr },\n0x0001: { n:\"BrtCellBlank\", f:parse_BrtCellBlank },\n0x0002: { n:\"BrtCellRk\", f:parse_BrtCellRk },\n0x0003: { n:\"BrtCellError\", f:parse_BrtCellError },\n0x0004: { n:\"BrtCellBool\", f:parse_BrtCellBool },\n0x0005: { n:\"BrtCellReal\", f:parse_BrtCellReal },\n0x0006: { n:\"BrtCellSt\", f:parse_BrtCellSt },\n0x0007: { n:\"BrtCellIsst\", f:parse_BrtCellIsst },\n0x0008: { n:\"BrtFmlaString\", f:parse_BrtFmlaString },\n0x0009: { n:\"BrtFmlaNum\", f:parse_BrtFmlaNum },\n0x000A: { n:\"BrtFmlaBool\", f:parse_BrtFmlaBool },\n0x000B: { n:\"BrtFmlaError\", f:parse_BrtFmlaError },\n0x0010: { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ },\n0x0013: { n:\"BrtSSTItem\", f:parse_RichStr },\n0x0014: { n:\"BrtPCDIMissing\" },\n0x0015: { n:\"BrtPCDINumber\" },\n0x0016: { n:\"BrtPCDIBoolean\" },\n0x0017: { n:\"BrtPCDIError\" },\n0x0018: { n:\"BrtPCDIString\" },\n0x0019: { n:\"BrtPCDIDatetime\" },\n0x001A: { n:\"BrtPCDIIndex\" },\n0x001B: { n:\"BrtPCDIAMissing\" },\n0x001C: { n:\"BrtPCDIANumber\" },\n0x001D: { n:\"BrtPCDIABoolean\" },\n0x001E: { n:\"BrtPCDIAError\" },\n0x001F: { n:\"BrtPCDIAString\" },\n0x0020: { n:\"BrtPCDIADatetime\" },\n0x0021: { n:\"BrtPCRRecord\" },\n0x0022: { n:\"BrtPCRRecordDt\" },\n0x0023: { n:\"BrtFRTBegin\" },\n0x0024: { n:\"BrtFRTEnd\" },\n0x0025: { n:\"BrtACBegin\" },\n0x0026: { n:\"BrtACEnd\" },\n0x0027: { n:\"BrtName\", f:parse_BrtName },\n0x0028: { n:\"BrtIndexRowBlock\" },\n0x002A: { n:\"BrtIndexBlock\" },\n0x002B: { n:\"BrtFont\", f:parse_BrtFont },\n0x002C: { n:\"BrtFmt\", f:parse_BrtFmt },\n0x002D: { n:\"BrtFill\", f:parse_BrtFill },\n0x002E: { n:\"BrtBorder\", f:parse_BrtBorder },\n0x002F: { n:\"BrtXF\", f:parse_BrtXF },\n0x0030: { n:\"BrtStyle\" },\n0x0031: { n:\"BrtCellMeta\" },\n0x0032: { n:\"BrtValueMeta\" },\n0x0033: { n:\"BrtMdb\" },\n0x0034: { n:\"BrtBeginFmd\" },\n0x0035: { n:\"BrtEndFmd\" },\n0x0036: { n:\"BrtBeginMdx\" },\n0x0037: { n:\"BrtEndMdx\" },\n0x0038: { n:\"BrtBeginMdxTuple\" },\n0x0039: { n:\"BrtEndMdxTuple\" },\n0x003A: { n:\"BrtMdxMbrIstr\" },\n0x003B: { n:\"BrtStr\" },\n0x003C: { n:\"BrtColInfo\", f:parse_ColInfo },\n0x003E: { n:\"BrtCellRString\" },\n0x003F: { n:\"BrtCalcChainItem$\", f:parse_BrtCalcChainItem$ },\n0x0040: { n:\"BrtDVal\" },\n0x0041: { n:\"BrtSxvcellNum\" },\n0x0042: { n:\"BrtSxvcellStr\" },\n0x0043: { n:\"BrtSxvcellBool\" },\n0x0044: { n:\"BrtSxvcellErr\" },\n0x0045: { n:\"BrtSxvcellDate\" },\n0x0046: { n:\"BrtSxvcellNil\" },\n0x0080: { n:\"BrtFileVersion\" },\n0x0081: { n:\"BrtBeginSheet\" },\n0x0082: { n:\"BrtEndSheet\" },\n0x0083: { n:\"BrtBeginBook\", f:parsenoop, p:0 },\n0x0084: { n:\"BrtEndBook\" },\n0x0085: { n:\"BrtBeginWsViews\" },\n0x0086: { n:\"BrtEndWsViews\" },\n0x0087: { n:\"BrtBeginBookViews\" },\n0x0088: { n:\"BrtEndBookViews\" },\n0x0089: { n:\"BrtBeginWsView\", f:parse_BrtBeginWsView },\n0x008A: { n:\"BrtEndWsView\" },\n0x008B: { n:\"BrtBeginCsViews\" },\n0x008C: { n:\"BrtEndCsViews\" },\n0x008D: { n:\"BrtBeginCsView\" },\n0x008E: { n:\"BrtEndCsView\" },\n0x008F: { n:\"BrtBeginBundleShs\" },\n0x0090: { n:\"BrtEndBundleShs\" },\n0x0091: { n:\"BrtBeginSheetData\" },\n0x0092: { n:\"BrtEndSheetData\" },\n0x0093: { n:\"BrtWsProp\", f:parse_BrtWsProp },\n0x0094: { n:\"BrtWsDim\", f:parse_BrtWsDim, p:16 },\n0x0097: { n:\"BrtPane\" },\n0x0098: { n:\"BrtSel\" },\n0x0099: { n:\"BrtWbProp\", f:parse_BrtWbProp },\n0x009A: { n:\"BrtWbFactoid\" },\n0x009B: { n:\"BrtFileRecover\" },\n0x009C: { n:\"BrtBundleSh\", f:parse_BrtBundleSh },\n0x009D: { n:\"BrtCalcProp\" },\n0x009E: { n:\"BrtBookView\" },\n0x009F: { n:\"BrtBeginSst\", f:parse_BrtBeginSst },\n0x00A0: { n:\"BrtEndSst\" },\n0x00A1: { n:\"BrtBeginAFilter\", f:parse_UncheckedRfX },\n0x00A2: { n:\"BrtEndAFilter\" },\n0x00A3: { n:\"BrtBeginFilterColumn\" },\n0x00A4: { n:\"BrtEndFilterColumn\" },\n0x00A5: { n:\"BrtBeginFilters\" },\n0x00A6: { n:\"BrtEndFilters\" },\n0x00A7: { n:\"BrtFilter\" },\n0x00A8: { n:\"BrtColorFilter\" },\n0x00A9: { n:\"BrtIconFilter\" },\n0x00AA: { n:\"BrtTop10Filter\" },\n0x00AB: { n:\"BrtDynamicFilter\" },\n0x00AC: { n:\"BrtBeginCustomFilters\" },\n0x00AD: { n:\"BrtEndCustomFilters\" },\n0x00AE: { n:\"BrtCustomFilter\" },\n0x00AF: { n:\"BrtAFilterDateGroupItem\" },\n0x00B0: { n:\"BrtMergeCell\", f:parse_BrtMergeCell },\n0x00B1: { n:\"BrtBeginMergeCells\" },\n0x00B2: { n:\"BrtEndMergeCells\" },\n0x00B3: { n:\"BrtBeginPivotCacheDef\" },\n0x00B4: { n:\"BrtEndPivotCacheDef\" },\n0x00B5: { n:\"BrtBeginPCDFields\" },\n0x00B6: { n:\"BrtEndPCDFields\" },\n0x00B7: { n:\"BrtBeginPCDField\" },\n0x00B8: { n:\"BrtEndPCDField\" },\n0x00B9: { n:\"BrtBeginPCDSource\" },\n0x00BA: { n:\"BrtEndPCDSource\" },\n0x00BB: { n:\"BrtBeginPCDSRange\" },\n0x00BC: { n:\"BrtEndPCDSRange\" },\n0x00BD: { n:\"BrtBeginPCDFAtbl\" },\n0x00BE: { n:\"BrtEndPCDFAtbl\" },\n0x00BF: { n:\"BrtBeginPCDIRun\" },\n0x00C0: { n:\"BrtEndPCDIRun\" },\n0x00C1: { n:\"BrtBeginPivotCacheRecords\" },\n0x00C2: { n:\"BrtEndPivotCacheRecords\" },\n0x00C3: { n:\"BrtBeginPCDHierarchies\" },\n0x00C4: { n:\"BrtEndPCDHierarchies\" },\n0x00C5: { n:\"BrtBeginPCDHierarchy\" },\n0x00C6: { n:\"BrtEndPCDHierarchy\" },\n0x00C7: { n:\"BrtBeginPCDHFieldsUsage\" },\n0x00C8: { n:\"BrtEndPCDHFieldsUsage\" },\n0x00C9: { n:\"BrtBeginExtConnection\" },\n0x00CA: { n:\"BrtEndExtConnection\" },\n0x00CB: { n:\"BrtBeginECDbProps\" },\n0x00CC: { n:\"BrtEndECDbProps\" },\n0x00CD: { n:\"BrtBeginECOlapProps\" },\n0x00CE: { n:\"BrtEndECOlapProps\" },\n0x00CF: { n:\"BrtBeginPCDSConsol\" },\n0x00D0: { n:\"BrtEndPCDSConsol\" },\n0x00D1: { n:\"BrtBeginPCDSCPages\" },\n0x00D2: { n:\"BrtEndPCDSCPages\" },\n0x00D3: { n:\"BrtBeginPCDSCPage\" },\n0x00D4: { n:\"BrtEndPCDSCPage\" },\n0x00D5: { n:\"BrtBeginPCDSCPItem\" },\n0x00D6: { n:\"BrtEndPCDSCPItem\" },\n0x00D7: { n:\"BrtBeginPCDSCSets\" },\n0x00D8: { n:\"BrtEndPCDSCSets\" },\n0x00D9: { n:\"BrtBeginPCDSCSet\" },\n0x00DA: { n:\"BrtEndPCDSCSet\" },\n0x00DB: { n:\"BrtBeginPCDFGroup\" },\n0x00DC: { n:\"BrtEndPCDFGroup\" },\n0x00DD: { n:\"BrtBeginPCDFGItems\" },\n0x00DE: { n:\"BrtEndPCDFGItems\" },\n0x00DF: { n:\"BrtBeginPCDFGRange\" },\n0x00E0: { n:\"BrtEndPCDFGRange\" },\n0x00E1: { n:\"BrtBeginPCDFGDiscrete\" },\n0x00E2: { n:\"BrtEndPCDFGDiscrete\" },\n0x00E3: { n:\"BrtBeginPCDSDTupleCache\" },\n0x00E4: { n:\"BrtEndPCDSDTupleCache\" },\n0x00E5: { n:\"BrtBeginPCDSDTCEntries\" },\n0x00E6: { n:\"BrtEndPCDSDTCEntries\" },\n0x00E7: { n:\"BrtBeginPCDSDTCEMembers\" },\n0x00E8: { n:\"BrtEndPCDSDTCEMembers\" },\n0x00E9: { n:\"BrtBeginPCDSDTCEMember\" },\n0x00EA: { n:\"BrtEndPCDSDTCEMember\" },\n0x00EB: { n:\"BrtBeginPCDSDTCQueries\" },\n0x00EC: { n:\"BrtEndPCDSDTCQueries\" },\n0x00ED: { n:\"BrtBeginPCDSDTCQuery\" },\n0x00EE: { n:\"BrtEndPCDSDTCQuery\" },\n0x00EF: { n:\"BrtBeginPCDSDTCSets\" },\n0x00F0: { n:\"BrtEndPCDSDTCSets\" },\n0x00F1: { n:\"BrtBeginPCDSDTCSet\" },\n0x00F2: { n:\"BrtEndPCDSDTCSet\" },\n0x00F3: { n:\"BrtBeginPCDCalcItems\" },\n0x00F4: { n:\"BrtEndPCDCalcItems\" },\n0x00F5: { n:\"BrtBeginPCDCalcItem\" },\n0x00F6: { n:\"BrtEndPCDCalcItem\" },\n0x00F7: { n:\"BrtBeginPRule\" },\n0x00F8: { n:\"BrtEndPRule\" },\n0x00F9: { n:\"BrtBeginPRFilters\" },\n0x00FA: { n:\"BrtEndPRFilters\" },\n0x00FB: { n:\"BrtBeginPRFilter\" },\n0x00FC: { n:\"BrtEndPRFilter\" },\n0x00FD: { n:\"BrtBeginPNames\" },\n0x00FE: { n:\"BrtEndPNames\" },\n0x00FF: { n:\"BrtBeginPName\" },\n0x0100: { n:\"BrtEndPName\" },\n0x0101: { n:\"BrtBeginPNPairs\" },\n0x0102: { n:\"BrtEndPNPairs\" },\n0x0103: { n:\"BrtBeginPNPair\" },\n0x0104: { n:\"BrtEndPNPair\" },\n0x0105: { n:\"BrtBeginECWebProps\" },\n0x0106: { n:\"BrtEndECWebProps\" },\n0x0107: { n:\"BrtBeginEcWpTables\" },\n0x0108: { n:\"BrtEndECWPTables\" },\n0x0109: { n:\"BrtBeginECParams\" },\n0x010A: { n:\"BrtEndECParams\" },\n0x010B: { n:\"BrtBeginECParam\" },\n0x010C: { n:\"BrtEndECParam\" },\n0x010D: { n:\"BrtBeginPCDKPIs\" },\n0x010E: { n:\"BrtEndPCDKPIs\" },\n0x010F: { n:\"BrtBeginPCDKPI\" },\n0x0110: { n:\"BrtEndPCDKPI\" },\n0x0111: { n:\"BrtBeginDims\" },\n0x0112: { n:\"BrtEndDims\" },\n0x0113: { n:\"BrtBeginDim\" },\n0x0114: { n:\"BrtEndDim\" },\n0x0115: { n:\"BrtIndexPartEnd\" },\n0x0116: { n:\"BrtBeginStyleSheet\" },\n0x0117: { n:\"BrtEndStyleSheet\" },\n0x0118: { n:\"BrtBeginSXView\" },\n0x0119: { n:\"BrtEndSXVI\" },\n0x011A: { n:\"BrtBeginSXVI\" },\n0x011B: { n:\"BrtBeginSXVIs\" },\n0x011C: { n:\"BrtEndSXVIs\" },\n0x011D: { n:\"BrtBeginSXVD\" },\n0x011E: { n:\"BrtEndSXVD\" },\n0x011F: { n:\"BrtBeginSXVDs\" },\n0x0120: { n:\"BrtEndSXVDs\" },\n0x0121: { n:\"BrtBeginSXPI\" },\n0x0122: { n:\"BrtEndSXPI\" },\n0x0123: { n:\"BrtBeginSXPIs\" },\n0x0124: { n:\"BrtEndSXPIs\" },\n0x0125: { n:\"BrtBeginSXDI\" },\n0x0126: { n:\"BrtEndSXDI\" },\n0x0127: { n:\"BrtBeginSXDIs\" },\n0x0128: { n:\"BrtEndSXDIs\" },\n0x0129: { n:\"BrtBeginSXLI\" },\n0x012A: { n:\"BrtEndSXLI\" },\n0x012B: { n:\"BrtBeginSXLIRws\" },\n0x012C: { n:\"BrtEndSXLIRws\" },\n0x012D: { n:\"BrtBeginSXLICols\" },\n0x012E: { n:\"BrtEndSXLICols\" },\n0x012F: { n:\"BrtBeginSXFormat\" },\n0x0130: { n:\"BrtEndSXFormat\" },\n0x0131: { n:\"BrtBeginSXFormats\" },\n0x0132: { n:\"BrtEndSxFormats\" },\n0x0133: { n:\"BrtBeginSxSelect\" },\n0x0134: { n:\"BrtEndSxSelect\" },\n0x0135: { n:\"BrtBeginISXVDRws\" },\n0x0136: { n:\"BrtEndISXVDRws\" },\n0x0137: { n:\"BrtBeginISXVDCols\" },\n0x0138: { n:\"BrtEndISXVDCols\" },\n0x0139: { n:\"BrtEndSXLocation\" },\n0x013A: { n:\"BrtBeginSXLocation\" },\n0x013B: { n:\"BrtEndSXView\" },\n0x013C: { n:\"BrtBeginSXTHs\" },\n0x013D: { n:\"BrtEndSXTHs\" },\n0x013E: { n:\"BrtBeginSXTH\" },\n0x013F: { n:\"BrtEndSXTH\" },\n0x0140: { n:\"BrtBeginISXTHRws\" },\n0x0141: { n:\"BrtEndISXTHRws\" },\n0x0142: { n:\"BrtBeginISXTHCols\" },\n0x0143: { n:\"BrtEndISXTHCols\" },\n0x0144: { n:\"BrtBeginSXTDMPS\" },\n0x0145: { n:\"BrtEndSXTDMPs\" },\n0x0146: { n:\"BrtBeginSXTDMP\" },\n0x0147: { n:\"BrtEndSXTDMP\" },\n0x0148: { n:\"BrtBeginSXTHItems\" },\n0x0149: { n:\"BrtEndSXTHItems\" },\n0x014A: { n:\"BrtBeginSXTHItem\" },\n0x014B: { n:\"BrtEndSXTHItem\" },\n0x014C: { n:\"BrtBeginMetadata\" },\n0x014D: { n:\"BrtEndMetadata\" },\n0x014E: { n:\"BrtBeginEsmdtinfo\" },\n0x014F: { n:\"BrtMdtinfo\" },\n0x0150: { n:\"BrtEndEsmdtinfo\" },\n0x0151: { n:\"BrtBeginEsmdb\" },\n0x0152: { n:\"BrtEndEsmdb\" },\n0x0153: { n:\"BrtBeginEsfmd\" },\n0x0154: { n:\"BrtEndEsfmd\" },\n0x0155: { n:\"BrtBeginSingleCells\" },\n0x0156: { n:\"BrtEndSingleCells\" },\n0x0157: { n:\"BrtBeginList\" },\n0x0158: { n:\"BrtEndList\" },\n0x0159: { n:\"BrtBeginListCols\" },\n0x015A: { n:\"BrtEndListCols\" },\n0x015B: { n:\"BrtBeginListCol\" },\n0x015C: { n:\"BrtEndListCol\" },\n0x015D: { n:\"BrtBeginListXmlCPr\" },\n0x015E: { n:\"BrtEndListXmlCPr\" },\n0x015F: { n:\"BrtListCCFmla\" },\n0x0160: { n:\"BrtListTrFmla\" },\n0x0161: { n:\"BrtBeginExternals\" },\n0x0162: { n:\"BrtEndExternals\" },\n0x0163: { n:\"BrtSupBookSrc\", f:parse_RelID},\n0x0165: { n:\"BrtSupSelf\" },\n0x0166: { n:\"BrtSupSame\" },\n0x0167: { n:\"BrtSupTabs\" },\n0x0168: { n:\"BrtBeginSupBook\" },\n0x0169: { n:\"BrtPlaceholderName\" },\n0x016A: { n:\"BrtExternSheet\", f:parse_ExternSheet },\n0x016B: { n:\"BrtExternTableStart\" },\n0x016C: { n:\"BrtExternTableEnd\" },\n0x016E: { n:\"BrtExternRowHdr\" },\n0x016F: { n:\"BrtExternCellBlank\" },\n0x0170: { n:\"BrtExternCellReal\" },\n0x0171: { n:\"BrtExternCellBool\" },\n0x0172: { n:\"BrtExternCellError\" },\n0x0173: { n:\"BrtExternCellString\" },\n0x0174: { n:\"BrtBeginEsmdx\" },\n0x0175: { n:\"BrtEndEsmdx\" },\n0x0176: { n:\"BrtBeginMdxSet\" },\n0x0177: { n:\"BrtEndMdxSet\" },\n0x0178: { n:\"BrtBeginMdxMbrProp\" },\n0x0179: { n:\"BrtEndMdxMbrProp\" },\n0x017A: { n:\"BrtBeginMdxKPI\" },\n0x017B: { n:\"BrtEndMdxKPI\" },\n0x017C: { n:\"BrtBeginEsstr\" },\n0x017D: { n:\"BrtEndEsstr\" },\n0x017E: { n:\"BrtBeginPRFItem\" },\n0x017F: { n:\"BrtEndPRFItem\" },\n0x0180: { n:\"BrtBeginPivotCacheIDs\" },\n0x0181: { n:\"BrtEndPivotCacheIDs\" },\n0x0182: { n:\"BrtBeginPivotCacheID\" },\n0x0183: { n:\"BrtEndPivotCacheID\" },\n0x0184: { n:\"BrtBeginISXVIs\" },\n0x0185: { n:\"BrtEndISXVIs\" },\n0x0186: { n:\"BrtBeginColInfos\" },\n0x0187: { n:\"BrtEndColInfos\" },\n0x0188: { n:\"BrtBeginRwBrk\" },\n0x0189: { n:\"BrtEndRwBrk\" },\n0x018A: { n:\"BrtBeginColBrk\" },\n0x018B: { n:\"BrtEndColBrk\" },\n0x018C: { n:\"BrtBrk\" },\n0x018D: { n:\"BrtUserBookView\" },\n0x018E: { n:\"BrtInfo\" },\n0x018F: { n:\"BrtCUsr\" },\n0x0190: { n:\"BrtUsr\" },\n0x0191: { n:\"BrtBeginUsers\" },\n0x0193: { n:\"BrtEOF\" },\n0x0194: { n:\"BrtUCR\" },\n0x0195: { n:\"BrtRRInsDel\" },\n0x0196: { n:\"BrtRREndInsDel\" },\n0x0197: { n:\"BrtRRMove\" },\n0x0198: { n:\"BrtRREndMove\" },\n0x0199: { n:\"BrtRRChgCell\" },\n0x019A: { n:\"BrtRREndChgCell\" },\n0x019B: { n:\"BrtRRHeader\" },\n0x019C: { n:\"BrtRRUserView\" },\n0x019D: { n:\"BrtRRRenSheet\" },\n0x019E: { n:\"BrtRRInsertSh\" },\n0x019F: { n:\"BrtRRDefName\" },\n0x01A0: { n:\"BrtRRNote\" },\n0x01A1: { n:\"BrtRRConflict\" },\n0x01A2: { n:\"BrtRRTQSIF\" },\n0x01A3: { n:\"BrtRRFormat\" },\n0x01A4: { n:\"BrtRREndFormat\" },\n0x01A5: { n:\"BrtRRAutoFmt\" },\n0x01A6: { n:\"BrtBeginUserShViews\" },\n0x01A7: { n:\"BrtBeginUserShView\" },\n0x01A8: { n:\"BrtEndUserShView\" },\n0x01A9: { n:\"BrtEndUserShViews\" },\n0x01AA: { n:\"BrtArrFmla\", f:parse_BrtArrFmla },\n0x01AB: { n:\"BrtShrFmla\", f:parse_BrtShrFmla },\n0x01AC: { n:\"BrtTable\" },\n0x01AD: { n:\"BrtBeginExtConnections\" },\n0x01AE: { n:\"BrtEndExtConnections\" },\n0x01AF: { n:\"BrtBeginPCDCalcMems\" },\n0x01B0: { n:\"BrtEndPCDCalcMems\" },\n0x01B1: { n:\"BrtBeginPCDCalcMem\" },\n0x01B2: { n:\"BrtEndPCDCalcMem\" },\n0x01B3: { n:\"BrtBeginPCDHGLevels\" },\n0x01B4: { n:\"BrtEndPCDHGLevels\" },\n0x01B5: { n:\"BrtBeginPCDHGLevel\" },\n0x01B6: { n:\"BrtEndPCDHGLevel\" },\n0x01B7: { n:\"BrtBeginPCDHGLGroups\" },\n0x01B8: { n:\"BrtEndPCDHGLGroups\" },\n0x01B9: { n:\"BrtBeginPCDHGLGroup\" },\n0x01BA: { n:\"BrtEndPCDHGLGroup\" },\n0x01BB: { n:\"BrtBeginPCDHGLGMembers\" },\n0x01BC: { n:\"BrtEndPCDHGLGMembers\" },\n0x01BD: { n:\"BrtBeginPCDHGLGMember\" },\n0x01BE: { n:\"BrtEndPCDHGLGMember\" },\n0x01BF: { n:\"BrtBeginQSI\" },\n0x01C0: { n:\"BrtEndQSI\" },\n0x01C1: { n:\"BrtBeginQSIR\" },\n0x01C2: { n:\"BrtEndQSIR\" },\n0x01C3: { n:\"BrtBeginDeletedNames\" },\n0x01C4: { n:\"BrtEndDeletedNames\" },\n0x01C5: { n:\"BrtBeginDeletedName\" },\n0x01C6: { n:\"BrtEndDeletedName\" },\n0x01C7: { n:\"BrtBeginQSIFs\" },\n0x01C8: { n:\"BrtEndQSIFs\" },\n0x01C9: { n:\"BrtBeginQSIF\" },\n0x01CA: { n:\"BrtEndQSIF\" },\n0x01CB: { n:\"BrtBeginAutoSortScope\" },\n0x01CC: { n:\"BrtEndAutoSortScope\" },\n0x01CD: { n:\"BrtBeginConditionalFormatting\" },\n0x01CE: { n:\"BrtEndConditionalFormatting\" },\n0x01CF: { n:\"BrtBeginCFRule\" },\n0x01D0: { n:\"BrtEndCFRule\" },\n0x01D1: { n:\"BrtBeginIconSet\" },\n0x01D2: { n:\"BrtEndIconSet\" },\n0x01D3: { n:\"BrtBeginDatabar\" },\n0x01D4: { n:\"BrtEndDatabar\" },\n0x01D5: { n:\"BrtBeginColorScale\" },\n0x01D6: { n:\"BrtEndColorScale\" },\n0x01D7: { n:\"BrtCFVO\" },\n0x01D8: { n:\"BrtExternValueMeta\" },\n0x01D9: { n:\"BrtBeginColorPalette\" },\n0x01DA: { n:\"BrtEndColorPalette\" },\n0x01DB: { n:\"BrtIndexedColor\" },\n0x01DC: { n:\"BrtMargins\", f:parse_BrtMargins },\n0x01DD: { n:\"BrtPrintOptions\" },\n0x01DE: { n:\"BrtPageSetup\" },\n0x01DF: { n:\"BrtBeginHeaderFooter\" },\n0x01E0: { n:\"BrtEndHeaderFooter\" },\n0x01E1: { n:\"BrtBeginSXCrtFormat\" },\n0x01E2: { n:\"BrtEndSXCrtFormat\" },\n0x01E3: { n:\"BrtBeginSXCrtFormats\" },\n0x01E4: { n:\"BrtEndSXCrtFormats\" },\n0x01E5: { n:\"BrtWsFmtInfo\", f:parse_BrtWsFmtInfo },\n0x01E6: { n:\"BrtBeginMgs\" },\n0x01E7: { n:\"BrtEndMGs\" },\n0x01E8: { n:\"BrtBeginMGMaps\" },\n0x01E9: { n:\"BrtEndMGMaps\" },\n0x01EA: { n:\"BrtBeginMG\" },\n0x01EB: { n:\"BrtEndMG\" },\n0x01EC: { n:\"BrtBeginMap\" },\n0x01ED: { n:\"BrtEndMap\" },\n0x01EE: { n:\"BrtHLink\", f:parse_BrtHLink },\n0x01EF: { n:\"BrtBeginDCon\" },\n0x01F0: { n:\"BrtEndDCon\" },\n0x01F1: { n:\"BrtBeginDRefs\" },\n0x01F2: { n:\"BrtEndDRefs\" },\n0x01F3: { n:\"BrtDRef\" },\n0x01F4: { n:\"BrtBeginScenMan\" },\n0x01F5: { n:\"BrtEndScenMan\" },\n0x01F6: { n:\"BrtBeginSct\" },\n0x01F7: { n:\"BrtEndSct\" },\n0x01F8: { n:\"BrtSlc\" },\n0x01F9: { n:\"BrtBeginDXFs\" },\n0x01FA: { n:\"BrtEndDXFs\" },\n0x01FB: { n:\"BrtDXF\" },\n0x01FC: { n:\"BrtBeginTableStyles\" },\n0x01FD: { n:\"BrtEndTableStyles\" },\n0x01FE: { n:\"BrtBeginTableStyle\" },\n0x01FF: { n:\"BrtEndTableStyle\" },\n0x0200: { n:\"BrtTableStyleElement\" },\n0x0201: { n:\"BrtTableStyleClient\" },\n0x0202: { n:\"BrtBeginVolDeps\" },\n0x0203: { n:\"BrtEndVolDeps\" },\n0x0204: { n:\"BrtBeginVolType\" },\n0x0205: { n:\"BrtEndVolType\" },\n0x0206: { n:\"BrtBeginVolMain\" },\n0x0207: { n:\"BrtEndVolMain\" },\n0x0208: { n:\"BrtBeginVolTopic\" },\n0x0209: { n:\"BrtEndVolTopic\" },\n0x020A: { n:\"BrtVolSubtopic\" },\n0x020B: { n:\"BrtVolRef\" },\n0x020C: { n:\"BrtVolNum\" },\n0x020D: { n:\"BrtVolErr\" },\n0x020E: { n:\"BrtVolStr\" },\n0x020F: { n:\"BrtVolBool\" },\n0x0210: { n:\"BrtBeginCalcChain$\" },\n0x0211: { n:\"BrtEndCalcChain$\" },\n0x0212: { n:\"BrtBeginSortState\" },\n0x0213: { n:\"BrtEndSortState\" },\n0x0214: { n:\"BrtBeginSortCond\" },\n0x0215: { n:\"BrtEndSortCond\" },\n0x0216: { n:\"BrtBookProtection\" },\n0x0217: { n:\"BrtSheetProtection\" },\n0x0218: { n:\"BrtRangeProtection\" },\n0x0219: { n:\"BrtPhoneticInfo\" },\n0x021A: { n:\"BrtBeginECTxtWiz\" },\n0x021B: { n:\"BrtEndECTxtWiz\" },\n0x021C: { n:\"BrtBeginECTWFldInfoLst\" },\n0x021D: { n:\"BrtEndECTWFldInfoLst\" },\n0x021E: { n:\"BrtBeginECTwFldInfo\" },\n0x0224: { n:\"BrtFileSharing\" },\n0x0225: { n:\"BrtOleSize\" },\n0x0226: { n:\"BrtDrawing\", f:parse_RelID },\n0x0227: { n:\"BrtLegacyDrawing\" },\n0x0228: { n:\"BrtLegacyDrawingHF\" },\n0x0229: { n:\"BrtWebOpt\" },\n0x022A: { n:\"BrtBeginWebPubItems\" },\n0x022B: { n:\"BrtEndWebPubItems\" },\n0x022C: { n:\"BrtBeginWebPubItem\" },\n0x022D: { n:\"BrtEndWebPubItem\" },\n0x022E: { n:\"BrtBeginSXCondFmt\" },\n0x022F: { n:\"BrtEndSXCondFmt\" },\n0x0230: { n:\"BrtBeginSXCondFmts\" },\n0x0231: { n:\"BrtEndSXCondFmts\" },\n0x0232: { n:\"BrtBkHim\" },\n0x0234: { n:\"BrtColor\" },\n0x0235: { n:\"BrtBeginIndexedColors\" },\n0x0236: { n:\"BrtEndIndexedColors\" },\n0x0239: { n:\"BrtBeginMRUColors\" },\n0x023A: { n:\"BrtEndMRUColors\" },\n0x023C: { n:\"BrtMRUColor\" },\n0x023D: { n:\"BrtBeginDVals\" },\n0x023E: { n:\"BrtEndDVals\" },\n0x0241: { n:\"BrtSupNameStart\" },\n0x0242: { n:\"BrtSupNameValueStart\" },\n0x0243: { n:\"BrtSupNameValueEnd\" },\n0x0244: { n:\"BrtSupNameNum\" },\n0x0245: { n:\"BrtSupNameErr\" },\n0x0246: { n:\"BrtSupNameSt\" },\n0x0247: { n:\"BrtSupNameNil\" },\n0x0248: { n:\"BrtSupNameBool\" },\n0x0249: { n:\"BrtSupNameFmla\" },\n0x024A: { n:\"BrtSupNameBits\" },\n0x024B: { n:\"BrtSupNameEnd\" },\n0x024C: { n:\"BrtEndSupBook\" },\n0x024D: { n:\"BrtCellSmartTagProperty\" },\n0x024E: { n:\"BrtBeginCellSmartTag\" },\n0x024F: { n:\"BrtEndCellSmartTag\" },\n0x0250: { n:\"BrtBeginCellSmartTags\" },\n0x0251: { n:\"BrtEndCellSmartTags\" },\n0x0252: { n:\"BrtBeginSmartTags\" },\n0x0253: { n:\"BrtEndSmartTags\" },\n0x0254: { n:\"BrtSmartTagType\" },\n0x0255: { n:\"BrtBeginSmartTagTypes\" },\n0x0256: { n:\"BrtEndSmartTagTypes\" },\n0x0257: { n:\"BrtBeginSXFilters\" },\n0x0258: { n:\"BrtEndSXFilters\" },\n0x0259: { n:\"BrtBeginSXFILTER\" },\n0x025A: { n:\"BrtEndSXFilter\" },\n0x025B: { n:\"BrtBeginFills\" },\n0x025C: { n:\"BrtEndFills\" },\n0x025D: { n:\"BrtBeginCellWatches\" },\n0x025E: { n:\"BrtEndCellWatches\" },\n0x025F: { n:\"BrtCellWatch\" },\n0x0260: { n:\"BrtBeginCRErrs\" },\n0x0261: { n:\"BrtEndCRErrs\" },\n0x0262: { n:\"BrtCrashRecErr\" },\n0x0263: { n:\"BrtBeginFonts\" },\n0x0264: { n:\"BrtEndFonts\" },\n0x0265: { n:\"BrtBeginBorders\" },\n0x0266: { n:\"BrtEndBorders\" },\n0x0267: { n:\"BrtBeginFmts\" },\n0x0268: { n:\"BrtEndFmts\" },\n0x0269: { n:\"BrtBeginCellXFs\" },\n0x026A: { n:\"BrtEndCellXFs\" },\n0x026B: { n:\"BrtBeginStyles\" },\n0x026C: { n:\"BrtEndStyles\" },\n0x0271: { n:\"BrtBigName\" },\n0x0272: { n:\"BrtBeginCellStyleXFs\" },\n0x0273: { n:\"BrtEndCellStyleXFs\" },\n0x0274: { n:\"BrtBeginComments\" },\n0x0275: { n:\"BrtEndComments\" },\n0x0276: { n:\"BrtBeginCommentAuthors\" },\n0x0277: { n:\"BrtEndCommentAuthors\" },\n0x0278: { n:\"BrtCommentAuthor\", f:parse_BrtCommentAuthor },\n0x0279: { n:\"BrtBeginCommentList\" },\n0x027A: { n:\"BrtEndCommentList\" },\n0x027B: { n:\"BrtBeginComment\", f:parse_BrtBeginComment},\n0x027C: { n:\"BrtEndComment\" },\n0x027D: { n:\"BrtCommentText\", f:parse_BrtCommentText },\n0x027E: { n:\"BrtBeginOleObjects\" },\n0x027F: { n:\"BrtOleObject\" },\n0x0280: { n:\"BrtEndOleObjects\" },\n0x0281: { n:\"BrtBeginSxrules\" },\n0x0282: { n:\"BrtEndSxRules\" },\n0x0283: { n:\"BrtBeginActiveXControls\" },\n0x0284: { n:\"BrtActiveX\" },\n0x0285: { n:\"BrtEndActiveXControls\" },\n0x0286: { n:\"BrtBeginPCDSDTCEMembersSortBy\" },\n0x0288: { n:\"BrtBeginCellIgnoreECs\" },\n0x0289: { n:\"BrtCellIgnoreEC\" },\n0x028A: { n:\"BrtEndCellIgnoreECs\" },\n0x028B: { n:\"BrtCsProp\", f:parse_BrtCsProp },\n0x028C: { n:\"BrtCsPageSetup\" },\n0x028D: { n:\"BrtBeginUserCsViews\" },\n0x028E: { n:\"BrtEndUserCsViews\" },\n0x028F: { n:\"BrtBeginUserCsView\" },\n0x0290: { n:\"BrtEndUserCsView\" },\n0x0291: { n:\"BrtBeginPcdSFCIEntries\" },\n0x0292: { n:\"BrtEndPCDSFCIEntries\" },\n0x0293: { n:\"BrtPCDSFCIEntry\" },\n0x0294: { n:\"BrtBeginListParts\" },\n0x0295: { n:\"BrtListPart\" },\n0x0296: { n:\"BrtEndListParts\" },\n0x0297: { n:\"BrtSheetCalcProp\" },\n0x0298: { n:\"BrtBeginFnGroup\" },\n0x0299: { n:\"BrtFnGroup\" },\n0x029A: { n:\"BrtEndFnGroup\" },\n0x029B: { n:\"BrtSupAddin\" },\n0x029C: { n:\"BrtSXTDMPOrder\" },\n0x029D: { n:\"BrtCsProtection\" },\n0x029F: { n:\"BrtBeginWsSortMap\" },\n0x02A0: { n:\"BrtEndWsSortMap\" },\n0x02A1: { n:\"BrtBeginRRSort\" },\n0x02A2: { n:\"BrtEndRRSort\" },\n0x02A3: { n:\"BrtRRSortItem\" },\n0x02A4: { n:\"BrtFileSharingIso\" },\n0x02A5: { n:\"BrtBookProtectionIso\" },\n0x02A6: { n:\"BrtSheetProtectionIso\" },\n0x02A7: { n:\"BrtCsProtectionIso\" },\n0x02A8: { n:\"BrtRangeProtectionIso\" },\n0x0400: { n:\"BrtRwDescent\" },\n0x0401: { n:\"BrtKnownFonts\" },\n0x0402: { n:\"BrtBeginSXTupleSet\" },\n0x0403: { n:\"BrtEndSXTupleSet\" },\n0x0404: { n:\"BrtBeginSXTupleSetHeader\" },\n0x0405: { n:\"BrtEndSXTupleSetHeader\" },\n0x0406: { n:\"BrtSXTupleSetHeaderItem\" },\n0x0407: { n:\"BrtBeginSXTupleSetData\" },\n0x0408: { n:\"BrtEndSXTupleSetData\" },\n0x0409: { n:\"BrtBeginSXTupleSetRow\" },\n0x040A: { n:\"BrtEndSXTupleSetRow\" },\n0x040B: { n:\"BrtSXTupleSetRowItem\" },\n0x040C: { n:\"BrtNameExt\" },\n0x040D: { n:\"BrtPCDH14\" },\n0x040E: { n:\"BrtBeginPCDCalcMem14\" },\n0x040F: { n:\"BrtEndPCDCalcMem14\" },\n0x0410: { n:\"BrtSXTH14\" },\n0x0411: { n:\"BrtBeginSparklineGroup\" },\n0x0412: { n:\"BrtEndSparklineGroup\" },\n0x0413: { n:\"BrtSparkline\" },\n0x0414: { n:\"BrtSXDI14\" },\n0x0415: { n:\"BrtWsFmtInfoEx14\" },\n0x0416: { n:\"BrtBeginConditionalFormatting14\" },\n0x0417: { n:\"BrtEndConditionalFormatting14\" },\n0x0418: { n:\"BrtBeginCFRule14\" },\n0x0419: { n:\"BrtEndCFRule14\" },\n0x041A: { n:\"BrtCFVO14\" },\n0x041B: { n:\"BrtBeginDatabar14\" },\n0x041C: { n:\"BrtBeginIconSet14\" },\n0x041D: { n:\"BrtDVal14\" },\n0x041E: { n:\"BrtBeginDVals14\" },\n0x041F: { n:\"BrtColor14\" },\n0x0420: { n:\"BrtBeginSparklines\" },\n0x0421: { n:\"BrtEndSparklines\" },\n0x0422: { n:\"BrtBeginSparklineGroups\" },\n0x0423: { n:\"BrtEndSparklineGroups\" },\n0x0425: { n:\"BrtSXVD14\" },\n0x0426: { n:\"BrtBeginSXView14\" },\n0x0427: { n:\"BrtEndSXView14\" },\n0x0428: { n:\"BrtBeginSXView16\" },\n0x0429: { n:\"BrtEndSXView16\" },\n0x042A: { n:\"BrtBeginPCD14\" },\n0x042B: { n:\"BrtEndPCD14\" },\n0x042C: { n:\"BrtBeginExtConn14\" },\n0x042D: { n:\"BrtEndExtConn14\" },\n0x042E: { n:\"BrtBeginSlicerCacheIDs\" },\n0x042F: { n:\"BrtEndSlicerCacheIDs\" },\n0x0430: { n:\"BrtBeginSlicerCacheID\" },\n0x0431: { n:\"BrtEndSlicerCacheID\" },\n0x0433: { n:\"BrtBeginSlicerCache\" },\n0x0434: { n:\"BrtEndSlicerCache\" },\n0x0435: { n:\"BrtBeginSlicerCacheDef\" },\n0x0436: { n:\"BrtEndSlicerCacheDef\" },\n0x0437: { n:\"BrtBeginSlicersEx\" },\n0x0438: { n:\"BrtEndSlicersEx\" },\n0x0439: { n:\"BrtBeginSlicerEx\" },\n0x043A: { n:\"BrtEndSlicerEx\" },\n0x043B: { n:\"BrtBeginSlicer\" },\n0x043C: { n:\"BrtEndSlicer\" },\n0x043D: { n:\"BrtSlicerCachePivotTables\" },\n0x043E: { n:\"BrtBeginSlicerCacheOlapImpl\" },\n0x043F: { n:\"BrtEndSlicerCacheOlapImpl\" },\n0x0440: { n:\"BrtBeginSlicerCacheLevelsData\" },\n0x0441: { n:\"BrtEndSlicerCacheLevelsData\" },\n0x0442: { n:\"BrtBeginSlicerCacheLevelData\" },\n0x0443: { n:\"BrtEndSlicerCacheLevelData\" },\n0x0444: { n:\"BrtBeginSlicerCacheSiRanges\" },\n0x0445: { n:\"BrtEndSlicerCacheSiRanges\" },\n0x0446: { n:\"BrtBeginSlicerCacheSiRange\" },\n0x0447: { n:\"BrtEndSlicerCacheSiRange\" },\n0x0448: { n:\"BrtSlicerCacheOlapItem\" },\n0x0449: { n:\"BrtBeginSlicerCacheSelections\" },\n0x044A: { n:\"BrtSlicerCacheSelection\" },\n0x044B: { n:\"BrtEndSlicerCacheSelections\" },\n0x044C: { n:\"BrtBeginSlicerCacheNative\" },\n0x044D: { n:\"BrtEndSlicerCacheNative\" },\n0x044E: { n:\"BrtSlicerCacheNativeItem\" },\n0x044F: { n:\"BrtRangeProtection14\" },\n0x0450: { n:\"BrtRangeProtectionIso14\" },\n0x0451: { n:\"BrtCellIgnoreEC14\" },\n0x0457: { n:\"BrtList14\" },\n0x0458: { n:\"BrtCFIcon\" },\n0x0459: { n:\"BrtBeginSlicerCachesPivotCacheIDs\" },\n0x045A: { n:\"BrtEndSlicerCachesPivotCacheIDs\" },\n0x045B: { n:\"BrtBeginSlicers\" },\n0x045C: { n:\"BrtEndSlicers\" },\n0x045D: { n:\"BrtWbProp14\" },\n0x045E: { n:\"BrtBeginSXEdit\" },\n0x045F: { n:\"BrtEndSXEdit\" },\n0x0460: { n:\"BrtBeginSXEdits\" },\n0x0461: { n:\"BrtEndSXEdits\" },\n0x0462: { n:\"BrtBeginSXChange\" },\n0x0463: { n:\"BrtEndSXChange\" },\n0x0464: { n:\"BrtBeginSXChanges\" },\n0x0465: { n:\"BrtEndSXChanges\" },\n0x0466: { n:\"BrtSXTupleItems\" },\n0x0468: { n:\"BrtBeginSlicerStyle\" },\n0x0469: { n:\"BrtEndSlicerStyle\" },\n0x046A: { n:\"BrtSlicerStyleElement\" },\n0x046B: { n:\"BrtBeginStyleSheetExt14\" },\n0x046C: { n:\"BrtEndStyleSheetExt14\" },\n0x046D: { n:\"BrtBeginSlicerCachesPivotCacheID\" },\n0x046E: { n:\"BrtEndSlicerCachesPivotCacheID\" },\n0x046F: { n:\"BrtBeginConditionalFormattings\" },\n0x0470: { n:\"BrtEndConditionalFormattings\" },\n0x0471: { n:\"BrtBeginPCDCalcMemExt\" },\n0x0472: { n:\"BrtEndPCDCalcMemExt\" },\n0x0473: { n:\"BrtBeginPCDCalcMemsExt\" },\n0x0474: { n:\"BrtEndPCDCalcMemsExt\" },\n0x0475: { n:\"BrtPCDField14\" },\n0x0476: { n:\"BrtBeginSlicerStyles\" },\n0x0477: { n:\"BrtEndSlicerStyles\" },\n0x0478: { n:\"BrtBeginSlicerStyleElements\" },\n0x0479: { n:\"BrtEndSlicerStyleElements\" },\n0x047A: { n:\"BrtCFRuleExt\" },\n0x047B: { n:\"BrtBeginSXCondFmt14\" },\n0x047C: { n:\"BrtEndSXCondFmt14\" },\n0x047D: { n:\"BrtBeginSXCondFmts14\" },\n0x047E: { n:\"BrtEndSXCondFmts14\" },\n0x0480: { n:\"BrtBeginSortCond14\" },\n0x0481: { n:\"BrtEndSortCond14\" },\n0x0482: { n:\"BrtEndDVals14\" },\n0x0483: { n:\"BrtEndIconSet14\" },\n0x0484: { n:\"BrtEndDatabar14\" },\n0x0485: { n:\"BrtBeginColorScale14\" },\n0x0486: { n:\"BrtEndColorScale14\" },\n0x0487: { n:\"BrtBeginSxrules14\" },\n0x0488: { n:\"BrtEndSxrules14\" },\n0x0489: { n:\"BrtBeginPRule14\" },\n0x048A: { n:\"BrtEndPRule14\" },\n0x048B: { n:\"BrtBeginPRFilters14\" },\n0x048C: { n:\"BrtEndPRFilters14\" },\n0x048D: { n:\"BrtBeginPRFilter14\" },\n0x048E: { n:\"BrtEndPRFilter14\" },\n0x048F: { n:\"BrtBeginPRFItem14\" },\n0x0490: { n:\"BrtEndPRFItem14\" },\n0x0491: { n:\"BrtBeginCellIgnoreECs14\" },\n0x0492: { n:\"BrtEndCellIgnoreECs14\" },\n0x0493: { n:\"BrtDxf14\" },\n0x0494: { n:\"BrtBeginDxF14s\" },\n0x0495: { n:\"BrtEndDxf14s\" },\n0x0499: { n:\"BrtFilter14\" },\n0x049A: { n:\"BrtBeginCustomFilters14\" },\n0x049C: { n:\"BrtCustomFilter14\" },\n0x049D: { n:\"BrtIconFilter14\" },\n0x049E: { n:\"BrtPivotCacheConnectionName\" },\n0x0800: { n:\"BrtBeginDecoupledPivotCacheIDs\" },\n0x0801: { n:\"BrtEndDecoupledPivotCacheIDs\" },\n0x0802: { n:\"BrtDecoupledPivotCacheID\" },\n0x0803: { n:\"BrtBeginPivotTableRefs\" },\n0x0804: { n:\"BrtEndPivotTableRefs\" },\n0x0805: { n:\"BrtPivotTableRef\" },\n0x0806: { n:\"BrtSlicerCacheBookPivotTables\" },\n0x0807: { n:\"BrtBeginSxvcells\" },\n0x0808: { n:\"BrtEndSxvcells\" },\n0x0809: { n:\"BrtBeginSxRow\" },\n0x080A: { n:\"BrtEndSxRow\" },\n0x080C: { n:\"BrtPcdCalcMem15\" },\n0x0813: { n:\"BrtQsi15\" },\n0x0814: { n:\"BrtBeginWebExtensions\" },\n0x0815: { n:\"BrtEndWebExtensions\" },\n0x0816: { n:\"BrtWebExtension\" },\n0x0817: { n:\"BrtAbsPath15\" },\n0x0818: { n:\"BrtBeginPivotTableUISettings\" },\n0x0819: { n:\"BrtEndPivotTableUISettings\" },\n0x081B: { n:\"BrtTableSlicerCacheIDs\" },\n0x081C: { n:\"BrtTableSlicerCacheID\" },\n0x081D: { n:\"BrtBeginTableSlicerCache\" },\n0x081E: { n:\"BrtEndTableSlicerCache\" },\n0x081F: { n:\"BrtSxFilter15\" },\n0x0820: { n:\"BrtBeginTimelineCachePivotCacheIDs\" },\n0x0821: { n:\"BrtEndTimelineCachePivotCacheIDs\" },\n0x0822: { n:\"BrtTimelineCachePivotCacheID\" },\n0x0823: { n:\"BrtBeginTimelineCacheIDs\" },\n0x0824: { n:\"BrtEndTimelineCacheIDs\" },\n0x0825: { n:\"BrtBeginTimelineCacheID\" },\n0x0826: { n:\"BrtEndTimelineCacheID\" },\n0x0827: { n:\"BrtBeginTimelinesEx\" },\n0x0828: { n:\"BrtEndTimelinesEx\" },\n0x0829: { n:\"BrtBeginTimelineEx\" },\n0x082A: { n:\"BrtEndTimelineEx\" },\n0x082B: { n:\"BrtWorkBookPr15\" },\n0x082C: { n:\"BrtPCDH15\" },\n0x082D: { n:\"BrtBeginTimelineStyle\" },\n0x082E: { n:\"BrtEndTimelineStyle\" },\n0x082F: { n:\"BrtTimelineStyleElement\" },\n0x0830: { n:\"BrtBeginTimelineStylesheetExt15\" },\n0x0831: { n:\"BrtEndTimelineStylesheetExt15\" },\n0x0832: { n:\"BrtBeginTimelineStyles\" },\n0x0833: { n:\"BrtEndTimelineStyles\" },\n0x0834: { n:\"BrtBeginTimelineStyleElements\" },\n0x0835: { n:\"BrtEndTimelineStyleElements\" },\n0x0836: { n:\"BrtDxf15\" },\n0x0837: { n:\"BrtBeginDxfs15\" },\n0x0838: { n:\"brtEndDxfs15\" },\n0x0839: { n:\"BrtSlicerCacheHideItemsWithNoData\" },\n0x083A: { n:\"BrtBeginItemUniqueNames\" },\n0x083B: { n:\"BrtEndItemUniqueNames\" },\n0x083C: { n:\"BrtItemUniqueName\" },\n0x083D: { n:\"BrtBeginExtConn15\" },\n0x083E: { n:\"BrtEndExtConn15\" },\n0x083F: { n:\"BrtBeginOledbPr15\" },\n0x0840: { n:\"BrtEndOledbPr15\" },\n0x0841: { n:\"BrtBeginDataFeedPr15\" },\n0x0842: { n:\"BrtEndDataFeedPr15\" },\n0x0843: { n:\"BrtTextPr15\" },\n0x0844: { n:\"BrtRangePr15\" },\n0x0845: { n:\"BrtDbCommand15\" },\n0x0846: { n:\"BrtBeginDbTables15\" },\n0x0847: { n:\"BrtEndDbTables15\" },\n0x0848: { n:\"BrtDbTable15\" },\n0x0849: { n:\"BrtBeginDataModel\" },\n0x084A: { n:\"BrtEndDataModel\" },\n0x084B: { n:\"BrtBeginModelTables\" },\n0x084C: { n:\"BrtEndModelTables\" },\n0x084D: { n:\"BrtModelTable\" },\n0x084E: { n:\"BrtBeginModelRelationships\" },\n0x084F: { n:\"BrtEndModelRelationships\" },\n0x0850: { n:\"BrtModelRelationship\" },\n0x0851: { n:\"BrtBeginECTxtWiz15\" },\n0x0852: { n:\"BrtEndECTxtWiz15\" },\n0x0853: { n:\"BrtBeginECTWFldInfoLst15\" },\n0x0854: { n:\"BrtEndECTWFldInfoLst15\" },\n0x0855: { n:\"BrtBeginECTWFldInfo15\" },\n0x0856: { n:\"BrtFieldListActiveItem\" },\n0x0857: { n:\"BrtPivotCacheIdVersion\" },\n0x0858: { n:\"BrtSXDI15\" },\n0x0859: { n:\"BrtBeginModelTimeGroupings\" },\n0x085A: { n:\"BrtEndModelTimeGroupings\" },\n0x085B: { n:\"BrtBeginModelTimeGrouping\" },\n0x085C: { n:\"BrtEndModelTimeGrouping\" },\n0x085D: { n:\"BrtModelTimeGroupingCalcCol\" },\n0x0C00: { n:\"BrtUid\" },\n0x0C01: { n:\"BrtRevisionPtr\" },\n0xFFFF: { n:\"\" }\n};\n\nvar XLSBRE = evert_key(XLSBRecordEnum, 'n');\n\n/* [MS-XLS] 2.3 Record Enumeration */\nvar XLSRecordEnum = {\n0x0003: { n:\"BIFF2NUM\", f:parse_BIFF2NUM },\n0x0004: { n:\"BIFF2STR\", f:parse_BIFF2STR },\n0x0006: { n:\"Formula\", f:parse_Formula },\n0x0009: { n:'BOF', f:parse_BOF },\n0x000a: { n:'EOF', f:parsenoop2 },\n0x000c: { n:\"CalcCount\", f:parseuint16 },\n0x000d: { n:\"CalcMode\", f:parseuint16 },\n0x000e: { n:\"CalcPrecision\", f:parsebool },\n0x000f: { n:\"CalcRefMode\", f:parsebool },\n0x0010: { n:\"CalcDelta\", f:parse_Xnum },\n0x0011: { n:\"CalcIter\", f:parsebool },\n0x0012: { n:\"Protect\", f:parsebool },\n0x0013: { n:\"Password\", f:parseuint16 },\n0x0014: { n:\"Header\", f:parse_XLHeaderFooter },\n0x0015: { n:\"Footer\", f:parse_XLHeaderFooter },\n0x0017: { n:\"ExternSheet\", f:parse_ExternSheet },\n0x0018: { n:\"Lbl\", f:parse_Lbl },\n0x0019: { n:\"WinProtect\", f:parsebool },\n0x001a: { n:\"VerticalPageBreaks\" },\n0x001b: { n:\"HorizontalPageBreaks\" },\n0x001c: { n:\"Note\", f:parse_Note },\n0x001d: { n:\"Selection\" },\n0x0022: { n:\"Date1904\", f:parsebool },\n0x0023: { n:\"ExternName\", f:parse_ExternName },\n0x0026: { n:\"LeftMargin\", f:parse_Xnum },\n0x0027: { n:\"RightMargin\", f:parse_Xnum },\n0x0028: { n:\"TopMargin\", f:parse_Xnum },\n0x0029: { n:\"BottomMargin\", f:parse_Xnum },\n0x002a: { n:\"PrintRowCol\", f:parsebool },\n0x002b: { n:\"PrintGrid\", f:parsebool },\n0x002f: { n:\"FilePass\", f:parse_FilePass },\n0x0031: { n:\"Font\", f:parse_Font },\n0x0033: { n:\"PrintSize\", f:parseuint16 },\n0x003c: { n:\"Continue\" },\n0x003d: { n:\"Window1\", f:parse_Window1 },\n0x0040: { n:\"Backup\", f:parsebool },\n0x0041: { n:\"Pane\" },\n0x0042: { n:'CodePage', f:parseuint16 },\n0x004d: { n:\"Pls\" },\n0x0050: { n:\"DCon\" },\n0x0051: { n:\"DConRef\" },\n0x0052: { n:\"DConName\" },\n0x0055: { n:\"DefColWidth\", f:parseuint16 },\n0x0059: { n:\"XCT\" },\n0x005a: { n:\"CRN\" },\n0x005b: { n:\"FileSharing\" },\n0x005c: { n:'WriteAccess', f:parse_WriteAccess },\n0x005d: { n:\"Obj\", f:parse_Obj },\n0x005e: { n:\"Uncalced\" },\n0x005f: { n:\"CalcSaveRecalc\", f:parsebool },\n0x0060: { n:\"Template\" },\n0x0061: { n:\"Intl\" },\n0x0063: { n:\"ObjProtect\", f:parsebool },\n0x007d: { n:\"ColInfo\", f:parse_ColInfo },\n0x0080: { n:\"Guts\", f:parse_Guts },\n0x0081: { n:\"WsBool\", f:parse_WsBool },\n0x0082: { n:\"GridSet\", f:parseuint16 },\n0x0083: { n:\"HCenter\", f:parsebool },\n0x0084: { n:\"VCenter\", f:parsebool },\n0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 },\n0x0086: { n:\"WriteProtect\" },\n0x008c: { n:\"Country\", f:parse_Country },\n0x008d: { n:\"HideObj\", f:parseuint16 },\n0x0090: { n:\"Sort\" },\n0x0092: { n:\"Palette\", f:parse_Palette },\n0x0097: { n:\"Sync\" },\n0x0098: { n:\"LPr\" },\n0x0099: { n:\"DxGCol\" },\n0x009a: { n:\"FnGroupName\" },\n0x009b: { n:\"FilterMode\" },\n0x009c: { n:\"BuiltInFnGroupCount\", f:parseuint16 },\n0x009d: { n:\"AutoFilterInfo\" },\n0x009e: { n:\"AutoFilter\" },\n0x00a0: { n:\"Scl\", f:parse_Scl },\n0x00a1: { n:\"Setup\", f:parse_Setup },\n0x00ae: { n:\"ScenMan\" },\n0x00af: { n:\"SCENARIO\" },\n0x00b0: { n:\"SxView\" },\n0x00b1: { n:\"Sxvd\" },\n0x00b2: { n:\"SXVI\" },\n0x00b4: { n:\"SxIvd\" },\n0x00b5: { n:\"SXLI\" },\n0x00b6: { n:\"SXPI\" },\n0x00b8: { n:\"DocRoute\" },\n0x00b9: { n:\"RecipName\" },\n0x00bd: { n:\"MulRk\", f:parse_MulRk },\n0x00be: { n:\"MulBlank\", f:parse_MulBlank },\n0x00c1: { n:'Mms', f:parsenoop2 },\n0x00c5: { n:\"SXDI\" },\n0x00c6: { n:\"SXDB\" },\n0x00c7: { n:\"SXFDB\" },\n0x00c8: { n:\"SXDBB\" },\n0x00c9: { n:\"SXNum\" },\n0x00ca: { n:\"SxBool\", f:parsebool },\n0x00cb: { n:\"SxErr\" },\n0x00cc: { n:\"SXInt\" },\n0x00cd: { n:\"SXString\" },\n0x00ce: { n:\"SXDtr\" },\n0x00cf: { n:\"SxNil\" },\n0x00d0: { n:\"SXTbl\" },\n0x00d1: { n:\"SXTBRGIITM\" },\n0x00d2: { n:\"SxTbpg\" },\n0x00d3: { n:\"ObProj\" },\n0x00d5: { n:\"SXStreamID\" },\n0x00d7: { n:\"DBCell\" },\n0x00d8: { n:\"SXRng\" },\n0x00d9: { n:\"SxIsxoper\" },\n0x00da: { n:\"BookBool\", f:parseuint16 },\n0x00dc: { n:\"DbOrParamQry\" },\n0x00dd: { n:\"ScenarioProtect\", f:parsebool },\n0x00de: { n:\"OleObjectSize\" },\n0x00e0: { n:\"XF\", f:parse_XF },\n0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr },\n0x00e2: { n:'InterfaceEnd', f:parsenoop2 },\n0x00e3: { n:\"SXVS\" },\n0x00e5: { n:\"MergeCells\", f:parse_MergeCells },\n0x00e9: { n:\"BkHim\" },\n0x00eb: { n:\"MsoDrawingGroup\" },\n0x00ec: { n:\"MsoDrawing\" },\n0x00ed: { n:\"MsoDrawingSelection\" },\n0x00ef: { n:\"PhoneticInfo\" },\n0x00f0: { n:\"SxRule\" },\n0x00f1: { n:\"SXEx\" },\n0x00f2: { n:\"SxFilt\" },\n0x00f4: { n:\"SxDXF\" },\n0x00f5: { n:\"SxItm\" },\n0x00f6: { n:\"SxName\" },\n0x00f7: { n:\"SxSelect\" },\n0x00f8: { n:\"SXPair\" },\n0x00f9: { n:\"SxFmla\" },\n0x00fb: { n:\"SxFormat\" },\n0x00fc: { n:\"SST\", f:parse_SST },\n0x00fd: { n:\"LabelSst\", f:parse_LabelSst },\n0x00ff: { n:\"ExtSST\", f:parse_ExtSST },\n0x0100: { n:\"SXVDEx\" },\n0x0103: { n:\"SXFormula\" },\n0x0122: { n:\"SXDBEx\" },\n0x0137: { n:\"RRDInsDel\" },\n0x0138: { n:\"RRDHead\" },\n0x013b: { n:\"RRDChgCell\" },\n0x013d: { n:\"RRTabId\", f:parseuint16a },\n0x013e: { n:\"RRDRenSheet\" },\n0x013f: { n:\"RRSort\" },\n0x0140: { n:\"RRDMove\" },\n0x014a: { n:\"RRFormat\" },\n0x014b: { n:\"RRAutoFmt\" },\n0x014d: { n:\"RRInsertSh\" },\n0x014e: { n:\"RRDMoveBegin\" },\n0x014f: { n:\"RRDMoveEnd\" },\n0x0150: { n:\"RRDInsDelBegin\" },\n0x0151: { n:\"RRDInsDelEnd\" },\n0x0152: { n:\"RRDConflict\" },\n0x0153: { n:\"RRDDefName\" },\n0x0154: { n:\"RRDRstEtxp\" },\n0x015f: { n:\"LRng\" },\n0x0160: { n:\"UsesELFs\", f:parsebool },\n0x0161: { n:\"DSF\", f:parsenoop2 },\n0x0191: { n:\"CUsr\" },\n0x0192: { n:\"CbUsr\" },\n0x0193: { n:\"UsrInfo\" },\n0x0194: { n:\"UsrExcl\" },\n0x0195: { n:\"FileLock\" },\n0x0196: { n:\"RRDInfo\" },\n0x0197: { n:\"BCUsrs\" },\n0x0198: { n:\"UsrChk\" },\n0x01a9: { n:\"UserBView\" },\n0x01aa: { n:\"UserSViewBegin\" },\n0x01ab: { n:\"UserSViewEnd\" },\n0x01ac: { n:\"RRDUserView\" },\n0x01ad: { n:\"Qsi\" },\n0x01ae: { n:\"SupBook\", f:parse_SupBook },\n0x01af: { n:\"Prot4Rev\", f:parsebool },\n0x01b0: { n:\"CondFmt\" },\n0x01b1: { n:\"CF\" },\n0x01b2: { n:\"DVal\" },\n0x01b5: { n:\"DConBin\" },\n0x01b6: { n:\"TxO\", f:parse_TxO },\n0x01b7: { n:\"RefreshAll\", f:parsebool },\n0x01b8: { n:\"HLink\", f:parse_HLink },\n0x01b9: { n:\"Lel\" },\n0x01ba: { n:\"CodeName\", f:parse_XLUnicodeString },\n0x01bb: { n:\"SXFDBType\" },\n0x01bc: { n:\"Prot4RevPass\", f:parseuint16 },\n0x01bd: { n:\"ObNoMacros\" },\n0x01be: { n:\"Dv\" },\n0x01c0: { n:\"Excel9File\", f:parsenoop2 },\n0x01c1: { n:\"RecalcId\", f:parse_RecalcId, r:2},\n0x01c2: { n:\"EntExU2\", f:parsenoop2 },\n0x0200: { n:\"Dimensions\", f:parse_Dimensions },\n0x0201: { n:\"Blank\", f:parse_Blank },\n0x0203: { n:\"Number\", f:parse_Number },\n0x0204: { n:\"Label\", f:parse_Label },\n0x0205: { n:\"BoolErr\", f:parse_BoolErr },\n0x0206: { n:\"Formula\", f:parse_Formula },\n0x0207: { n:\"String\", f:parse_String },\n0x0208: { n:'Row', f:parse_Row },\n0x020b: { n:\"Index\" },\n0x0221: { n:\"Array\", f:parse_Array },\n0x0225: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n0x0236: { n:\"Table\" },\n0x023e: { n:\"Window2\", f:parse_Window2 },\n0x027e: { n:\"RK\", f:parse_RK },\n0x0293: { n:\"Style\" },\n0x0406: { n:\"Formula\", f:parse_Formula },\n0x0418: { n:\"BigName\" },\n0x041e: { n:\"Format\", f:parse_Format },\n0x043c: { n:\"ContinueBigName\" },\n0x04bc: { n:\"ShrFmla\", f:parse_ShrFmla },\n0x0800: { n:\"HLinkTooltip\", f:parse_HLinkTooltip },\n0x0801: { n:\"WebPub\" },\n0x0802: { n:\"QsiSXTag\" },\n0x0803: { n:\"DBQueryExt\" },\n0x0804: { n:\"ExtString\" },\n0x0805: { n:\"TxtQry\" },\n0x0806: { n:\"Qsir\" },\n0x0807: { n:\"Qsif\" },\n0x0808: { n:\"RRDTQSIF\" },\n0x0809: { n:'BOF', f:parse_BOF },\n0x080a: { n:\"OleDbConn\" },\n0x080b: { n:\"WOpt\" },\n0x080c: { n:\"SXViewEx\" },\n0x080d: { n:\"SXTH\" },\n0x080e: { n:\"SXPIEx\" },\n0x080f: { n:\"SXVDTEx\" },\n0x0810: { n:\"SXViewEx9\" },\n0x0812: { n:\"ContinueFrt\" },\n0x0813: { n:\"RealTimeData\" },\n0x0850: { n:\"ChartFrtInfo\" },\n0x0851: { n:\"FrtWrapper\" },\n0x0852: { n:\"StartBlock\" },\n0x0853: { n:\"EndBlock\" },\n0x0854: { n:\"StartObject\" },\n0x0855: { n:\"EndObject\" },\n0x0856: { n:\"CatLab\" },\n0x0857: { n:\"YMult\" },\n0x0858: { n:\"SXViewLink\" },\n0x0859: { n:\"PivotChartBits\" },\n0x085a: { n:\"FrtFontList\" },\n0x0862: { n:\"SheetExt\" },\n0x0863: { n:\"BookExt\", r:12},\n0x0864: { n:\"SXAddl\" },\n0x0865: { n:\"CrErr\" },\n0x0866: { n:\"HFPicture\" },\n0x0867: { n:'FeatHdr', f:parsenoop2 },\n0x0868: { n:\"Feat\" },\n0x086a: { n:\"DataLabExt\" },\n0x086b: { n:\"DataLabExtContents\" },\n0x086c: { n:\"CellWatch\" },\n0x0871: { n:\"FeatHdr11\" },\n0x0872: { n:\"Feature11\" },\n0x0874: { n:\"DropDownObjIds\" },\n0x0875: { n:\"ContinueFrt11\" },\n0x0876: { n:\"DConn\" },\n0x0877: { n:\"List12\" },\n0x0878: { n:\"Feature12\" },\n0x0879: { n:\"CondFmt12\" },\n0x087a: { n:\"CF12\" },\n0x087b: { n:\"CFEx\" },\n0x087c: { n:\"XFCRC\", f:parse_XFCRC, r:12 },\n0x087d: { n:\"XFExt\", f:parse_XFExt, r:12 },\n0x087e: { n:\"AutoFilter12\" },\n0x087f: { n:\"ContinueFrt12\" },\n0x0884: { n:\"MDTInfo\" },\n0x0885: { n:\"MDXStr\" },\n0x0886: { n:\"MDXTuple\" },\n0x0887: { n:\"MDXSet\" },\n0x0888: { n:\"MDXProp\" },\n0x0889: { n:\"MDXKPI\" },\n0x088a: { n:\"MDB\" },\n0x088b: { n:\"PLV\" },\n0x088c: { n:\"Compat12\", f:parsebool, r:12 },\n0x088d: { n:\"DXF\" },\n0x088e: { n:\"TableStyles\", r:12 },\n0x088f: { n:\"TableStyle\" },\n0x0890: { n:\"TableStyleElement\" },\n0x0892: { n:\"StyleExt\" },\n0x0893: { n:\"NamePublish\" },\n0x0894: { n:\"NameCmt\", f:parse_NameCmt, r:12 },\n0x0895: { n:\"SortData\" },\n0x0896: { n:\"Theme\", f:parse_Theme, r:12 },\n0x0897: { n:\"GUIDTypeLib\" },\n0x0898: { n:\"FnGrp12\" },\n0x0899: { n:\"NameFnGrp12\" },\n0x089a: { n:\"MTRSettings\", f:parse_MTRSettings, r:12 },\n0x089b: { n:\"CompressPictures\", f:parsenoop2 },\n0x089c: { n:\"HeaderFooter\" },\n0x089d: { n:\"CrtLayout12\" },\n0x089e: { n:\"CrtMlFrt\" },\n0x089f: { n:\"CrtMlFrtContinue\" },\n0x08a3: { n:\"ForceFullCalculation\", f:parse_ForceFullCalculation },\n0x08a4: { n:\"ShapePropsStream\" },\n0x08a5: { n:\"TextPropsStream\" },\n0x08a6: { n:\"RichTextStream\" },\n0x08a7: { n:\"CrtLayout12A\" },\n0x1001: { n:\"Units\" },\n0x1002: { n:\"Chart\" },\n0x1003: { n:\"Series\" },\n0x1006: { n:\"DataFormat\" },\n0x1007: { n:\"LineFormat\" },\n0x1009: { n:\"MarkerFormat\" },\n0x100a: { n:\"AreaFormat\" },\n0x100b: { n:\"PieFormat\" },\n0x100c: { n:\"AttachedLabel\" },\n0x100d: { n:\"SeriesText\" },\n0x1014: { n:\"ChartFormat\" },\n0x1015: { n:\"Legend\" },\n0x1016: { n:\"SeriesList\" },\n0x1017: { n:\"Bar\" },\n0x1018: { n:\"Line\" },\n0x1019: { n:\"Pie\" },\n0x101a: { n:\"Area\" },\n0x101b: { n:\"Scatter\" },\n0x101c: { n:\"CrtLine\" },\n0x101d: { n:\"Axis\" },\n0x101e: { n:\"Tick\" },\n0x101f: { n:\"ValueRange\" },\n0x1020: { n:\"CatSerRange\" },\n0x1021: { n:\"AxisLine\" },\n0x1022: { n:\"CrtLink\" },\n0x1024: { n:\"DefaultText\" },\n0x1025: { n:\"Text\" },\n0x1026: { n:\"FontX\", f:parseuint16 },\n0x1027: { n:\"ObjectLink\" },\n0x1032: { n:\"Frame\" },\n0x1033: { n:\"Begin\" },\n0x1034: { n:\"End\" },\n0x1035: { n:\"PlotArea\" },\n0x103a: { n:\"Chart3d\" },\n0x103c: { n:\"PicF\" },\n0x103d: { n:\"DropBar\" },\n0x103e: { n:\"Radar\" },\n0x103f: { n:\"Surf\" },\n0x1040: { n:\"RadarArea\" },\n0x1041: { n:\"AxisParent\" },\n0x1043: { n:\"LegendException\" },\n0x1044: { n:\"ShtProps\", f:parse_ShtProps },\n0x1045: { n:\"SerToCrt\" },\n0x1046: { n:\"AxesUsed\" },\n0x1048: { n:\"SBaseRef\" },\n0x104a: { n:\"SerParent\" },\n0x104b: { n:\"SerAuxTrend\" },\n0x104e: { n:\"IFmtRecord\" },\n0x104f: { n:\"Pos\" },\n0x1050: { n:\"AlRuns\" },\n0x1051: { n:\"BRAI\" },\n0x105b: { n:\"SerAuxErrBar\" },\n0x105c: { n:\"ClrtClient\", f:parse_ClrtClient },\n0x105d: { n:\"SerFmt\" },\n0x105f: { n:\"Chart3DBarShape\" },\n0x1060: { n:\"Fbi\" },\n0x1061: { n:\"BopPop\" },\n0x1062: { n:\"AxcExt\" },\n0x1063: { n:\"Dat\" },\n0x1064: { n:\"PlotGrowth\" },\n0x1065: { n:\"SIIndex\" },\n0x1066: { n:\"GelFrame\" },\n0x1067: { n:\"BopPopCustom\" },\n0x1068: { n:\"Fbi2\" },\n\n0x0000: { n:\"Dimensions\", f:parse_Dimensions },\n0x0002: { n:\"BIFF2INT\", f:parse_BIFF2INT },\n0x0005: { n:\"BoolErr\", f:parse_BoolErr },\n0x0007: { n:\"String\", f:parse_BIFF2STRING },\n0x0008: { n:\"BIFF2ROW\" },\n0x000b: { n:\"Index\" },\n0x0016: { n:\"ExternCount\", f:parseuint16 },\n0x001e: { n:\"BIFF2FORMAT\", f:parse_BIFF2Format },\n0x001f: { n:\"BIFF2FMTCNT\" }, /* 16-bit cnt of BIFF2FORMAT records */\n0x0020: { n:\"BIFF2COLINFO\" },\n0x0021: { n:\"Array\", f:parse_Array },\n0x0025: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n0x0032: { n:\"BIFF2FONTXTRA\", f:parse_BIFF2FONTXTRA },\n0x0034: { n:\"DDEObjName\" },\n0x003e: { n:\"BIFF2WINDOW2\" },\n0x0043: { n:\"BIFF2XF\" },\n0x0045: { n:\"BIFF2FONTCLR\" },\n0x0056: { n:\"BIFF4FMTCNT\" }, /* 16-bit cnt, similar to BIFF2 */\n0x007e: { n:\"RK\" }, /* Not necessarily same as 0x027e */\n0x007f: { n:\"ImData\", f:parse_ImData },\n0x0087: { n:\"Addin\" },\n0x0088: { n:\"Edg\" },\n0x0089: { n:\"Pub\" },\n0x0091: { n:\"Sub\" },\n0x0094: { n:\"LHRecord\" },\n0x0095: { n:\"LHNGraph\" },\n0x0096: { n:\"Sound\" },\n0x00a9: { n:\"CoordList\" },\n0x00ab: { n:\"GCW\" },\n0x00bc: { n:\"ShrFmla\" }, /* Not necessarily same as 0x04bc */\n0x00bf: { n:\"ToolbarHdr\" },\n0x00c0: { n:\"ToolbarEnd\" },\n0x00c2: { n:\"AddMenu\" },\n0x00c3: { n:\"DelMenu\" },\n0x00d6: { n:\"RString\", f:parse_RString },\n0x00df: { n:\"UDDesc\" },\n0x00ea: { n:\"TabIdConf\" },\n0x0162: { n:\"XL5Modify\" },\n0x01a5: { n:\"FileSharing2\" },\n0x0209: { n:'BOF', f:parse_BOF },\n0x0218: { n:\"Lbl\", f:parse_Lbl },\n0x0223: { n:\"ExternName\", f:parse_ExternName },\n0x0231: { n:\"Font\" },\n0x0243: { n:\"BIFF3XF\" },\n0x0409: { n:'BOF', f:parse_BOF },\n0x0443: { n:\"BIFF4XF\" },\n0x086d: { n:\"FeatInfo\" },\n0x0873: { n:\"FeatInfo11\" },\n0x0881: { n:\"SXAddl12\" },\n0x08c0: { n:\"AutoWebPub\" },\n0x08c1: { n:\"ListObj\" },\n0x08c2: { n:\"ListField\" },\n0x08c3: { n:\"ListDV\" },\n0x08c4: { n:\"ListCondFmt\" },\n0x08c5: { n:\"ListCF\" },\n0x08c6: { n:\"FMQry\" },\n0x08c7: { n:\"FMSQry\" },\n0x08c8: { n:\"PLV\" },\n0x08c9: { n:\"LnExt\" },\n0x08ca: { n:\"MkrExt\" },\n0x08cb: { n:\"CrtCoopt\" },\n0x08d6: { n:\"FRTArchId$\", r:12 },\n\n0x7262: {}\n};\n\nvar XLSRE = evert_key(XLSRecordEnum, 'n');\nfunction write_biff_rec(ba, type, payload, length) {\n\tvar t = +type || +XLSRE[type];\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_BIFF2Cell(out, r, c) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r, c, val, t) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tif(t == 'e') { out.write_shift(1, val); out.write_shift(1, 1); }\n\telse { out.write_shift(1, val?1:0); out.write_shift(1, 0); }\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r, c, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba, cell, R, C) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba, ws, idx, opts) {\n\tvar dense = Array.isArray(ws);\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t\tref = encode_range(range);\n\t}\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb, opts) {\n\tvar o = opts || {};\n\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* ... */\n\twrite_biff_rec(ba, \"CalcMode\", writeuint16(1));\n\twrite_biff_rec(ba, \"CalcCount\", writeuint16(100));\n\twrite_biff_rec(ba, \"CalcRefMode\", writebool(true));\n\twrite_biff_rec(ba, \"CalcIter\", writebool(false));\n\twrite_biff_rec(ba, \"CalcDelta\", write_Xnum(0.001));\n\twrite_biff_rec(ba, \"CalcSaveRecalc\", writebool(true));\n\twrite_biff_rec(ba, \"PrintRowCol\", writebool(false));\n\twrite_biff_rec(ba, \"PrintGrid\", writebool(false));\n\twrite_biff_rec(ba, \"GridSet\", writeuint16(1));\n\twrite_biff_rec(ba, \"Guts\", write_Guts([0,0]));\n\t/* ... */\n\twrite_biff_rec(ba, \"HCenter\", writebool(false));\n\twrite_biff_rec(ba, \"VCenter\", writebool(false));\n\t/* ... */\n\twrite_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t}\n\t}\n\tvar cname = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8 && _WB.Views) write_biff_rec(ba, \"Window2\", write_Window2(_WB.Views[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, \"MergeCells\", write_MergeCells(ws['!merges']));\n\t/* ... */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* ... */\n\twrite_biff_rec(ba, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t/* ... */\n\tif(b8) write_FEAT(ba, ws);\n\t/* ... */\n\twrite_biff_rec(ba, \"EOF\");\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb, bufs, opts) {\n\tvar A = buf_array();\n\tvar _WB = ((wb||{}).Workbook||{});\n\tvar _sheets = (_WB.Sheets||[]);\n\tvar _wb = _WB.WBProps||{};\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, \"Addin\");\n\twrite_biff_rec(A, \"InterfaceHdr\", b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, \"Mms\", writezeroes(2));\n\tif(b5) write_biff_rec(A, \"ToolbarHdr\");\n\tif(b5) write_biff_rec(A, \"ToolbarEnd\");\n\twrite_biff_rec(A, \"InterfaceEnd\");\n\twrite_biff_rec(A, \"WriteAccess\", write_WriteAccess(\"SheetJS\", opts));\n\twrite_biff_rec(A, \"CodePage\", writeuint16(b8 ? 0x04b0 : 0x04E4));\n\tif(b8) write_biff_rec(A, \"DSF\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Excel9File\");\n\twrite_biff_rec(A, \"RRTabId\", write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) {\n\t\twrite_biff_rec(A, \"ObProj\");\n\t\tvar cname = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, \"BuiltInFnGroupCount\", writeuint16(0x11));\n\twrite_biff_rec(A, \"WinProtect\", writebool(false));\n\twrite_biff_rec(A, \"Protect\", writebool(false));\n\twrite_biff_rec(A, \"Password\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Prot4Rev\", writebool(false));\n\tif(b8) write_biff_rec(A, \"Prot4RevPass\", writeuint16(0));\n\twrite_biff_rec(A, \"Window1\", write_Window1(opts));\n\twrite_biff_rec(A, \"Backup\", writebool(false));\n\twrite_biff_rec(A, \"HideObj\", writeuint16(0));\n\twrite_biff_rec(A, \"Date1904\", writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, \"CalcPrecision\", writebool(true));\n\tif(b8) write_biff_rec(A, \"RefreshAll\", writebool(false));\n\twrite_biff_rec(A, \"BookBool\", writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, \"UsesELFs\", writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\tif(b8) write_biff_rec(C, \"Country\", write_Country());\n\t/* BIFF8: [SST *Continue] ExtSST */\n\twrite_biff_rec(C, \"EOF\");\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet = _sheets[j] || ({});\n\t\twrite_biff_rec(B, \"BoundSheet8\", write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn __toBuffer([out]);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb, opts) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\to.cellXfs = [];\n\to.Strings = []; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn __toBuffer([bufs]);\n}\n\nfunction write_biff_buf(wb, opts) {\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nvar HTML_ = (function() {\n\tfunction html_to_sheet(str, _opts) {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar ws = opts.dense ? ([]) : ({});\n\t\tvar mtch = str.match(/\");\n\t\tvar mtch2 = str.match(/<\\/table/i);\n\t\tvar i = mtch.index, j = mtch2 && mtch2.index || str.length;\n\t\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"
\");\n\t\tvar R = -1, C = 0, RS = 0, CS = 0;\n\t\tvar range = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\t\tvar merges = [];\n\t\tfor(i = 0; i < rows.length; ++i) {\n\t\t\tvar row = rows[i].trim();\n\t\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\t\tif(hd == \"
/i);\n\t\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\t\tvar cell = cells[j].trim();\n\t\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\t\tvar _t = tag.t || \"\";\n\t\t\t\t/* TODO: generate stub cells */\n\t\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\t\tm = htmldecode(m);\n\t\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\t\tif(!m.length) continue;\n\t\t\t\tvar o = {t:'s', v:m};\n\t\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(m)});\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\t\tC += CS;\n\t\t\t}\n\t\t}\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\tfunction html_to_book(str, opts) {\n\t\treturn sheet_to_workbook(html_to_sheet(str, opts), opts);\n\t}\n\tfunction make_html_row(ws, r, R, o) {\n\t\tvar M = (ws['!merges'] ||[]);\n\t\tvar oo = [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tvar RS = 0, CS = 0;\n\t\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t\t}\n\t\t\tif(RS < 0) continue;\n\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\tvar cell = o.dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\tvar sp = {};\n\t\t\tif(RS > 1) sp.rowspan = RS;\n\t\t\tif(CS > 1) sp.colspan = CS;\n\t\t\t/* TODO: html entities */\n\t\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\t\tsp.t = cell && cell.t || 'z';\n\t\t\tif(o.editable) w = '' + w + '';\n\t\t\tsp.id = \"sjs-\" + coord;\n\t\t\too.push(writextag('td', w, sp));\n\t\t}\n\t\tvar preamble = \"\";\n\t\treturn preamble + oo.join(\"\") + \"
\";\n\t}\n\tfunction make_html_preamble(ws, R, o) {\n\t\tvar out = [];\n\t\treturn out.join(\"\") + '';\n\t}\n\tvar _BEGIN = 'SheetJS Table Export';\n\tvar _END = '';\n\tfunction sheet_to_html(ws, opts/*, wb:?Workbook*/) {\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : _BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : _END;\n\t\tvar out = [header];\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tout.push(make_html_preamble(ws, r, o));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\t\tout.push(\"
\" + footer);\n\t\treturn out.join(\"\");\n\t}\n\n\treturn {\n\t\tto_workbook: html_to_book,\n\t\tto_sheet: html_to_sheet,\n\t\t_row: make_html_row,\n\t\tBEGIN: _BEGIN,\n\t\tEND: _END,\n\t\t_preamble: make_html_preamble,\n\t\tfrom_sheet: sheet_to_html\n\t};\n})();\n\nfunction parse_dom_table(table, _opts) {\n\tvar opts = _opts || {};\n\tif(DENSE != null) opts.dense = DENSE;\n\tvar ws = opts.dense ? ([]) : ({});\n\tvar rows = table.getElementsByTagName('tr');\n\tvar sheetRows = opts.sheetRows || 10000000;\n\tvar range = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar merges = [], midx = 0;\n\tvar rowinfo = [];\n\tvar _R = 0, R = 0, _C, C, RS, CS;\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts = (row.children);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v = htmldecode(elt.innerHTML);\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m = merges[midx];\n\t\t\t\tif(m.s.c == C && m.s.r <= R && R <= m.e.r) { C = m.e.c+1; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif((RS = +elt.getAttribute(\"rowspan\"))>0 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\tvar o = {t:'s', v:v};\n\t\t\tvar _t = elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)});\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\telse ws[encode_cell({c:C, r:R})] = o;\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = merges;\n\tif(rowinfo.length) ws['!rows'] = rowinfo;\n\trange.e.r = R - 1;\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction table_to_book(table, opts) {\n\treturn sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element) {\n\tvar display = '';\n\tvar get_computed_style = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document)\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element) {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nvar parse_content_xml = (function() {\n\n\t/* 6.1.2 White Space Characters */\n\tvar parse_text_p = function(text) {\n\t\treturn unescapexml(text\n\t\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t\t.replace(//g,\" \")\n\t\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t\t.replace(//g,\"\\n\")\n\t\t\t.replace(/<[^>]*>/g,\"\")\n\t\t);\n\t};\n\n\tvar number_formats = {\n\t\t/* ods name: [short ssf fmt, long ssf fmt] */\n\t\tday: [\"d\", \"dd\"],\n\t\tmonth: [\"m\", \"mm\"],\n\t\tyear: [\"y\", \"yy\"],\n\t\thours: [\"h\", \"hh\"],\n\t\tminutes: [\"m\", \"mm\"],\n\t\tseconds: [\"s\", \"ss\"],\n\t\t\"am-pm\": [\"A/P\", \"AM/PM\"],\n\t\t\"day-of-week\": [\"ddd\", \"dddd\"],\n\t\tera: [\"e\", \"ee\"],\n\t\t/* there is no native representation of LO \"Q\" format */\n\t\tquarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n\t};\n\n\treturn function pcx(d, _opts) {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state = [], tmp;\n\t\tvar tag;\n\t\tvar NFtag = {name:\"\"}, NF = \"\", pidx = 0;\n\t\tvar sheetag;\n\t\tvar rowtag;\n\t\tvar Sheets = {}, SheetNames = [];\n\t\tvar ws = opts.dense ? ([]) : ({});\n\t\tvar Rn, q;\n\t\tvar ctag = ({value:\"\"});\n\t\tvar textp = \"\", textpidx = 0, textptag;\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = {};\n\t\tvar merges = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf = [];\n\t\tvar WB = {Names:[]};\n\t\tvar atag = ({});\n\t\tvar _Ref = [\"\", \"\"];\n\t\tvar comments = [], comment = ({});\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = opts.dense ? ([]) : ({}); merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\t++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null});\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[R]) ws[R] = [];\n\t\t\t\t\t\t\tws[R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_cell({r:R,c:C})] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({});\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null});\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); }\n\t\t\t\t\t\t\tq.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) textp = unescapexml(ctag['string-value']);\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[R + rpt]) ws[R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {};\n\t\t\t\t\ttextp = \"\";\n\t\t\t\t}\n\t\t\t\tatag = ({});\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-symbol': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-style': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tNF = \"\";\n\t\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\t\t\tcase 'master-styles': break; // TODO: \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': break; // 16.2 \n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'boolean-style': break; // 16.27.23 \n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text-style': break; // 16.27.25 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]});\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': break; // 9.4.2 TODO: date1904\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) textp = (textp.length > 0 ? textp + \"\\n\" : \"\") + parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\telse { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = atag.href; delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ';\n\treturn function wso() {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\nvar write_content_ods = (function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text) {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar covered_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb, i) {\n\t\t/* Section 9 Tables */\n\t\tvar o = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']);\n\t\tvar marr = ws['!merges'] || [], mi = 0;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(R = 0; R < range.s.r; ++R) o.push(' \\n');\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(covered_cell_xml); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e':\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue;\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target; _tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt});\n\t\t\t\t}\n\t\t\t\to.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o) {\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") o.push('\\n');\n\t\telse o.push('\\n');\n\t\twrite_automatic_styles_ods(o);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb, opts) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\nvar zip = new jszip();\n\tvar f = \"\";\n\n\tvar manifest = [];\n\tvar rdf = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip.file(f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip.file(f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip.file(f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip.file(f, write_meta_ods());\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip.file(f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip.file(f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\nfunction write_sheet_index(wb, sheet) {\n\tif(!sheet) return 0;\n\tvar idx = wb.SheetNames.indexOf(sheet);\n\tif(idx == -1) throw new Error(\"Sheet not found: \" + sheet);\n\treturn idx;\n}\n\nfunction write_obj_str(factory) {\n\treturn function write_str(wb, o) {\n\t\tvar idx = write_sheet_index(wb, o.sheet);\n\t\treturn factory.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb);\n\t};\n}\n\nvar write_htm_str = write_obj_str(HTML_);\nvar write_csv_str = write_obj_str({from_sheet:sheet_to_csv});\nvar write_slk_str = write_obj_str(SYLK);\nvar write_dif_str = write_obj_str(DIF);\nvar write_prn_str = write_obj_str(PRN);\nvar write_rtf_str = write_obj_str(RTF);\nvar write_txt_str = write_obj_str({from_sheet:sheet_to_txt});\nvar write_dbf_buf = write_obj_str(DBF);\nvar write_eth_str = write_obj_str(ETH);\n\nfunction fix_opts_func(defaults) {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nvar fix_read_opts = fix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n]);\n\n\nvar fix_write_opts = fix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n]);\nfunction get_sheet_type(n) {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, stype, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!chart']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!chart'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t}\n\t\tsheets[sheet] = _ws;\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x) { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip, opts) {\n\tmake_ssf(SSF);\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) throw new Error('Unsupported NUMBERS file');\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({});\n\tvar styles = ({});\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\",dir.themes[0], opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), link, opts);\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({});\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({});\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile);\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\tfor(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tif(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts);\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: SSF.get_table()\n\t});\n\tif(opts.bookFiles) {\n\t\tout.keys = entries;\n\t\tout.files = zip.files;\n\t}\n\tif(opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts) {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\nif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\nif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb, opts) {\n\t_shapeid = 1024;\n\tif(opts.bookType == \"ods\") return write_ods(wb, opts);\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\nvar zip = new jszip();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip.file(f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\nf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip.file(f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip.file(f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\": /*\n\t\t\tf = \"xl/chartsheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip.file(f, write_cs(rId-1, f, opts, wb, wsrels));\n\t\t\tct.charts.push(f);\n\t\t\tadd_rels(wsrels, -1, \"chartsheets/sheet\" + rId + \".\" + wbext, RELS.CS);\n\t\t\tbreak; */\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip.file(f, write_ws(rId-1, f, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar cf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip.file(cf, write_cmnt(comments, cf, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tzip.file(\"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip.file(get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip.file(f, write_sst(opts.Strings, f, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip.file(f, write_wb(wb, f, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip.file(f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip.file(f, write_sty(wb, f, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip.file(f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tzip.file(\"[Content_Types].xml\", write_ct(ct, opts));\n\tzip.file('_rels/.rels', write_rels(opts.rels));\n\tzip.file('xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\nfunction firstbyte(f,o) {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3]];\n\t\tcase 'base64': x = Base64.decode(f.slice(0,24)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3)];\n}\n\nfunction read_cfb(cfb, opts) {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data, opts) {\nvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tswitch(o.type) {\n\t\tcase \"base64\": zip = new jszip(d, { base64:true }); break;\n\t\tcase \"binary\": case \"array\": zip = new jszip(d, { base64:false }); break;\n\t\tcase \"buffer\": zip = new jszip(d); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data, o) {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data, o) {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64.decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data, o) {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64.decode(d);\n\td = cptable.utils.decode(1200, d.slice(2), 'str');\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data) {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data, opts) {\n\treset_cp();\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), opts);\n\tvar d = data, n = [0,0,0,0], str = false;\n\tvar o = opts||{};\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: return read_cfb(CFB.read(d, o), o);\n\t\tcase 0x09: return parse_xlscfb(d, o);\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49: if(n[1] === 0x44) return read_wb_ID(d, o); break;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF: if(n[1] === 0xFE) { return read_utf16(d, o); } break;\n\t\tcase 0x00: if(n[1] === 0x00 && n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o); break;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t}\n\tif(n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename, opts) {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb, o) {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\n/*global encrypt_agile */\nfunction write_zip_type(wb, opts) {\n\tvar o = opts||{};\n\tvar z = write_zip(wb, o);\n\tvar oopts = {};\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = has_buf ? \"nodebuffer\" : \"string\";\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = has_buf ? \"nodebuffer\" : \"string\"; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.generate(oopts);\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o);\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(out) : out;\n}\n\nfunction write_cfb_type(wb, opts) {\n\tvar o = opts||{};\n\tvar cfb = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out, opts, bom) {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64.encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\t// $FlowIgnore\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out, opts) {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64.encode(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\t// $FlowIgnore\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts) {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64.encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSync(wb, opts) {\n\tcheck_wb(wb);\n\tvar o = opts||{};\n\tif(o.type == \"array\") { o.type = \"binary\"; var out = (writeSync(wb, o)); o.type = \"array\"; return s2ab(out); }\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(write_slk_str(wb, o), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(write_htm_str(wb, o), o);\n\t\tcase 'txt': return write_stxt_type(write_txt_str(wb, o), o);\n\t\tcase 'csv': return write_string_type(write_csv_str(wb, o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(write_dif_str(wb, o), o);\n\t\tcase 'dbf': return write_binary_type(write_dbf_buf(wb, o), o);\n\t\tcase 'prn': return write_string_type(write_prn_str(wb, o), o);\n\t\tcase 'rtf': return write_string_type(write_rtf_str(wb, o), o);\n\t\tcase 'eth': return write_string_type(write_eth_str(wb, o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb, filename, opts) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileAsync(filename, wb, opts, cb) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\nfunction make_json_row(sheet, r, R, cols, header, hdr, dense, o) {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !o.hasOwnProperty(\"raw\");\n\tvar isempty = true;\n\tvar row = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tif(val === undefined || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = void 0; break;\n\t\t\tcase 's': case 'd': case 'b': case 'n': break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = raw ? v : format_cell(val,v,o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet, opts) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols = [];\n\tvar out = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0, CC = 0;\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = 0;\n\t\t\t\tfor(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + \"_\" + (++counter);\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {\n\tvar isempty = true;\n\tvar row = [], txt = \"\", rr = encode_row(R);\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = o.dense ? (sheet[R]||[])[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+format_cell(val, null, o);\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet, opts) {\n\tvar out = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row = \"\", cols = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\tout.push(row + RS);\n\t}\n\tdelete o.dense;\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet, opts) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet) {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols = [], C;\n\tvar cmds = [];\n\tvar dense = Array.isArray(sheet);\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws, js, opts) {\n\tvar o = opts || {};\n\tvar offset = +!o.skipHeader;\n\tvar ws = _ws || ({});\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar cell;\n\tvar range = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}});\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t}\n\tvar hdr = o.header || [], C = 0;\n\n\tjs.forEach(function (JS, R) {\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tws[encode_cell({c:_C + C,r:_R + R + offset})] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = o.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t\tws[encode_cell({c:_C + C,r:_R + R + offset})] = cell = ({t:t, v:v});\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(offset) for(C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js, opts) { return sheet_add_json(null, js, opts); }\n\nvar utils = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tget_formulae: sheet_to_formulae,\n\tmake_csv: sheet_to_csv,\n\tmake_json: sheet_to_json,\n\tmake_formulae: sheet_to_formulae,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: HTML_.from_sheet,\n\tsheet_to_dif: DIF.from_sheet,\n\tsheet_to_slk: SYLK.from_sheet,\n\tsheet_to_eth: ETH.from_sheet,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json\n};\n\n(function(utils) {\nutils.consts = utils.consts || {};\nfunction add_consts(R/*Array*/) { R.forEach(function(a){ utils.consts[a[0]] = a[1]; }); }\n\nfunction get_default(x, y, z) { return x[y] != null ? x[y] : (x[y] = z); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws, R, C) {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") return ws[R] || (ws[R] = {t:'z'});\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_cell({r:R,c:C||0}));\n}\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb, sh) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank workbook object */\nutils.book_new = function() {\n\treturn { SheetNames: [], Sheets: {} };\n};\n\n/* add a worksheet to the end of a given workbook */\nutils.book_append_sheet = function(wb, ws, name) {\n\tif(!name) for(var i = 1; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name) throw new Error(\"Too many worksheets\");\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n};\n\n/* set sheet visibility (visible/hidden/very hidden) */\nutils.book_set_sheet_visibility = function(wb, sh, vis) {\n\tget_default(wb,\"Workbook\",{});\n\tget_default(wb.Workbook,\"Sheets\",[]);\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tget_default(wb.Workbook.Sheets,idx, {});\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n};\nadd_consts([\n\t[\"SHEET_VISIBLE\", 0],\n\t[\"SHEET_HIDDEN\", 1],\n\t[\"SHEET_VERY_HIDDEN\", 2]\n]);\n\n/* set number format */\nutils.cell_set_number_format = function(cell, fmt) {\n\tcell.z = fmt;\n\treturn cell;\n};\n\n/* set cell hyperlink */\nutils.cell_set_hyperlink = function(cell, target, tooltip) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target });\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n};\nutils.cell_set_internal_link = function(cell, range, tooltip) { return utils.cell_set_hyperlink(cell, \"#\" + range, tooltip); };\n\n/* add to cell comments */\nutils.cell_add_comment = function(cell, text, author) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n};\n\n/* set array formula and flush related cells */\nutils.sheet_set_array_formula = function(ws, range, formula) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) cell.f = formula;\n\t}\n\treturn ws;\n};\n\nreturn utils;\n})(utils);\n\nif(has_buf && \"function\" != 'undefined') (function() {\n\tvar Readable = __webpack_require__(/*! stream */ 4).Readable;\n\n\tvar write_csv_stream = function(sheet, opts) {\n\t\tvar stream = Readable();\n\t\tvar o = opts == null ? {} : opts;\n\t\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\t\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\t\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\t\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\t\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\t\tvar row = \"\", cols = [];\n\t\to.dense = Array.isArray(sheet);\n\t\tvar colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n\t\tvar rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\t\tvar R = r.s.r;\n\t\tvar BOM = false;\n\t\tstream._read = function() {\n\t\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\t\tif(R > r.e.r) return stream.push(null);\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\t++R;\n\t\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\t\tif(row != null) {\n\t\t\t\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\t\t\t\tstream.push(row + RS);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tvar write_html_stream = function(ws, opts) {\n\t\tvar stream = Readable();\n\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : HTML_.BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : HTML_.END;\n\t\tstream.push(header);\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tstream.push(HTML_._preamble(ws, r, o));\n\t\tvar R = r.s.r;\n\t\tvar end = false;\n\t\tstream._read = function() {\n\t\t\tif(R > r.e.r) {\n\t\t\t\tif(!end) { end = true; stream.push(\"
\" + footer); }\n\t\t\t\treturn stream.push(null);\n\t\t\t}\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\tstream.push(HTML_._row(ws, r, R, o));\n\t\t\t\t++R;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tvar write_json_stream = function(sheet, opts) {\n\t\tvar stream = Readable({objectMode:true});\n\n\t\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\t\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=\"\";\n\t\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tvar o = opts || {};\n\t\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\t\tif(o.header === 1) header = 1;\n\t\telse if(o.header === \"A\") header = 2;\n\t\telse if(Array.isArray(o.header)) header = 3;\n\t\tswitch(typeof range) {\n\t\t\tcase 'string': r = safe_decode_range(range); break;\n\t\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\t\tdefault: r = range;\n\t\t}\n\t\tif(header > 0) offset = 0;\n\t\tvar rr = encode_row(r.s.r);\n\t\tvar cols = [];\n\t\tvar counter = 0;\n\t\tvar dense = Array.isArray(sheet);\n\t\tvar R = r.s.r, C = 0, CC = 0;\n\t\tif(dense && !sheet[R]) sheet[R] = [];\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tcols[C] = encode_col(C);\n\t\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\t\tswitch(header) {\n\t\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\t\tdefault:\n\t\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tfor(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + \"_\" + (++counter);\n\t\t\t\t\thdr[C] = vv;\n\t\t\t}\n\t\t}\n\t\tR = r.s.r + offset;\n\t\tstream._read = function() {\n\t\t\tif(R > r.e.r) return stream.push(null);\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\t//if ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\t\t\t++R;\n\t\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\t\tstream.push(row.row);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tXLSX.stream = {\n\t\tto_json: write_json_stream,\n\t\tto_html: write_html_stream,\n\t\tto_csv: write_csv_stream\n\t};\n})();\n\nXLSX.parse_xlscfb = parse_xlscfb;\nXLSX.parse_ods = parse_ods;\nXLSX.parse_fods = parse_fods;\nXLSX.write_ods = write_ods;\nXLSX.parse_zip = parse_zip;\nXLSX.read = readSync; //xlsread\nXLSX.readFile = readFileSync; //readFile\nXLSX.readFileSync = readFileSync;\nXLSX.write = writeSync;\nXLSX.writeFile = writeFileSync;\nXLSX.writeFileSync = writeFileSync;\nXLSX.writeFileAsync = writeFileAsync;\nXLSX.utils = utils;\nXLSX.SSF = SSF;\nXLSX.CFB = CFB;\n}\n/*global define */\nif(true) make_xlsx_lib(exports);\nelse {}\n/*exported XLS, ODS */\nvar XLS = XLSX, ODS = XLSX;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ \"./node_modules/node-libs-browser/mock/process.js\")))\n\n//# sourceURL=webpack:///./node_modules/xlsx/xlsx.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/Element.js":
/*!*********************************************!*\
!*** ./node_modules/zrender/lib/Element.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var guid = __webpack_require__(/*! ./core/guid */ \"./node_modules/zrender/lib/core/guid.js\");\n\nvar Eventful = __webpack_require__(/*! ./mixin/Eventful */ \"./node_modules/zrender/lib/mixin/Eventful.js\");\n\nvar Transformable = __webpack_require__(/*! ./mixin/Transformable */ \"./node_modules/zrender/lib/mixin/Transformable.js\");\n\nvar Animatable = __webpack_require__(/*! ./mixin/Animatable */ \"./node_modules/zrender/lib/mixin/Animatable.js\");\n\nvar zrUtil = __webpack_require__(/*! ./core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\n/**\n * @alias module:zrender/Element\n * @constructor\n * @extends {module:zrender/mixin/Animatable}\n * @extends {module:zrender/mixin/Transformable}\n * @extends {module:zrender/mixin/Eventful}\n */\nvar Element = function (opts) {\n // jshint ignore:line\n Transformable.call(this, opts);\n Eventful.call(this, opts);\n Animatable.call(this, opts);\n /**\n * 画布元素ID\n * @type {string}\n */\n\n this.id = opts.id || guid();\n};\n\nElement.prototype = {\n /**\n * 元素类型\n * Element type\n * @type {string}\n */\n type: 'element',\n\n /**\n * 元素名字\n * Element name\n * @type {string}\n */\n name: '',\n\n /**\n * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值\n * ZRender instance will be assigned when element is associated with zrender\n * @name module:/zrender/Element#__zr\n * @type {module:zrender/ZRender}\n */\n __zr: null,\n\n /**\n * 图形是否忽略,为true时忽略图形的绘制以及事件触发\n * If ignore drawing and events of the element object\n * @name module:/zrender/Element#ignore\n * @type {boolean}\n * @default false\n */\n ignore: false,\n\n /**\n * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪\n * 该路径会继承被裁减对象的变换\n * @type {module:zrender/graphic/Path}\n * @see http://www.w3.org/TR/2dcontext/#clipping-region\n * @readOnly\n */\n clipPath: null,\n\n /**\n * 是否是 Group\n * @type {boolean}\n */\n isGroup: false,\n\n /**\n * Drift element\n * @param {number} dx dx on the global space\n * @param {number} dy dy on the global space\n */\n drift: function (dx, dy) {\n switch (this.draggable) {\n case 'horizontal':\n dy = 0;\n break;\n\n case 'vertical':\n dx = 0;\n break;\n }\n\n var m = this.transform;\n\n if (!m) {\n m = this.transform = [1, 0, 0, 1, 0, 0];\n }\n\n m[4] += dx;\n m[5] += dy;\n this.decomposeTransform();\n this.dirty(false);\n },\n\n /**\n * Hook before update\n */\n beforeUpdate: function () {},\n\n /**\n * Hook after update\n */\n afterUpdate: function () {},\n\n /**\n * Update each frame\n */\n update: function () {\n this.updateTransform();\n },\n\n /**\n * @param {Function} cb\n * @param {} context\n */\n traverse: function (cb, context) {},\n\n /**\n * @protected\n */\n attrKV: function (key, value) {\n if (key === 'position' || key === 'scale' || key === 'origin') {\n // Copy the array\n if (value) {\n var target = this[key];\n\n if (!target) {\n target = this[key] = [];\n }\n\n target[0] = value[0];\n target[1] = value[1];\n }\n } else {\n this[key] = value;\n }\n },\n\n /**\n * Hide the element\n */\n hide: function () {\n this.ignore = true;\n this.__zr && this.__zr.refresh();\n },\n\n /**\n * Show the element\n */\n show: function () {\n this.ignore = false;\n this.__zr && this.__zr.refresh();\n },\n\n /**\n * @param {string|Object} key\n * @param {*} value\n */\n attr: function (key, value) {\n if (typeof key === 'string') {\n this.attrKV(key, value);\n } else if (zrUtil.isObject(key)) {\n for (var name in key) {\n if (key.hasOwnProperty(name)) {\n this.attrKV(name, key[name]);\n }\n }\n }\n\n this.dirty(false);\n return this;\n },\n\n /**\n * @param {module:zrender/graphic/Path} clipPath\n */\n setClipPath: function (clipPath) {\n var zr = this.__zr;\n\n if (zr) {\n clipPath.addSelfToZr(zr);\n } // Remove previous clip path\n\n\n if (this.clipPath && this.clipPath !== clipPath) {\n this.removeClipPath();\n }\n\n this.clipPath = clipPath;\n clipPath.__zr = zr;\n clipPath.__clipTarget = this;\n this.dirty(false);\n },\n\n /**\n */\n removeClipPath: function () {\n var clipPath = this.clipPath;\n\n if (clipPath) {\n if (clipPath.__zr) {\n clipPath.removeSelfFromZr(clipPath.__zr);\n }\n\n clipPath.__zr = null;\n clipPath.__clipTarget = null;\n this.clipPath = null;\n this.dirty(false);\n }\n },\n\n /**\n * Add self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n * @param {module:zrender/ZRender} zr\n */\n addSelfToZr: function (zr) {\n this.__zr = zr; // 添加动画\n\n var animators = this.animators;\n\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.addAnimator(animators[i]);\n }\n }\n\n if (this.clipPath) {\n this.clipPath.addSelfToZr(zr);\n }\n },\n\n /**\n * Remove self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n * @param {module:zrender/ZRender} zr\n */\n removeSelfFromZr: function (zr) {\n this.__zr = null; // 移除动画\n\n var animators = this.animators;\n\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.removeAnimator(animators[i]);\n }\n }\n\n if (this.clipPath) {\n this.clipPath.removeSelfFromZr(zr);\n }\n }\n};\nzrUtil.mixin(Element, Animatable);\nzrUtil.mixin(Element, Transformable);\nzrUtil.mixin(Element, Eventful);\nvar _default = Element;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/Element.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/Handler.js":
/*!*********************************************!*\
!*** ./node_modules/zrender/lib/Handler.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var util = __webpack_require__(/*! ./core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\nvar vec2 = __webpack_require__(/*! ./core/vector */ \"./node_modules/zrender/lib/core/vector.js\");\n\nvar Draggable = __webpack_require__(/*! ./mixin/Draggable */ \"./node_modules/zrender/lib/mixin/Draggable.js\");\n\nvar Eventful = __webpack_require__(/*! ./mixin/Eventful */ \"./node_modules/zrender/lib/mixin/Eventful.js\");\n\nvar eventTool = __webpack_require__(/*! ./core/event */ \"./node_modules/zrender/lib/core/event.js\");\n\nvar GestureMgr = __webpack_require__(/*! ./core/GestureMgr */ \"./node_modules/zrender/lib/core/GestureMgr.js\");\n\n/**\n * [The interface between `Handler` and `HandlerProxy`]:\n *\n * The default `HandlerProxy` only support the common standard web environment\n * (e.g., standalone browser, headless browser, embed browser in mobild APP, ...).\n * But `HandlerProxy` can be replaced to support more non-standard environment\n * (e.g., mini app), or to support more feature that the default `HandlerProxy`\n * not provided (like echarts-gl did).\n * So the interface between `Handler` and `HandlerProxy` should be stable. Do not\n * make break changes util inevitable. The interface include the public methods\n * of `Handler` and the events listed in `handlerNames` below, by which `HandlerProxy`\n * drives `Handler`.\n */\n\n/**\n * [Drag outside]:\n *\n * That is, triggering `mousemove` and `mouseup` event when the pointer is out of the\n * zrender area when dragging. That is important for the improvement of the user experience\n * when dragging something near the boundary without being terminated unexpectedly.\n *\n * We originally consider to introduce new events like `pagemovemove` and `pagemouseup`\n * to resolve this issue. But some drawbacks of it is described in\n * https://github.com/ecomfe/zrender/pull/536#issuecomment-560286899\n *\n * Instead, we referenced the specifications:\n * https://www.w3.org/TR/touch-events/#the-touchmove-event\n * https://www.w3.org/TR/2014/WD-DOM-Level-3-Events-20140925/#event-type-mousemove\n * where the the mousemove/touchmove can be continue to fire if the user began a drag\n * operation and the pointer has left the boundary. (for the mouse event, browsers\n * only do it on `document` and when the pointer has left the boundary of the browser.)\n *\n * So the default `HandlerProxy` supports this feature similarly: if it is in the dragging\n * state (see `pointerCapture` in `HandlerProxy`), the `mousemove` and `mouseup` continue\n * to fire until release the pointer. That is implemented by listen to those event on\n * `document`.\n * If we implement some other `HandlerProxy` only for touch device, that would be easier.\n * The touch event support this feature by default.\n *\n * Note:\n * There might be some cases that the mouse event can not be\n * received on `document`. For example,\n * (A) `useCapture` is not supported and some user defined event listeners on the ancestor\n * of zr dom throw Error .\n * (B) `useCapture` is not supported Some user defined event listeners on the ancestor of\n * zr dom call `stopPropagation`.\n * In these cases, the `mousemove` event might be keep triggered event\n * if the mouse is released. We try to reduce the side-effect in those cases.\n * That is, do nothing (especially, `findHover`) in those cases. See `isOutsideBoundary`.\n *\n * Note:\n * If `HandlerProxy` listens to `document` with `useCapture`, `HandlerProxy` needs to\n * make sure `stopPropagation` and `preventDefault` doing nothing if and only if the event\n * target is not zrender dom. Becuase it is dangerous to enable users to call them in\n * `document` capture phase to prevent the propagation to any listener of the webpage.\n * But they are needed to work when the pointer inside the zrender dom.\n */\nvar SILENT = 'silent';\n\nfunction makeEventPacket(eveType, targetInfo, event) {\n return {\n type: eveType,\n event: event,\n // target can only be an element that is not silent.\n target: targetInfo.target,\n // topTarget can be a silent element.\n topTarget: targetInfo.topTarget,\n cancelBubble: false,\n offsetX: event.zrX,\n offsetY: event.zrY,\n gestureEvent: event.gestureEvent,\n pinchX: event.pinchX,\n pinchY: event.pinchY,\n pinchScale: event.pinchScale,\n wheelDelta: event.zrDelta,\n zrByTouch: event.zrByTouch,\n which: event.which,\n stop: stopEvent\n };\n}\n\nfunction stopEvent() {\n eventTool.stop(this.event);\n}\n\nfunction EmptyProxy() {}\n\nEmptyProxy.prototype.dispose = function () {};\n\nvar handlerNames = ['click', 'dblclick', 'mousewheel', 'mouseout', 'mouseup', 'mousedown', 'mousemove', 'contextmenu'];\n/**\n * @alias module:zrender/Handler\n * @constructor\n * @extends module:zrender/mixin/Eventful\n * @param {module:zrender/Storage} storage Storage instance.\n * @param {module:zrender/Painter} painter Painter instance.\n * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance.\n * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()).\n */\n\nvar Handler = function (storage, painter, proxy, painterRoot) {\n Eventful.call(this);\n this.storage = storage;\n this.painter = painter;\n this.painterRoot = painterRoot;\n proxy = proxy || new EmptyProxy();\n /**\n * Proxy of event. can be Dom, WebGLSurface, etc.\n */\n\n this.proxy = null;\n /**\n * {target, topTarget, x, y}\n * @private\n * @type {Object}\n */\n\n this._hovered = {};\n /**\n * @private\n * @type {Date}\n */\n\n this._lastTouchMoment;\n /**\n * @private\n * @type {number}\n */\n\n this._lastX;\n /**\n * @private\n * @type {number}\n */\n\n this._lastY;\n /**\n * @private\n * @type {module:zrender/core/GestureMgr}\n */\n\n this._gestureMgr;\n Draggable.call(this);\n this.setHandlerProxy(proxy);\n};\n\nHandler.prototype = {\n constructor: Handler,\n setHandlerProxy: function (proxy) {\n if (this.proxy) {\n this.proxy.dispose();\n }\n\n if (proxy) {\n util.each(handlerNames, function (name) {\n proxy.on && proxy.on(name, this[name], this);\n }, this); // Attach handler\n\n proxy.handler = this;\n }\n\n this.proxy = proxy;\n },\n mousemove: function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var lastHovered = this._hovered;\n var lastHoveredTarget = lastHovered.target; // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call\n // (like 'setOption' or 'dispatchAction') in event handlers, we should find\n // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.\n // See #6198.\n\n if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n lastHoveredTarget = lastHovered.target;\n }\n\n var hovered = this._hovered = isOutside ? {\n x: x,\n y: y\n } : this.findHover(x, y);\n var hoveredTarget = hovered.target;\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default'); // Mouse out on previous hovered element\n\n if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(lastHovered, 'mouseout', event);\n } // Mouse moving on one element\n\n\n this.dispatchToElement(hovered, 'mousemove', event); // Mouse over on a new element\n\n if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(hovered, 'mouseover', event);\n }\n },\n mouseout: function (event) {\n var eventControl = event.zrEventControl;\n var zrIsToLocalDOM = event.zrIsToLocalDOM;\n\n if (eventControl !== 'only_globalout') {\n this.dispatchToElement(this._hovered, 'mouseout', event);\n }\n\n if (eventControl !== 'no_globalout') {\n // FIXME: if the pointer moving from the extra doms to realy \"outside\",\n // the `globalout` should have been triggered. But currently not.\n !zrIsToLocalDOM && this.trigger('globalout', {\n type: 'globalout',\n event: event\n });\n }\n },\n\n /**\n * Resize\n */\n resize: function (event) {\n this._hovered = {};\n },\n\n /**\n * Dispatch event\n * @param {string} eventName\n * @param {event=} eventArgs\n */\n dispatch: function (eventName, eventArgs) {\n var handler = this[eventName];\n handler && handler.call(this, eventArgs);\n },\n\n /**\n * Dispose\n */\n dispose: function () {\n this.proxy.dispose();\n this.storage = this.proxy = this.painter = null;\n },\n\n /**\n * 设置默认的cursor style\n * @param {string} [cursorStyle='default'] 例如 crosshair\n */\n setCursorStyle: function (cursorStyle) {\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(cursorStyle);\n },\n\n /**\n * 事件分发代理\n *\n * @private\n * @param {Object} targetInfo {target, topTarget} 目标图形元素\n * @param {string} eventName 事件名称\n * @param {Object} event 事件对象\n */\n dispatchToElement: function (targetInfo, eventName, event) {\n targetInfo = targetInfo || {};\n var el = targetInfo.target;\n\n if (el && el.silent) {\n return;\n }\n\n var eventHandler = 'on' + eventName;\n var eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n while (el) {\n el[eventHandler] && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));\n el.trigger(eventName, eventPacket);\n el = el.parent;\n\n if (eventPacket.cancelBubble) {\n break;\n }\n }\n\n if (!eventPacket.cancelBubble) {\n // 冒泡到顶级 zrender 对象\n this.trigger(eventName, eventPacket); // 分发事件到用户自定义层\n // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在\n\n this.painter && this.painter.eachOtherLayer(function (layer) {\n if (typeof layer[eventHandler] === 'function') {\n layer[eventHandler].call(layer, eventPacket);\n }\n\n if (layer.trigger) {\n layer.trigger(eventName, eventPacket);\n }\n });\n }\n },\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {module:zrender/graphic/Displayable} exclude\n * @return {model:zrender/Element}\n * @method\n */\n findHover: function (x, y, exclude) {\n var list = this.storage.getDisplayList();\n var out = {\n x: x,\n y: y\n };\n\n for (var i = list.length - 1; i >= 0; i--) {\n var hoverCheckResult;\n\n if (list[i] !== exclude // getDisplayList may include ignored item in VML mode\n && !list[i].ignore && (hoverCheckResult = isHover(list[i], x, y))) {\n !out.topTarget && (out.topTarget = list[i]);\n\n if (hoverCheckResult !== SILENT) {\n out.target = list[i];\n break;\n }\n }\n }\n\n return out;\n },\n processGesture: function (event, stage) {\n if (!this._gestureMgr) {\n this._gestureMgr = new GestureMgr();\n }\n\n var gestureMgr = this._gestureMgr;\n stage === 'start' && gestureMgr.clear();\n var gestureInfo = gestureMgr.recognize(event, this.findHover(event.zrX, event.zrY, null).target, this.proxy.dom);\n stage === 'end' && gestureMgr.clear(); // Do not do any preventDefault here. Upper application do that if necessary.\n\n if (gestureInfo) {\n var type = gestureInfo.type;\n event.gestureEvent = type;\n this.dispatchToElement({\n target: gestureInfo.target\n }, type, gestureInfo.event);\n }\n }\n}; // Common handlers\n\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n Handler.prototype[name] = function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var hovered;\n var hoveredTarget;\n\n if (name !== 'mouseup' || !isOutside) {\n // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n hovered = this.findHover(x, y);\n hoveredTarget = hovered.target;\n }\n\n if (name === 'mousedown') {\n this._downEl = hoveredTarget;\n this._downPoint = [event.zrX, event.zrY]; // In case click triggered before mouseup\n\n this._upEl = hoveredTarget;\n } else if (name === 'mouseup') {\n this._upEl = hoveredTarget;\n } else if (name === 'click') {\n if (this._downEl !== this._upEl // Original click event is triggered on the whole canvas element,\n // including the case that `mousedown` - `mousemove` - `mouseup`,\n // which should be filtered, otherwise it will bring trouble to\n // pan and zoom.\n || !this._downPoint // Arbitrary value\n || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4) {\n return;\n }\n\n this._downPoint = null;\n }\n\n this.dispatchToElement(hovered, name, event);\n };\n});\n\nfunction isHover(displayable, x, y) {\n if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n var el = displayable;\n var isSilent;\n\n while (el) {\n // If clipped by ancestor.\n // FIXME: If clipPath has neither stroke nor fill,\n // el.clipPath.contain(x, y) will always return false.\n if (el.clipPath && !el.clipPath.contain(x, y)) {\n return false;\n }\n\n if (el.silent) {\n isSilent = true;\n }\n\n el = el.parent;\n }\n\n return isSilent ? SILENT : true;\n }\n\n return false;\n}\n/**\n * See [Drag outside].\n */\n\n\nfunction isOutsideBoundary(handlerInstance, x, y) {\n var painter = handlerInstance.painter;\n return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight();\n}\n\nutil.mixin(Handler, Eventful);\nutil.mixin(Handler, Draggable);\nvar _default = Handler;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/Handler.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/Layer.js":
/*!*******************************************!*\
!*** ./node_modules/zrender/lib/Layer.js ***!
\*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var util = __webpack_require__(/*! ./core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\nvar _config = __webpack_require__(/*! ./config */ \"./node_modules/zrender/lib/config.js\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar Style = __webpack_require__(/*! ./graphic/Style */ \"./node_modules/zrender/lib/graphic/Style.js\");\n\nvar Pattern = __webpack_require__(/*! ./graphic/Pattern */ \"./node_modules/zrender/lib/graphic/Pattern.js\");\n\n/**\n * @module zrender/Layer\n * @author pissang(https://www.github.com/pissang)\n */\nfunction returnFalse() {\n return false;\n}\n/**\n * 创建dom\n *\n * @inner\n * @param {string} id dom id 待用\n * @param {Painter} painter painter instance\n * @param {number} number\n */\n\n\nfunction createDom(id, painter, dpr) {\n var newDom = util.createCanvas();\n var width = painter.getWidth();\n var height = painter.getHeight();\n var newDomStyle = newDom.style;\n\n if (newDomStyle) {\n // In node or some other non-browser environment\n newDomStyle.position = 'absolute';\n newDomStyle.left = 0;\n newDomStyle.top = 0;\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n newDom.setAttribute('data-zr-dom-id', id);\n }\n\n newDom.width = width * dpr;\n newDom.height = height * dpr;\n return newDom;\n}\n/**\n * @alias module:zrender/Layer\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @param {string} id\n * @param {module:zrender/Painter} painter\n * @param {number} [dpr]\n */\n\n\nvar Layer = function (id, painter, dpr) {\n var dom;\n dpr = dpr || devicePixelRatio;\n\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n } // Not using isDom because in node it will return false\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n\n this.id = id;\n this.dom = dom;\n var domStyle = dom.style;\n\n if (domStyle) {\n // Not in node\n dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n\n domStyle['-webkit-user-select'] = 'none';\n domStyle['user-select'] = 'none';\n domStyle['-webkit-touch-callout'] = 'none';\n domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';\n domStyle['padding'] = 0; // eslint-disable-line dot-notation\n\n domStyle['margin'] = 0; // eslint-disable-line dot-notation\n\n domStyle['border-width'] = 0;\n }\n\n this.domBack = null;\n this.ctxBack = null;\n this.painter = painter;\n this.config = null; // Configs\n\n /**\n * 每次清空画布的颜色\n * @type {string}\n * @default 0\n */\n\n this.clearColor = 0;\n /**\n * 是否开启动态模糊\n * @type {boolean}\n * @default false\n */\n\n this.motionBlur = false;\n /**\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n * @type {number}\n * @default 0.7\n */\n\n this.lastFrameAlpha = 0.7;\n /**\n * Layer dpr\n * @type {number}\n */\n\n this.dpr = dpr;\n};\n\nLayer.prototype = {\n constructor: Layer,\n __dirty: true,\n __used: false,\n __drawIndex: 0,\n __startIndex: 0,\n __endIndex: 0,\n incremental: false,\n getElementCount: function () {\n return this.__endIndex - this.__startIndex;\n },\n initContext: function () {\n this.ctx = this.dom.getContext('2d');\n this.ctx.dpr = this.dpr;\n },\n createBackBuffer: function () {\n var dpr = this.dpr;\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n },\n\n /**\n * @param {number} width\n * @param {number} height\n */\n resize: function (width, height) {\n var dpr = this.dpr;\n var dom = this.dom;\n var domStyle = dom.style;\n var domBack = this.domBack;\n\n if (domStyle) {\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n }\n\n dom.width = width * dpr;\n dom.height = height * dpr;\n\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n },\n\n /**\n * 清空该层画布\n * @param {boolean} [clearAll]=false Clear all with out motion blur\n * @param {Color} [clearColor]\n */\n clear: function (clearAll, clearColor) {\n var dom = this.dom;\n var ctx = this.ctx;\n var width = dom.width;\n var height = dom.height;\n var clearColor = clearColor || this.clearColor;\n var haveMotionBLur = this.motionBlur && !clearAll;\n var lastFrameAlpha = this.lastFrameAlpha;\n var dpr = this.dpr;\n\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);\n }\n\n ctx.clearRect(0, 0, width, height);\n\n if (clearColor && clearColor !== 'transparent') {\n var clearColorGradientOrPattern; // Gradient\n\n if (clearColor.colorStops) {\n // Cache canvas gradient\n clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n clearColor.__canvasGradient = clearColorGradientOrPattern;\n } // Pattern\n else if (clearColor.image) {\n clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx);\n }\n\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n ctx.fillRect(0, 0, width, height);\n ctx.restore();\n }\n\n if (haveMotionBLur) {\n var domBack = this.domBack;\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, 0, 0, width, height);\n ctx.restore();\n }\n }\n};\nvar _default = Layer;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/Layer.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/Painter.js":
/*!*********************************************!*\
!*** ./node_modules/zrender/lib/Painter.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var _config = __webpack_require__(/*! ./config */ \"./node_modules/zrender/lib/config.js\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar util = __webpack_require__(/*! ./core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\nvar logError = __webpack_require__(/*! ./core/log */ \"./node_modules/zrender/lib/core/log.js\");\n\nvar BoundingRect = __webpack_require__(/*! ./core/BoundingRect */ \"./node_modules/zrender/lib/core/BoundingRect.js\");\n\nvar timsort = __webpack_require__(/*! ./core/timsort */ \"./node_modules/zrender/lib/core/timsort.js\");\n\nvar Layer = __webpack_require__(/*! ./Layer */ \"./node_modules/zrender/lib/Layer.js\");\n\nvar requestAnimationFrame = __webpack_require__(/*! ./animation/requestAnimationFrame */ \"./node_modules/zrender/lib/animation/requestAnimationFrame.js\");\n\nvar Image = __webpack_require__(/*! ./graphic/Image */ \"./node_modules/zrender/lib/graphic/Image.js\");\n\nvar env = __webpack_require__(/*! ./core/env */ \"./node_modules/zrender/lib/core/env.js\");\n\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\nvar EL_AFTER_INCREMENTAL_INC = 0.01;\nvar INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer) {\n if (!layer) {\n return false;\n }\n\n if (layer.__builtin__) {\n return true;\n }\n\n if (typeof layer.resize !== 'function' || typeof layer.refresh !== 'function') {\n return false;\n }\n\n return true;\n}\n\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\n\nfunction isDisplayableCulled(el, width, height) {\n tmpRect.copy(el.getBoundingRect());\n\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\n\nfunction isClipPathChanged(clipPaths, prevClipPaths) {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (clipPaths === prevClipPaths) {\n return false;\n }\n\n if (!clipPaths || !prevClipPaths || clipPaths.length !== prevClipPaths.length) {\n return true;\n }\n\n for (var i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction doClip(clipPaths, ctx) {\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n clipPath.setTransform(ctx);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip(); // Transform back\n\n clipPath.restoreTransform(ctx);\n }\n}\n\nfunction createRoot(width, height) {\n var domRoot = document.createElement('div'); // domRoot.onselectstart = returnFalse; // Avoid page selected\n\n domRoot.style.cssText = ['position:relative', // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n // dom does not act as expected) when some of the parent dom has\n // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n // the canvas is not at the top part of the page.\n // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n // this `overflow:hidden` to avoid the bug.\n // 'overflow:hidden',\n 'width:' + width + 'px', 'height:' + height + 'px', 'padding:0', 'margin:0', 'border-width:0'].join(';') + ';';\n return domRoot;\n}\n/**\n * @alias module:zrender/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\n\n\nvar Painter = function (root, storage, opts) {\n this.type = 'canvas'; // In node environment using node-canvas\n\n var singleCanvas = !root.nodeName // In node ?\n || root.nodeName.toUpperCase() === 'CANVAS';\n this._opts = opts = util.extend({}, opts || {});\n /**\n * @type {number}\n */\n\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n /**\n * @type {boolean}\n * @private\n */\n\n this._singleCanvas = singleCanvas;\n /**\n * 绘图容器\n * @type {HTMLElement}\n */\n\n this.root = root;\n var rootStyle = root.style;\n\n if (rootStyle) {\n rootStyle['-webkit-tap-highlight-color'] = 'transparent';\n rootStyle['-webkit-user-select'] = rootStyle['user-select'] = rootStyle['-webkit-touch-callout'] = 'none';\n root.innerHTML = '';\n }\n /**\n * @type {module:zrender/Storage}\n */\n\n\n this.storage = storage;\n /**\n * @type {Array.}\n * @private\n */\n\n var zlevelList = this._zlevelList = [];\n /**\n * @type {Object.}\n * @private\n */\n\n var layers = this._layers = {};\n /**\n * @type {Object.}\n * @private\n */\n\n this._layerConfig = {};\n /**\n * zrender will do compositing when root is a canvas and have multiple zlevels.\n */\n\n this._needsManuallyCompositing = false;\n\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n var domRoot = this._domRoot = createRoot(this._width, this._height);\n root.appendChild(domRoot);\n } else {\n var width = root.width;\n var height = root.height;\n\n if (opts.width != null) {\n width = opts.width;\n }\n\n if (opts.height != null) {\n height = opts.height;\n }\n\n this.dpr = opts.devicePixelRatio || 1; // Use canvas width and height directly\n\n root.width = width * this.dpr;\n root.height = height * this.dpr;\n this._width = width;\n this._height = height; // Create layer if only one given canvas\n // Device can be specified to create a high dpi image.\n\n var mainLayer = new Layer(root, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext(); // FIXME Use canvas width and height\n // mainLayer.resize(width, height);\n\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL; // Not use common zlevel.\n\n zlevelList.push(CANVAS_ZLEVEL);\n this._domRoot = root;\n }\n /**\n * @type {module:zrender/Layer}\n * @private\n */\n\n\n this._hoverlayer = null;\n this._hoverElements = [];\n};\n\nPainter.prototype = {\n constructor: Painter,\n getType: function () {\n return 'canvas';\n },\n\n /**\n * If painter use a single canvas\n * @return {boolean}\n */\n isSingleCanvas: function () {\n return this._singleCanvas;\n },\n\n /**\n * @return {HTMLDivElement}\n */\n getViewportRoot: function () {\n return this._domRoot;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n },\n\n /**\n * 刷新\n * @param {boolean} [paintAll=false] 强制绘制所有displayable\n */\n refresh: function (paintAll) {\n var list = this.storage.getDisplayList(true);\n var zlevelList = this._zlevelList;\n this._redrawId = Math.random();\n\n this._paintList(list, paintAll, this._redrawId); // Paint custum layers\n\n\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n\n if (!layer.__builtin__ && layer.refresh) {\n var clearColor = i === 0 ? this._backgroundColor : null;\n layer.refresh(clearColor);\n }\n }\n\n this.refreshHover();\n return this;\n },\n addHover: function (el, hoverStyle) {\n if (el.__hoverMir) {\n return;\n }\n\n var elMirror = new el.constructor({\n style: el.style,\n shape: el.shape,\n z: el.z,\n z2: el.z2,\n silent: el.silent\n });\n elMirror.__from = el;\n el.__hoverMir = elMirror;\n hoverStyle && elMirror.setStyle(hoverStyle);\n\n this._hoverElements.push(elMirror);\n\n return elMirror;\n },\n removeHover: function (el) {\n var elMirror = el.__hoverMir;\n var hoverElements = this._hoverElements;\n var idx = util.indexOf(hoverElements, elMirror);\n\n if (idx >= 0) {\n hoverElements.splice(idx, 1);\n }\n\n el.__hoverMir = null;\n },\n clearHover: function (el) {\n var hoverElements = this._hoverElements;\n\n for (var i = 0; i < hoverElements.length; i++) {\n var from = hoverElements[i].__from;\n\n if (from) {\n from.__hoverMir = null;\n }\n }\n\n hoverElements.length = 0;\n },\n refreshHover: function () {\n var hoverElements = this._hoverElements;\n var len = hoverElements.length;\n var hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n\n if (!len) {\n return;\n }\n\n timsort(hoverElements, this.storage.displayableSortFunc); // Use a extream large zlevel\n // FIXME?\n\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n var scope = {};\n hoverLayer.ctx.save();\n\n for (var i = 0; i < len;) {\n var el = hoverElements[i];\n var originalEl = el.__from; // Original el is removed\n // PENDING\n\n if (!(originalEl && originalEl.__zr)) {\n hoverElements.splice(i, 1);\n originalEl.__hoverMir = null;\n len--;\n continue;\n }\n\n i++; // Use transform\n // FIXME style and shape ?\n\n if (!originalEl.invisible) {\n el.transform = originalEl.transform;\n el.invTransform = originalEl.invTransform;\n el.__clipPaths = originalEl.__clipPaths; // el.\n\n this._doPaintEl(el, hoverLayer, true, scope);\n }\n }\n\n hoverLayer.ctx.restore();\n },\n getHoverLayer: function () {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\n },\n _paintList: function (list, paintAll, redrawId) {\n if (this._redrawId !== redrawId) {\n return;\n }\n\n paintAll = paintAll || false;\n\n this._updateLayerStatus(list);\n\n var finished = this._doPaintList(list, paintAll);\n\n if (this._needsManuallyCompositing) {\n this._compositeManually();\n }\n\n if (!finished) {\n var self = this;\n requestAnimationFrame(function () {\n self._paintList(list, paintAll, redrawId);\n });\n }\n },\n _compositeManually: function () {\n var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n var width = this._domRoot.width;\n var height = this._domRoot.height;\n ctx.clearRect(0, 0, width, height); // PENDING, If only builtin layer?\n\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n },\n _doPaintList: function (list, paintAll) {\n var layerList = [];\n\n for (var zi = 0; zi < this._zlevelList.length; zi++) {\n var zlevel = this._zlevelList[zi];\n var layer = this._layers[zlevel];\n\n if (layer.__builtin__ && layer !== this._hoverlayer && (layer.__dirty || paintAll)) {\n layerList.push(layer);\n }\n }\n\n var finished = true;\n\n for (var k = 0; k < layerList.length; k++) {\n var layer = layerList[k];\n var ctx = layer.ctx;\n var scope = {};\n ctx.save();\n var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n var useTimer = !paintAll && layer.incremental && Date.now;\n var startTime = useTimer && Date.now();\n var clearColor = layer.zlevel === this._zlevelList[0] ? this._backgroundColor : null; // All elements in this layer are cleared.\n\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor);\n } else if (start === layer.__startIndex) {\n var firstEl = list[start];\n\n if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n layer.clear(false, clearColor);\n }\n }\n\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n\n for (var i = start; i < layer.__endIndex; i++) {\n var el = list[i];\n\n this._doPaintEl(el, layer, paintAll, scope);\n\n el.__dirty = el.__dirtyText = false;\n\n if (useTimer) {\n // Date.now can be executed in 13,025,305 ops/second.\n var dTime = Date.now() - startTime; // Give 15 millisecond to draw.\n // The rest elements will be drawn in the next frame.\n\n if (dTime > 15) {\n break;\n }\n }\n }\n\n layer.__drawIndex = i;\n\n if (layer.__drawIndex < layer.__endIndex) {\n finished = false;\n }\n\n if (scope.prevElClipPaths) {\n // Needs restore the state. If last drawn element is in the clipping area.\n ctx.restore();\n }\n\n ctx.restore();\n }\n\n if (env.wxa) {\n // Flush for weixin application\n util.each(this._layers, function (layer) {\n if (layer && layer.ctx && layer.ctx.draw) {\n layer.ctx.draw();\n }\n });\n }\n\n return finished;\n },\n _doPaintEl: function (el, currentLayer, forcePaint, scope) {\n var ctx = currentLayer.ctx;\n var m = el.transform;\n\n if ((currentLayer.__dirty || forcePaint) && // Ignore invisible element\n !el.invisible // Ignore transparent element\n && el.style.opacity !== 0 // Ignore scale 0 element, in some environment like node-canvas\n // Draw a scale 0 element can cause all following draw wrong\n // And setTransform with scale 0 will cause set back transform failed.\n && !(m && !m[0] && !m[3]) // Ignore culled element\n && !(el.culling && isDisplayableCulled(el, this._width, this._height))) {\n var clipPaths = el.__clipPaths;\n var prevElClipPaths = scope.prevElClipPaths; // Optimize when clipping on group with several elements\n\n if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n // If has previous clipping state, restore from it\n if (prevElClipPaths) {\n ctx.restore();\n scope.prevElClipPaths = null; // Reset prevEl since context has been restored\n\n scope.prevEl = null;\n } // New clipping state\n\n\n if (clipPaths) {\n ctx.save();\n doClip(clipPaths, ctx);\n scope.prevElClipPaths = clipPaths;\n }\n }\n\n el.beforeBrush && el.beforeBrush(ctx);\n el.brush(ctx, scope.prevEl || null);\n scope.prevEl = el;\n el.afterBrush && el.afterBrush(ctx);\n }\n },\n\n /**\n * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n * @param {number} zlevel\n * @param {boolean} virtual Virtual layer will not be inserted into dom.\n * @return {module:zrender/Layer}\n */\n getLayer: function (zlevel, virtual) {\n if (this._singleCanvas && !this._needsManuallyCompositing) {\n zlevel = CANVAS_ZLEVEL;\n }\n\n var layer = this._layers[zlevel];\n\n if (!layer) {\n // Create a new layer\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.zlevel = zlevel;\n layer.__builtin__ = true;\n\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n } // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n\n if (virtual) {\n layer.virtual = virtual;\n }\n\n this.insertLayer(zlevel, layer); // Context is created after dom inserted to document\n // Or excanvas will get 0px clientWidth and clientHeight\n\n layer.initContext();\n }\n\n return layer;\n },\n insertLayer: function (zlevel, layer) {\n var layersMap = this._layers;\n var zlevelList = this._zlevelList;\n var len = zlevelList.length;\n var prevLayer = null;\n var i = -1;\n var domRoot = this._domRoot;\n\n if (layersMap[zlevel]) {\n logError('ZLevel ' + zlevel + ' has been used already');\n return;\n } // Check if is a valid layer\n\n\n if (!isLayerValid(layer)) {\n logError('Layer of zlevel ' + zlevel + ' is not valid');\n return;\n }\n\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (zlevelList[i] < zlevel && zlevelList[i + 1] > zlevel) {\n break;\n }\n }\n\n prevLayer = layersMap[zlevelList[i]];\n }\n\n zlevelList.splice(i + 1, 0, zlevel);\n layersMap[zlevel] = layer; // Vitual layer will not directly show on the screen.\n // (It can be a WebGL layer and assigned to a ZImage element)\n // But it still under management of zrender.\n\n if (!layer.virtual) {\n if (prevLayer) {\n var prevDom = prevLayer.dom;\n\n if (prevDom.nextSibling) {\n domRoot.insertBefore(layer.dom, prevDom.nextSibling);\n } else {\n domRoot.appendChild(layer.dom);\n }\n } else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n } else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n },\n // Iterate each layer\n eachLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n },\n // Iterate each buildin layer\n eachBuiltinLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var layer;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n // Iterate each other layer except buildin layer\n eachOtherLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var layer;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n\n /**\n * 获取所有已创建的层\n * @param {Array.} [prevLayer]\n */\n getLayers: function () {\n return this._layers;\n },\n _updateLayerStatus: function (list) {\n this.eachBuiltinLayer(function (layer, z) {\n layer.__dirty = layer.__used = false;\n });\n\n function updatePrevLayer(idx) {\n if (prevLayer) {\n if (prevLayer.__endIndex !== idx) {\n prevLayer.__dirty = true;\n }\n\n prevLayer.__endIndex = idx;\n }\n }\n\n if (this._singleCanvas) {\n for (var i = 1; i < list.length; i++) {\n var el = list[i];\n\n if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n this._needsManuallyCompositing = true;\n break;\n }\n }\n }\n\n var prevLayer = null;\n var incrementalLayerCount = 0;\n var prevZlevel;\n\n for (var i = 0; i < list.length; i++) {\n var el = list[i];\n var zlevel = el.zlevel;\n var layer;\n\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n } // TODO Not use magic number on zlevel.\n // Each layer with increment element can be separated to 3 layers.\n // (Other Element drawn after incremental element)\n // -----------------zlevel + EL_AFTER_INCREMENTAL_INC--------------------\n // (Incremental element)\n // ----------------------zlevel + INCREMENTAL_INC------------------------\n // (Element drawn before incremental element)\n // --------------------------------zlevel--------------------------------\n\n\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n } else {\n layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);\n }\n\n if (!layer.__builtin__) {\n logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n }\n\n if (layer !== prevLayer) {\n layer.__used = true;\n\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n\n layer.__startIndex = i;\n\n if (!layer.incremental) {\n layer.__drawIndex = i;\n } else {\n // Mark layer draw index needs to update.\n layer.__drawIndex = -1;\n }\n\n updatePrevLayer(i);\n prevLayer = layer;\n }\n\n if (el.__dirty) {\n layer.__dirty = true;\n\n if (layer.incremental && layer.__drawIndex < 0) {\n // Start draw from the first dirty element.\n layer.__drawIndex = i;\n }\n }\n }\n\n updatePrevLayer(i);\n this.eachBuiltinLayer(function (layer, z) {\n // Used in last frame but not in this frame. Needs clear\n if (!layer.__used && layer.getElementCount() > 0) {\n layer.__dirty = true;\n layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n } // For incremental layer. In case start index changed and no elements are dirty.\n\n\n if (layer.__dirty && layer.__drawIndex < 0) {\n layer.__drawIndex = layer.__startIndex;\n }\n });\n },\n\n /**\n * 清除hover层外所有内容\n */\n clear: function () {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n },\n _clearLayer: function (layer) {\n layer.clear();\n },\n setBackgroundColor: function (backgroundColor) {\n this._backgroundColor = backgroundColor;\n },\n\n /**\n * 修改指定zlevel的绘制参数\n *\n * @param {string} zlevel\n * @param {Object} config 配置对象\n * @param {string} [config.clearColor=0] 每次清空画布的颜色\n * @param {string} [config.motionBlur=false] 是否开启动态模糊\n * @param {number} [config.lastFrameAlpha=0.7]\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n */\n configLayer: function (zlevel, config) {\n if (config) {\n var layerConfig = this._layerConfig;\n\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n } else {\n util.merge(layerConfig[zlevel], config, true);\n }\n\n for (var i = 0; i < this._zlevelList.length; i++) {\n var _zlevel = this._zlevelList[i]; // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n\n if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n var layer = this._layers[_zlevel];\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n }\n },\n\n /**\n * 删除指定层\n * @param {number} zlevel 层所在的zlevel\n */\n delLayer: function (zlevel) {\n var layers = this._layers;\n var zlevelList = this._zlevelList;\n var layer = layers[zlevel];\n\n if (!layer) {\n return;\n }\n\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n },\n\n /**\n * 区域大小变化后重绘\n */\n resize: function (width, height) {\n if (!this._domRoot.style) {\n // Maybe in node or worker\n if (width == null || height == null) {\n return;\n }\n\n this._width = width;\n this._height = height;\n this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n } else {\n var domRoot = this._domRoot; // FIXME Why ?\n\n domRoot.style.display = 'none'; // Save input w/h\n\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n domRoot.style.display = ''; // 优化没有实际改变的resize\n\n if (this._width !== width || height !== this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n\n for (var id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n\n util.each(this._progressiveLayers, function (layer) {\n layer.resize(width, height);\n });\n this.refresh(true);\n }\n\n this._width = width;\n this._height = height;\n }\n\n return this;\n },\n\n /**\n * 清除单独的一个层\n * @param {number} zlevel\n */\n clearLayer: function (zlevel) {\n var layer = this._layers[zlevel];\n\n if (layer) {\n layer.clear();\n }\n },\n\n /**\n * 释放\n */\n dispose: function () {\n this.root.innerHTML = '';\n this.root = this.storage = this._domRoot = this._layers = null;\n },\n\n /**\n * Get canvas which has all thing rendered\n * @param {Object} opts\n * @param {string} [opts.backgroundColor]\n * @param {number} [opts.pixelRatio]\n */\n getRenderedCanvas: function (opts) {\n opts = opts || {};\n\n if (this._singleCanvas && !this._compositeManually) {\n return this._layers[CANVAS_ZLEVEL].dom;\n }\n\n var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n imageLayer.initContext();\n imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n if (opts.pixelRatio <= this.dpr) {\n this.refresh();\n var width = imageLayer.dom.width;\n var height = imageLayer.dom.height;\n var ctx = imageLayer.ctx;\n this.eachLayer(function (layer) {\n if (layer.__builtin__) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n } else if (layer.renderToCanvas) {\n imageLayer.ctx.save();\n layer.renderToCanvas(imageLayer.ctx);\n imageLayer.ctx.restore();\n }\n });\n } else {\n // PENDING, echarts-gl and incremental rendering.\n var scope = {};\n var displayList = this.storage.getDisplayList(true);\n\n for (var i = 0; i < displayList.length; i++) {\n var el = displayList[i];\n\n this._doPaintEl(el, imageLayer, true, scope);\n }\n }\n\n return imageLayer.dom;\n },\n\n /**\n * 获取绘图区域宽度\n */\n getWidth: function () {\n return this._width;\n },\n\n /**\n * 获取绘图区域高度\n */\n getHeight: function () {\n return this._height;\n },\n _getSize: function (whIdx) {\n var opts = this._opts;\n var wh = ['width', 'height'][whIdx];\n var cwh = ['clientWidth', 'clientHeight'][whIdx];\n var plt = ['paddingLeft', 'paddingTop'][whIdx];\n var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh]);\n }\n\n var root = this.root; // IE8 does not support getComputedStyle, but it use VML.\n\n var stl = document.defaultView.getComputedStyle(root);\n return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) | 0;\n },\n pathToImage: function (path, dpr) {\n dpr = dpr || this.dpr;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var rect = path.getBoundingRect();\n var style = path.style;\n var shadowBlurSize = style.shadowBlur * dpr;\n var shadowOffsetX = style.shadowOffsetX * dpr;\n var shadowOffsetY = style.shadowOffsetY * dpr;\n var lineWidth = style.hasStroke() ? style.lineWidth : 0;\n var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n var width = rect.width + leftMargin + rightMargin;\n var height = rect.height + topMargin + bottomMargin;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n ctx.dpr = dpr;\n var pathTransform = {\n position: path.position,\n rotation: path.rotation,\n scale: path.scale\n };\n path.position = [leftMargin - rect.x, topMargin - rect.y];\n path.rotation = 0;\n path.scale = [1, 1];\n path.updateTransform();\n\n if (path) {\n path.brush(ctx);\n }\n\n var ImageShape = Image;\n var imgShape = new ImageShape({\n style: {\n x: 0,\n y: 0,\n image: canvas\n }\n });\n\n if (pathTransform.position != null) {\n imgShape.position = path.position = pathTransform.position;\n }\n\n if (pathTransform.rotation != null) {\n imgShape.rotation = path.rotation = pathTransform.rotation;\n }\n\n if (pathTransform.scale != null) {\n imgShape.scale = path.scale = pathTransform.scale;\n }\n\n return imgShape;\n }\n};\nvar _default = Painter;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/Painter.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/Storage.js":
/*!*********************************************!*\
!*** ./node_modules/zrender/lib/Storage.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var util = __webpack_require__(/*! ./core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\nvar env = __webpack_require__(/*! ./core/env */ \"./node_modules/zrender/lib/core/env.js\");\n\nvar Group = __webpack_require__(/*! ./container/Group */ \"./node_modules/zrender/lib/container/Group.js\");\n\nvar timsort = __webpack_require__(/*! ./core/timsort */ \"./node_modules/zrender/lib/core/timsort.js\");\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nfunction shapeCompareFunc(a, b) {\n if (a.zlevel === b.zlevel) {\n if (a.z === b.z) {\n // if (a.z2 === b.z2) {\n // // FIXME Slow has renderidx compare\n // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement\n // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012\n // return a.__renderidx - b.__renderidx;\n // }\n return a.z2 - b.z2;\n }\n\n return a.z - b.z;\n }\n\n return a.zlevel - b.zlevel;\n}\n/**\n * 内容仓库 (M)\n * @alias module:zrender/Storage\n * @constructor\n */\n\n\nvar Storage = function () {\n // jshint ignore:line\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n};\n\nStorage.prototype = {\n constructor: Storage,\n\n /**\n * @param {Function} cb\n *\n */\n traverse: function (cb, context) {\n for (var i = 0; i < this._roots.length; i++) {\n this._roots[i].traverse(cb, context);\n }\n },\n\n /**\n * 返回所有图形的绘制队列\n * @param {boolean} [update=false] 是否在返回前更新该数组\n * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效\n *\n * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList}\n * @return {Array.}\n */\n getDisplayList: function (update, includeIgnore) {\n includeIgnore = includeIgnore || false;\n\n if (update) {\n this.updateDisplayList(includeIgnore);\n }\n\n return this._displayList;\n },\n\n /**\n * 更新图形的绘制队列。\n * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,\n * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列\n * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组\n */\n updateDisplayList: function (includeIgnore) {\n this._displayListLen = 0;\n var roots = this._roots;\n var displayList = this._displayList;\n\n for (var i = 0, len = roots.length; i < len; i++) {\n this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n }\n\n displayList.length = this._displayListLen;\n env.canvasSupported && timsort(displayList, shapeCompareFunc);\n },\n _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n\n el.beforeUpdate();\n\n if (el.__dirty) {\n el.update();\n }\n\n el.afterUpdate();\n var userSetClipPath = el.clipPath;\n\n if (userSetClipPath) {\n // FIXME 效率影响\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n } else {\n clipPaths = [];\n }\n\n var currentClipPath = userSetClipPath;\n var parentClipPath = el; // Recursively add clip path\n\n while (currentClipPath) {\n // clipPath 的变换是基于使用这个 clipPath 的元素\n currentClipPath.parent = parentClipPath;\n currentClipPath.updateTransform();\n clipPaths.push(currentClipPath);\n parentClipPath = currentClipPath;\n currentClipPath = currentClipPath.clipPath;\n }\n }\n\n if (el.isGroup) {\n var children = el._children;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i]; // Force to mark as dirty if group is dirty\n // FIXME __dirtyPath ?\n\n if (el.__dirty) {\n child.__dirty = true;\n }\n\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n } // Mark group clean here\n\n\n el.__dirty = false;\n } else {\n el.__clipPaths = clipPaths;\n this._displayList[this._displayListLen++] = el;\n }\n },\n\n /**\n * 添加图形(Shape)或者组(Group)到根节点\n * @param {module:zrender/Element} el\n */\n addRoot: function (el) {\n if (el.__storage === this) {\n return;\n }\n\n if (el instanceof Group) {\n el.addChildrenToStorage(this);\n }\n\n this.addToStorage(el);\n\n this._roots.push(el);\n },\n\n /**\n * 删除指定的图形(Shape)或者组(Group)\n * @param {string|Array.} [el] 如果为空清空整个Storage\n */\n delRoot: function (el) {\n if (el == null) {\n // 不指定el清空\n for (var i = 0; i < this._roots.length; i++) {\n var root = this._roots[i];\n\n if (root instanceof Group) {\n root.delChildrenFromStorage(this);\n }\n }\n\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n return;\n }\n\n if (el instanceof Array) {\n for (var i = 0, l = el.length; i < l; i++) {\n this.delRoot(el[i]);\n }\n\n return;\n }\n\n var idx = util.indexOf(this._roots, el);\n\n if (idx >= 0) {\n this.delFromStorage(el);\n\n this._roots.splice(idx, 1);\n\n if (el instanceof Group) {\n el.delChildrenFromStorage(this);\n }\n }\n },\n addToStorage: function (el) {\n if (el) {\n el.__storage = this;\n el.dirty(false);\n }\n\n return this;\n },\n delFromStorage: function (el) {\n if (el) {\n el.__storage = null;\n }\n\n return this;\n },\n\n /**\n * 清空并且释放Storage\n */\n dispose: function () {\n this._renderList = this._roots = null;\n },\n displayableSortFunc: shapeCompareFunc\n};\nvar _default = Storage;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/Storage.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/animation/Animation.js":
/*!*********************************************************!*\
!*** ./node_modules/zrender/lib/animation/Animation.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var util = __webpack_require__(/*! ../core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\nvar _event = __webpack_require__(/*! ../core/event */ \"./node_modules/zrender/lib/core/event.js\");\n\nvar Dispatcher = _event.Dispatcher;\n\nvar requestAnimationFrame = __webpack_require__(/*! ./requestAnimationFrame */ \"./node_modules/zrender/lib/animation/requestAnimationFrame.js\");\n\nvar Animator = __webpack_require__(/*! ./Animator */ \"./node_modules/zrender/lib/animation/Animator.js\");\n\n/**\n * Animation main class, dispatch and manage all animation controllers\n *\n * @module zrender/animation/Animation\n * @author pissang(https://github.com/pissang)\n */\n// TODO Additive animation\n// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/\n// https://developer.apple.com/videos/wwdc2014/#236\n\n/**\n * @typedef {Object} IZRenderStage\n * @property {Function} update\n */\n\n/**\n * @alias module:zrender/animation/Animation\n * @constructor\n * @param {Object} [options]\n * @param {Function} [options.onframe]\n * @param {IZRenderStage} [options.stage]\n * @example\n * var animation = new Animation();\n * var obj = {\n * x: 100,\n * y: 100\n * };\n * animation.animate(node.position)\n * .when(1000, {\n * x: 500,\n * y: 500\n * })\n * .when(2000, {\n * x: 100,\n * y: 100\n * })\n * .start('spline');\n */\nvar Animation = function (options) {\n options = options || {};\n this.stage = options.stage || {};\n\n this.onframe = options.onframe || function () {}; // private properties\n\n\n this._clips = [];\n this._running = false;\n this._time;\n this._pausedTime;\n this._pauseStart;\n this._paused = false;\n Dispatcher.call(this);\n};\n\nAnimation.prototype = {\n constructor: Animation,\n\n /**\n * Add clip\n * @param {module:zrender/animation/Clip} clip\n */\n addClip: function (clip) {\n this._clips.push(clip);\n },\n\n /**\n * Add animator\n * @param {module:zrender/animation/Animator} animator\n */\n addAnimator: function (animator) {\n animator.animation = this;\n var clips = animator.getClips();\n\n for (var i = 0; i < clips.length; i++) {\n this.addClip(clips[i]);\n }\n },\n\n /**\n * Delete animation clip\n * @param {module:zrender/animation/Clip} clip\n */\n removeClip: function (clip) {\n var idx = util.indexOf(this._clips, clip);\n\n if (idx >= 0) {\n this._clips.splice(idx, 1);\n }\n },\n\n /**\n * Delete animation clip\n * @param {module:zrender/animation/Animator} animator\n */\n removeAnimator: function (animator) {\n var clips = animator.getClips();\n\n for (var i = 0; i < clips.length; i++) {\n this.removeClip(clips[i]);\n }\n\n animator.animation = null;\n },\n _update: function () {\n var time = new Date().getTime() - this._pausedTime;\n\n var delta = time - this._time;\n var clips = this._clips;\n var len = clips.length;\n var deferredEvents = [];\n var deferredClips = [];\n\n for (var i = 0; i < len; i++) {\n var clip = clips[i];\n var e = clip.step(time, delta); // Throw out the events need to be called after\n // stage.update, like destroy\n\n if (e) {\n deferredEvents.push(e);\n deferredClips.push(clip);\n }\n } // Remove the finished clip\n\n\n for (var i = 0; i < len;) {\n if (clips[i]._needsRemove) {\n clips[i] = clips[len - 1];\n clips.pop();\n len--;\n } else {\n i++;\n }\n }\n\n len = deferredEvents.length;\n\n for (var i = 0; i < len; i++) {\n deferredClips[i].fire(deferredEvents[i]);\n }\n\n this._time = time;\n this.onframe(delta); // 'frame' should be triggered before stage, because upper application\n // depends on the sequence (e.g., echarts-stream and finish\n // event judge)\n\n this.trigger('frame', delta);\n\n if (this.stage.update) {\n this.stage.update();\n }\n },\n _startLoop: function () {\n var self = this;\n this._running = true;\n\n function step() {\n if (self._running) {\n requestAnimationFrame(step);\n !self._paused && self._update();\n }\n }\n\n requestAnimationFrame(step);\n },\n\n /**\n * Start animation.\n */\n start: function () {\n this._time = new Date().getTime();\n this._pausedTime = 0;\n\n this._startLoop();\n },\n\n /**\n * Stop animation.\n */\n stop: function () {\n this._running = false;\n },\n\n /**\n * Pause animation.\n */\n pause: function () {\n if (!this._paused) {\n this._pauseStart = new Date().getTime();\n this._paused = true;\n }\n },\n\n /**\n * Resume animation.\n */\n resume: function () {\n if (this._paused) {\n this._pausedTime += new Date().getTime() - this._pauseStart;\n this._paused = false;\n }\n },\n\n /**\n * Clear animation.\n */\n clear: function () {\n this._clips = [];\n },\n\n /**\n * Whether animation finished.\n */\n isFinished: function () {\n return !this._clips.length;\n },\n\n /**\n * Creat animator for a target, whose props can be animated.\n *\n * @param {Object} target\n * @param {Object} options\n * @param {boolean} [options.loop=false] Whether loop animation.\n * @param {Function} [options.getter=null] Get value from target.\n * @param {Function} [options.setter=null] Set value to target.\n * @return {module:zrender/animation/Animation~Animator}\n */\n // TODO Gap\n animate: function (target, options) {\n options = options || {};\n var animator = new Animator(target, options.loop, options.getter, options.setter);\n this.addAnimator(animator);\n return animator;\n }\n};\nutil.mixin(Animation, Dispatcher);\nvar _default = Animation;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/animation/Animation.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/animation/Animator.js":
/*!********************************************************!*\
!*** ./node_modules/zrender/lib/animation/Animator.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var Clip = __webpack_require__(/*! ./Clip */ \"./node_modules/zrender/lib/animation/Clip.js\");\n\nvar color = __webpack_require__(/*! ../tool/color */ \"./node_modules/zrender/lib/tool/color.js\");\n\nvar _util = __webpack_require__(/*! ../core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\nvar isArrayLike = _util.isArrayLike;\n\n/**\n * @module echarts/animation/Animator\n */\nvar arraySlice = Array.prototype.slice;\n\nfunction defaultGetter(target, key) {\n return target[key];\n}\n\nfunction defaultSetter(target, key, value) {\n target[key] = value;\n}\n/**\n * @param {number} p0\n * @param {number} p1\n * @param {number} percent\n * @return {number}\n */\n\n\nfunction interpolateNumber(p0, p1, percent) {\n return (p1 - p0) * percent + p0;\n}\n/**\n * @param {string} p0\n * @param {string} p1\n * @param {number} percent\n * @return {string}\n */\n\n\nfunction interpolateString(p0, p1, percent) {\n return percent > 0.5 ? p1 : p0;\n}\n/**\n * @param {Array} p0\n * @param {Array} p1\n * @param {number} percent\n * @param {Array} out\n * @param {number} arrDim\n */\n\n\nfunction interpolateArray(p0, p1, percent, out, arrDim) {\n var len = p0.length;\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n out[i] = interpolateNumber(p0[i], p1[i], percent);\n }\n } else {\n var len2 = len && p0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\n }\n }\n }\n} // arr0 is source array, arr1 is target array.\n// Do some preprocess to avoid error happened when interpolating from arr0 to arr1\n\n\nfunction fillArr(arr0, arr1, arrDim) {\n var arr0Len = arr0.length;\n var arr1Len = arr1.length;\n\n if (arr0Len !== arr1Len) {\n // FIXME Not work for TypedArray\n var isPreviousLarger = arr0Len > arr1Len;\n\n if (isPreviousLarger) {\n // Cut the previous\n arr0.length = arr1Len;\n } else {\n // Fill the previous\n for (var i = arr0Len; i < arr1Len; i++) {\n arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\n }\n }\n } // Handling NaN value\n\n\n var len2 = arr0[0] && arr0[0].length;\n\n for (var i = 0; i < arr0.length; i++) {\n if (arrDim === 1) {\n if (isNaN(arr0[i])) {\n arr0[i] = arr1[i];\n }\n } else {\n for (var j = 0; j < len2; j++) {\n if (isNaN(arr0[i][j])) {\n arr0[i][j] = arr1[i][j];\n }\n }\n }\n }\n}\n/**\n * @param {Array} arr0\n * @param {Array} arr1\n * @param {number} arrDim\n * @return {boolean}\n */\n\n\nfunction isArraySame(arr0, arr1, arrDim) {\n if (arr0 === arr1) {\n return true;\n }\n\n var len = arr0.length;\n\n if (len !== arr1.length) {\n return false;\n }\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n if (arr0[i] !== arr1[i]) {\n return false;\n }\n }\n } else {\n var len2 = arr0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n if (arr0[i][j] !== arr1[i][j]) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n/**\n * Catmull Rom interpolate array\n * @param {Array} p0\n * @param {Array} p1\n * @param {Array} p2\n * @param {Array} p3\n * @param {number} t\n * @param {number} t2\n * @param {number} t3\n * @param {Array} out\n * @param {number} arrDim\n */\n\n\nfunction catmullRomInterpolateArray(p0, p1, p2, p3, t, t2, t3, out, arrDim) {\n var len = p0.length;\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n out[i] = catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3);\n }\n } else {\n var len2 = p0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n out[i][j] = catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3);\n }\n }\n }\n}\n/**\n * Catmull Rom interpolate number\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} p3\n * @param {number} t\n * @param {number} t2\n * @param {number} t3\n * @return {number}\n */\n\n\nfunction catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;\n}\n\nfunction cloneValue(value) {\n if (isArrayLike(value)) {\n var len = value.length;\n\n if (isArrayLike(value[0])) {\n var ret = [];\n\n for (var i = 0; i < len; i++) {\n ret.push(arraySlice.call(value[i]));\n }\n\n return ret;\n }\n\n return arraySlice.call(value);\n }\n\n return value;\n}\n\nfunction rgba2String(rgba) {\n rgba[0] = Math.floor(rgba[0]);\n rgba[1] = Math.floor(rgba[1]);\n rgba[2] = Math.floor(rgba[2]);\n return 'rgba(' + rgba.join(',') + ')';\n}\n\nfunction getArrayDim(keyframes) {\n var lastValue = keyframes[keyframes.length - 1].value;\n return isArrayLike(lastValue && lastValue[0]) ? 2 : 1;\n}\n\nfunction createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) {\n var getter = animator._getter;\n var setter = animator._setter;\n var useSpline = easing === 'spline';\n var trackLen = keyframes.length;\n\n if (!trackLen) {\n return;\n } // Guess data type\n\n\n var firstVal = keyframes[0].value;\n var isValueArray = isArrayLike(firstVal);\n var isValueColor = false;\n var isValueString = false; // For vertices morphing\n\n var arrDim = isValueArray ? getArrayDim(keyframes) : 0;\n var trackMaxTime; // Sort keyframe as ascending\n\n keyframes.sort(function (a, b) {\n return a.time - b.time;\n });\n trackMaxTime = keyframes[trackLen - 1].time; // Percents of each keyframe\n\n var kfPercents = []; // Value of each keyframe\n\n var kfValues = [];\n var prevValue = keyframes[0].value;\n var isAllValueEqual = true;\n\n for (var i = 0; i < trackLen; i++) {\n kfPercents.push(keyframes[i].time / trackMaxTime); // Assume value is a color when it is a string\n\n var value = keyframes[i].value; // Check if value is equal, deep check if value is array\n\n if (!(isValueArray && isArraySame(value, prevValue, arrDim) || !isValueArray && value === prevValue)) {\n isAllValueEqual = false;\n }\n\n prevValue = value; // Try converting a string to a color array\n\n if (typeof value === 'string') {\n var colorArray = color.parse(value);\n\n if (colorArray) {\n value = colorArray;\n isValueColor = true;\n } else {\n isValueString = true;\n }\n }\n\n kfValues.push(value);\n }\n\n if (!forceAnimate && isAllValueEqual) {\n return;\n }\n\n var lastValue = kfValues[trackLen - 1]; // Polyfill array and NaN value\n\n for (var i = 0; i < trackLen - 1; i++) {\n if (isValueArray) {\n fillArr(kfValues[i], lastValue, arrDim);\n } else {\n if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {\n kfValues[i] = lastValue;\n }\n }\n }\n\n isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim); // Cache the key of last frame to speed up when\n // animation playback is sequency\n\n var lastFrame = 0;\n var lastFramePercent = 0;\n var start;\n var w;\n var p0;\n var p1;\n var p2;\n var p3;\n\n if (isValueColor) {\n var rgba = [0, 0, 0, 0];\n }\n\n var onframe = function (target, percent) {\n // Find the range keyframes\n // kf1-----kf2---------current--------kf3\n // find kf2 and kf3 and do interpolation\n var frame; // In the easing function like elasticOut, percent may less than 0\n\n if (percent < 0) {\n frame = 0;\n } else if (percent < lastFramePercent) {\n // Start from next key\n // PENDING start from lastFrame ?\n start = Math.min(lastFrame + 1, trackLen - 1);\n\n for (frame = start; frame >= 0; frame--) {\n if (kfPercents[frame] <= percent) {\n break;\n }\n } // PENDING really need to do this ?\n\n\n frame = Math.min(frame, trackLen - 2);\n } else {\n for (frame = lastFrame; frame < trackLen; frame++) {\n if (kfPercents[frame] > percent) {\n break;\n }\n }\n\n frame = Math.min(frame - 1, trackLen - 2);\n }\n\n lastFrame = frame;\n lastFramePercent = percent;\n var range = kfPercents[frame + 1] - kfPercents[frame];\n\n if (range === 0) {\n return;\n } else {\n w = (percent - kfPercents[frame]) / range;\n }\n\n if (useSpline) {\n p1 = kfValues[frame];\n p0 = kfValues[frame === 0 ? frame : frame - 1];\n p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1];\n p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2];\n\n if (isValueArray) {\n catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, getter(target, propName), arrDim);\n } else {\n var value;\n\n if (isValueColor) {\n value = catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, rgba, 1);\n value = rgba2String(rgba);\n } else if (isValueString) {\n // String is step(0.5)\n return interpolateString(p1, p2, w);\n } else {\n value = catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w);\n }\n\n setter(target, propName, value);\n }\n } else {\n if (isValueArray) {\n interpolateArray(kfValues[frame], kfValues[frame + 1], w, getter(target, propName), arrDim);\n } else {\n var value;\n\n if (isValueColor) {\n interpolateArray(kfValues[frame], kfValues[frame + 1], w, rgba, 1);\n value = rgba2String(rgba);\n } else if (isValueString) {\n // String is step(0.5)\n return interpolateString(kfValues[frame], kfValues[frame + 1], w);\n } else {\n value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);\n }\n\n setter(target, propName, value);\n }\n }\n };\n\n var clip = new Clip({\n target: animator._target,\n life: trackMaxTime,\n loop: animator._loop,\n delay: animator._delay,\n onframe: onframe,\n ondestroy: oneTrackDone\n });\n\n if (easing && easing !== 'spline') {\n clip.easing = easing;\n }\n\n return clip;\n}\n/**\n * @alias module:zrender/animation/Animator\n * @constructor\n * @param {Object} target\n * @param {boolean} loop\n * @param {Function} getter\n * @param {Function} setter\n */\n\n\nvar Animator = function (target, loop, getter, setter) {\n this._tracks = {};\n this._target = target;\n this._loop = loop || false;\n this._getter = getter || defaultGetter;\n this._setter = setter || defaultSetter;\n this._clipCount = 0;\n this._delay = 0;\n this._doneList = [];\n this._onframeList = [];\n this._clipList = [];\n};\n\nAnimator.prototype = {\n /**\n * Set Animation keyframe\n * @param {number} time 关键帧时间,单位是ms\n * @param {Object} props 关键帧的属性值,key-value表示\n * @return {module:zrender/animation/Animator}\n */\n when: function (time\n /* ms */\n , props) {\n var tracks = this._tracks;\n\n for (var propName in props) {\n if (!props.hasOwnProperty(propName)) {\n continue;\n }\n\n if (!tracks[propName]) {\n tracks[propName] = []; // Invalid value\n\n var value = this._getter(this._target, propName);\n\n if (value == null) {\n // zrLog('Invalid property ' + propName);\n continue;\n } // If time is 0\n // Then props is given initialize value\n // Else\n // Initialize value from current prop value\n\n\n if (time !== 0) {\n tracks[propName].push({\n time: 0,\n value: cloneValue(value)\n });\n }\n }\n\n tracks[propName].push({\n time: time,\n value: props[propName]\n });\n }\n\n return this;\n },\n\n /**\n * 添加动画每一帧的回调函数\n * @param {Function} callback\n * @return {module:zrender/animation/Animator}\n */\n during: function (callback) {\n this._onframeList.push(callback);\n\n return this;\n },\n pause: function () {\n for (var i = 0; i < this._clipList.length; i++) {\n this._clipList[i].pause();\n }\n\n this._paused = true;\n },\n resume: function () {\n for (var i = 0; i < this._clipList.length; i++) {\n this._clipList[i].resume();\n }\n\n this._paused = false;\n },\n isPaused: function () {\n return !!this._paused;\n },\n _doneCallback: function () {\n // Clear all tracks\n this._tracks = {}; // Clear all clips\n\n this._clipList.length = 0;\n var doneList = this._doneList;\n var len = doneList.length;\n\n for (var i = 0; i < len; i++) {\n doneList[i].call(this);\n }\n },\n\n /**\n * Start the animation\n * @param {string|Function} [easing]\n * 动画缓动函数,详见{@link module:zrender/animation/easing}\n * @param {boolean} forceAnimate\n * @return {module:zrender/animation/Animator}\n */\n start: function (easing, forceAnimate) {\n var self = this;\n var clipCount = 0;\n\n var oneTrackDone = function () {\n clipCount--;\n\n if (!clipCount) {\n self._doneCallback();\n }\n };\n\n var lastClip;\n\n for (var propName in this._tracks) {\n if (!this._tracks.hasOwnProperty(propName)) {\n continue;\n }\n\n var clip = createTrackClip(this, easing, oneTrackDone, this._tracks[propName], propName, forceAnimate);\n\n if (clip) {\n this._clipList.push(clip);\n\n clipCount++; // If start after added to animation\n\n if (this.animation) {\n this.animation.addClip(clip);\n }\n\n lastClip = clip;\n }\n } // Add during callback on the last clip\n\n\n if (lastClip) {\n var oldOnFrame = lastClip.onframe;\n\n lastClip.onframe = function (target, percent) {\n oldOnFrame(target, percent);\n\n for (var i = 0; i < self._onframeList.length; i++) {\n self._onframeList[i](target, percent);\n }\n };\n } // This optimization will help the case that in the upper application\n // the view may be refreshed frequently, where animation will be\n // called repeatly but nothing changed.\n\n\n if (!clipCount) {\n this._doneCallback();\n }\n\n return this;\n },\n\n /**\n * Stop animation\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stop: function (forwardToLast) {\n var clipList = this._clipList;\n var animation = this.animation;\n\n for (var i = 0; i < clipList.length; i++) {\n var clip = clipList[i];\n\n if (forwardToLast) {\n // Move to last frame before stop\n clip.onframe(this._target, 1);\n }\n\n animation && animation.removeClip(clip);\n }\n\n clipList.length = 0;\n },\n\n /**\n * Set when animation delay starts\n * @param {number} time 单位ms\n * @return {module:zrender/animation/Animator}\n */\n delay: function (time) {\n this._delay = time;\n return this;\n },\n\n /**\n * Add callback for animation end\n * @param {Function} cb\n * @return {module:zrender/animation/Animator}\n */\n done: function (cb) {\n if (cb) {\n this._doneList.push(cb);\n }\n\n return this;\n },\n\n /**\n * @return {Array.}\n */\n getClips: function () {\n return this._clipList;\n }\n};\nvar _default = Animator;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/animation/Animator.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/animation/Clip.js":
/*!****************************************************!*\
!*** ./node_modules/zrender/lib/animation/Clip.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var easingFuncs = __webpack_require__(/*! ./easing */ \"./node_modules/zrender/lib/animation/easing.js\");\n\n/**\n * 动画主控制器\n * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件\n * @config life(1000) 动画时长\n * @config delay(0) 动画延迟时间\n * @config loop(true)\n * @config gap(0) 循环的间隔时间\n * @config onframe\n * @config easing(optional)\n * @config ondestroy(optional)\n * @config onrestart(optional)\n *\n * TODO pause\n */\nfunction Clip(options) {\n this._target = options.target; // 生命周期\n\n this._life = options.life || 1000; // 延时\n\n this._delay = options.delay || 0; // 开始时间\n // this._startTime = new Date().getTime() + this._delay;// 单位毫秒\n\n this._initialized = false; // 是否循环\n\n this.loop = options.loop == null ? false : options.loop;\n this.gap = options.gap || 0;\n this.easing = options.easing || 'Linear';\n this.onframe = options.onframe;\n this.ondestroy = options.ondestroy;\n this.onrestart = options.onrestart;\n this._pausedTime = 0;\n this._paused = false;\n}\n\nClip.prototype = {\n constructor: Clip,\n step: function (globalTime, deltaTime) {\n // Set startTime on first step, or _startTime may has milleseconds different between clips\n // PENDING\n if (!this._initialized) {\n this._startTime = globalTime + this._delay;\n this._initialized = true;\n }\n\n if (this._paused) {\n this._pausedTime += deltaTime;\n return;\n }\n\n var percent = (globalTime - this._startTime - this._pausedTime) / this._life; // 还没开始\n\n if (percent < 0) {\n return;\n }\n\n percent = Math.min(percent, 1);\n var easing = this.easing;\n var easingFunc = typeof easing === 'string' ? easingFuncs[easing] : easing;\n var schedule = typeof easingFunc === 'function' ? easingFunc(percent) : percent;\n this.fire('frame', schedule); // 结束\n\n if (percent === 1) {\n if (this.loop) {\n this.restart(globalTime); // 重新开始周期\n // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件\n\n return 'restart';\n } // 动画完成将这个控制器标识为待删除\n // 在Animation.update中进行批量删除\n\n\n this._needsRemove = true;\n return 'destroy';\n }\n\n return null;\n },\n restart: function (globalTime) {\n var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n this._startTime = globalTime - remainder + this.gap;\n this._pausedTime = 0;\n this._needsRemove = false;\n },\n fire: function (eventType, arg) {\n eventType = 'on' + eventType;\n\n if (this[eventType]) {\n this[eventType](this._target, arg);\n }\n },\n pause: function () {\n this._paused = true;\n },\n resume: function () {\n this._paused = false;\n }\n};\nvar _default = Clip;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/animation/Clip.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/animation/easing.js":
/*!******************************************************!*\
!*** ./node_modules/zrender/lib/animation/easing.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\n * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js\n * @see http://sole.github.io/tween.js/examples/03_graphs.html\n * @exports zrender/animation/easing\n */\nvar easing = {\n /**\n * @param {number} k\n * @return {number}\n */\n linear: function (k) {\n return k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticIn: function (k) {\n return k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticOut: function (k) {\n return k * (2 - k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n },\n // 三次方的缓动(t^3)\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicIn: function (k) {\n return k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicOut: function (k) {\n return --k * k * k + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k + 2);\n },\n // 四次方的缓动(t^4)\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticIn: function (k) {\n return k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticOut: function (k) {\n return 1 - --k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k;\n }\n\n return -0.5 * ((k -= 2) * k * k * k - 2);\n },\n // 五次方的缓动(t^5)\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticIn: function (k) {\n return k * k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticOut: function (k) {\n return --k * k * k * k * k + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k * k * k + 2);\n },\n // 正弦曲线的缓动(sin(t))\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalIn: function (k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalOut: function (k) {\n return Math.sin(k * Math.PI / 2);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalInOut: function (k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n },\n // 指数曲线的缓动(2^t)\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialIn: function (k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialOut: function (k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialInOut: function (k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if ((k *= 2) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n },\n // 圆形曲线的缓动(sqrt(1-t^2))\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularIn: function (k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularOut: function (k) {\n return Math.sqrt(1 - --k * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularInOut: function (k) {\n if ((k *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n },\n // 创建类似于弹簧在停止前来回振荡的动画\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticIn: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticInOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n if ((k *= 2) < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n },\n // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动\n\n /**\n * @param {number} k\n * @return {number}\n */\n backIn: function (k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n backOut: function (k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n backInOut: function (k) {\n var s = 1.70158 * 1.525;\n\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n },\n // 创建弹跳效果\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceIn: function (k) {\n return 1 - easing.bounceOut(1 - k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceOut: function (k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;\n } else {\n return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;\n }\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceInOut: function (k) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n }\n};\nvar _default = easing;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/animation/easing.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/animation/requestAnimationFrame.js":
/*!*********************************************************************!*\
!*** ./node_modules/zrender/lib/animation/requestAnimationFrame.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var _default = typeof window !== 'undefined' && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\nwindow.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function (func) {\n setTimeout(func, 16);\n};\n\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/animation/requestAnimationFrame.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/config.js":
/*!********************************************!*\
!*** ./node_modules/zrender/lib/config.js ***!
\********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var dpr = 1; // If in browser environment\n\nif (typeof window !== 'undefined') {\n dpr = Math.max(window.devicePixelRatio || 1, 1);\n}\n/**\n * config默认配置项\n * @exports zrender/config\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n */\n\n/**\n * Debug log mode:\n * 0: Do nothing, for release.\n * 1: console.error, for debug.\n */\n\n\nvar debugMode = 0; // retina 屏幕优化\n\nvar devicePixelRatio = dpr;\nexports.debugMode = debugMode;\nexports.devicePixelRatio = devicePixelRatio;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/config.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/arc.js":
/*!*************************************************!*\
!*** ./node_modules/zrender/lib/contain/arc.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var _util = __webpack_require__(/*! ./util */ \"./node_modules/zrender/lib/contain/util.js\");\n\nvar normalizeRadian = _util.normalizeRadian;\nvar PI2 = Math.PI * 2;\n/**\n * 圆弧描边包含判断\n * @param {number} cx\n * @param {number} cy\n * @param {number} r\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean} anticlockwise\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {Boolean}\n */\n\nfunction containStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth;\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n\n if (d - _l > r || d + _l < r) {\n return false;\n }\n\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n return true;\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var angle = Math.atan2(y, x);\n\n if (angle < 0) {\n angle += PI2;\n }\n\n return angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle;\n}\n\nexports.containStroke = containStroke;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/arc.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/cubic.js":
/*!***************************************************!*\
!*** ./node_modules/zrender/lib/contain/cubic.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var curve = __webpack_require__(/*! ../core/curve */ \"./node_modules/zrender/lib/core/curve.js\");\n\n/**\n * 三次贝塞尔曲线描边包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) {\n return false;\n }\n\n var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n\nexports.containStroke = containStroke;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/cubic.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/line.js":
/*!**************************************************!*\
!*** ./node_modules/zrender/lib/contain/line.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\n * 线段包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth;\n var _a = 0;\n var _b = x0; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x < x1 - _l) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n } else {\n return Math.abs(x - x0) <= _l / 2;\n }\n\n var tmp = _a * x - y + _b;\n\n var _s = tmp * tmp / (_a * _a + 1);\n\n return _s <= _l / 2 * _l / 2;\n}\n\nexports.containStroke = containStroke;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/line.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/path.js":
/*!**************************************************!*\
!*** ./node_modules/zrender/lib/contain/path.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var PathProxy = __webpack_require__(/*! ../core/PathProxy */ \"./node_modules/zrender/lib/core/PathProxy.js\");\n\nvar line = __webpack_require__(/*! ./line */ \"./node_modules/zrender/lib/contain/line.js\");\n\nvar cubic = __webpack_require__(/*! ./cubic */ \"./node_modules/zrender/lib/contain/cubic.js\");\n\nvar quadratic = __webpack_require__(/*! ./quadratic */ \"./node_modules/zrender/lib/contain/quadratic.js\");\n\nvar arc = __webpack_require__(/*! ./arc */ \"./node_modules/zrender/lib/contain/arc.js\");\n\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/zrender/lib/contain/util.js\");\n\nvar normalizeRadian = _util.normalizeRadian;\n\nvar curve = __webpack_require__(/*! ../core/curve */ \"./node_modules/zrender/lib/core/curve.js\");\n\nvar windingLine = __webpack_require__(/*! ./windingLine */ \"./node_modules/zrender/lib/contain/windingLine.js\");\n\nvar CMD = PathProxy.CMD;\nvar PI2 = Math.PI * 2;\nvar EPSILON = 1e-4;\n\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n} // 临时数组\n\n\nvar roots = [-1, -1, -1];\nvar extrema = [-1, -1];\n\nfunction swapExtrema() {\n var tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\n\nfunction windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {\n // Quick reject\n if (y > y0 && y > y1 && y > y2 && y > y3 || y < y0 && y < y1 && y < y2 && y < y3) {\n return 0;\n }\n\n var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n\n if (nRoots === 0) {\n return 0;\n } else {\n var w = 0;\n var nExtrema = -1;\n var y0_;\n var y1_;\n\n for (var i = 0; i < nRoots; i++) {\n var t = roots[i]; // Avoid winding error when intersection point is the connect point of two line of polygon\n\n var unit = t === 0 || t === 1 ? 0.5 : 1;\n var x_ = curve.cubicAt(x0, x1, x2, x3, t);\n\n if (x_ < x) {\n // Quick reject\n continue;\n }\n\n if (nExtrema < 0) {\n nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n\n y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n\n if (nExtrema > 1) {\n y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n\n if (nExtrema === 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n } else {\n w += y3 < y1_ ? unit : -unit;\n }\n } else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n\n return w;\n }\n}\n\nfunction windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {\n // Quick reject\n if (y > y0 && y > y1 && y > y2 || y < y0 && y < y1 && y < y2) {\n return 0;\n }\n\n var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n\n if (nRoots === 0) {\n return 0;\n } else {\n var t = curve.quadraticExtremum(y0, y1, y2);\n\n if (t >= 0 && t <= 1) {\n var w = 0;\n var y_ = curve.quadraticAt(y0, y1, y2, t);\n\n for (var i = 0; i < nRoots; i++) {\n // Remove one endpoint.\n var unit = roots[i] === 0 || roots[i] === 1 ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n\n if (x_ < x) {\n // Quick reject\n continue;\n }\n\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n } else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n\n return w;\n } else {\n // Remove one endpoint.\n var unit = roots[0] === 0 || roots[0] === 1 ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n\n if (x_ < x) {\n // Quick reject\n return 0;\n }\n\n return y2 < y0 ? unit : -unit;\n }\n }\n} // TODO\n// Arc 旋转\n\n\nfunction windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {\n y -= cy;\n\n if (y > r || y < -r) {\n return 0;\n }\n\n var tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n var diff = Math.abs(startAngle - endAngle);\n\n if (diff < 1e-4) {\n return 0;\n }\n\n if (diff % PI2 < 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = PI2;\n var dir = anticlockwise ? 1 : -1;\n\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n } else {\n return 0;\n }\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var w = 0;\n\n for (var i = 0; i < 2; i++) {\n var x_ = roots[i];\n\n if (x_ + cx > x) {\n var angle = Math.atan2(y, x_);\n var dir = anticlockwise ? 1 : -1;\n\n if (angle < 0) {\n angle = PI2 + angle;\n }\n\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n dir = -dir;\n }\n\n w += dir;\n }\n }\n }\n\n return w;\n}\n\nfunction containPath(data, lineWidth, isStroke, x, y) {\n var w = 0;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++]; // Begin a new subpath\n\n if (cmd === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n } // 如果被任何一个 subpath 包含\n // if (w !== 0) {\n // return true;\n // }\n\n }\n\n if (i === 1) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n\n case CMD.L:\n if (isStroke) {\n if (line.containStroke(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n if (isStroke) {\n if (cubic.containStroke(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n if (isStroke) {\n if (quadratic.containStroke(xi, yi, data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++]; // TODO Arc 旋转\n\n i += 1;\n var anticlockwise = 1 - data[i++];\n var x1 = Math.cos(theta) * rx + cx;\n var y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i > 1) {\n w += windingLine(xi, yi, x1, y1, x, y);\n } else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n if (isStroke) {\n if (arc.containStroke(cx, cy, ry, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n } else {\n w += windingArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y);\n }\n\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n var x1 = x0 + width;\n var y1 = y0 + height;\n\n if (isStroke) {\n if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y) || line.containStroke(x1, y0, x1, y1, lineWidth, x, y) || line.containStroke(x1, y1, x0, y1, lineWidth, x, y) || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // FIXME Clockwise ?\n w += windingLine(x1, y0, x1, y1, x, y);\n w += windingLine(x0, y1, x0, y0, x, y);\n }\n\n break;\n\n case CMD.Z:\n if (isStroke) {\n if (line.containStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // Close a subpath\n w += windingLine(xi, yi, x0, y0, x, y); // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n\n xi = x0;\n yi = y0;\n break;\n }\n }\n\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n\n return w !== 0;\n}\n\nfunction contain(pathData, x, y) {\n return containPath(pathData, 0, false, x, y);\n}\n\nfunction containStroke(pathData, lineWidth, x, y) {\n return containPath(pathData, lineWidth, true, x, y);\n}\n\nexports.contain = contain;\nexports.containStroke = containStroke;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/path.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/polygon.js":
/*!*****************************************************!*\
!*** ./node_modules/zrender/lib/contain/polygon.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var windingLine = __webpack_require__(/*! ./windingLine */ \"./node_modules/zrender/lib/contain/windingLine.js\");\n\nvar EPSILON = 1e-8;\n\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n}\n\nfunction contain(points, x, y) {\n var w = 0;\n var p = points[0];\n\n if (!p) {\n return false;\n }\n\n for (var i = 1; i < points.length; i++) {\n var p2 = points[i];\n w += windingLine(p[0], p[1], p2[0], p2[1], x, y);\n p = p2;\n } // Close polygon\n\n\n var p0 = points[0];\n\n if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) {\n w += windingLine(p[0], p[1], p0[0], p0[1], x, y);\n }\n\n return w !== 0;\n}\n\nexports.contain = contain;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/polygon.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/quadratic.js":
/*!*******************************************************!*\
!*** ./node_modules/zrender/lib/contain/quadratic.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var _curve = __webpack_require__(/*! ../core/curve */ \"./node_modules/zrender/lib/core/curve.js\");\n\nvar quadraticProjectPoint = _curve.quadraticProjectPoint;\n\n/**\n * 二次贝塞尔曲线描边包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l && y > y2 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l) {\n return false;\n }\n\n var d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);\n return d <= _l / 2;\n}\n\nexports.containStroke = containStroke;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/quadratic.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/text.js":
/*!**************************************************!*\
!*** ./node_modules/zrender/lib/contain/text.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var BoundingRect = __webpack_require__(/*! ../core/BoundingRect */ \"./node_modules/zrender/lib/core/BoundingRect.js\");\n\nvar imageHelper = __webpack_require__(/*! ../graphic/helper/image */ \"./node_modules/zrender/lib/graphic/helper/image.js\");\n\nvar _util = __webpack_require__(/*! ../core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\nvar getContext = _util.getContext;\nvar extend = _util.extend;\nvar retrieve2 = _util.retrieve2;\nvar retrieve3 = _util.retrieve3;\nvar trim = _util.trim;\nvar textWidthCache = {};\nvar textWidthCacheCounter = 0;\nvar TEXT_CACHE_MAX = 5000;\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\nvar DEFAULT_FONT = '12px sans-serif'; // Avoid assign to an exported variable, for transforming to cjs.\n\nvar methods = {};\n\nfunction $override(name, fn) {\n methods[name] = fn;\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {number} width\n */\n\n\nfunction getWidth(text, font) {\n font = font || DEFAULT_FONT;\n var key = text + ':' + font;\n\n if (textWidthCache[key]) {\n return textWidthCache[key];\n }\n\n var textLines = (text + '').split('\\n');\n var width = 0;\n\n for (var i = 0, l = textLines.length; i < l; i++) {\n // textContain.measureText may be overrided in SVG or VML\n width = Math.max(measureText(textLines[i], font).width, width);\n }\n\n if (textWidthCacheCounter > TEXT_CACHE_MAX) {\n textWidthCacheCounter = 0;\n textWidthCache = {};\n }\n\n textWidthCacheCounter++;\n textWidthCache[key] = width;\n return width;\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {string} [textAlign='left']\n * @param {string} [textVerticalAlign='top']\n * @param {Array.} [textPadding]\n * @param {Object} [rich]\n * @param {Object} [truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\n\n\nfunction getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n return rich ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate);\n}\n\nfunction getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate) {\n var contentBlock = parsePlainText(text, font, textPadding, textLineHeight, truncate);\n var outerWidth = getWidth(text, font);\n\n if (textPadding) {\n outerWidth += textPadding[1] + textPadding[3];\n }\n\n var outerHeight = contentBlock.outerHeight;\n var x = adjustTextX(0, outerWidth, textAlign);\n var y = adjustTextY(0, outerHeight, textVerticalAlign);\n var rect = new BoundingRect(x, y, outerWidth, outerHeight);\n rect.lineHeight = contentBlock.lineHeight;\n return rect;\n}\n\nfunction getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n var contentBlock = parseRichText(text, {\n rich: rich,\n truncate: truncate,\n font: font,\n textAlign: textAlign,\n textPadding: textPadding,\n textLineHeight: textLineHeight\n });\n var outerWidth = contentBlock.outerWidth;\n var outerHeight = contentBlock.outerHeight;\n var x = adjustTextX(0, outerWidth, textAlign);\n var y = adjustTextY(0, outerHeight, textVerticalAlign);\n return new BoundingRect(x, y, outerWidth, outerHeight);\n}\n/**\n * @public\n * @param {number} x\n * @param {number} width\n * @param {string} [textAlign='left']\n * @return {number} Adjusted x.\n */\n\n\nfunction adjustTextX(x, width, textAlign) {\n // FIXME Right to left language\n if (textAlign === 'right') {\n x -= width;\n } else if (textAlign === 'center') {\n x -= width / 2;\n }\n\n return x;\n}\n/**\n * @public\n * @param {number} y\n * @param {number} height\n * @param {string} [textVerticalAlign='top']\n * @return {number} Adjusted y.\n */\n\n\nfunction adjustTextY(y, height, textVerticalAlign) {\n if (textVerticalAlign === 'middle') {\n y -= height / 2;\n } else if (textVerticalAlign === 'bottom') {\n y -= height;\n }\n\n return y;\n}\n/**\n * Follow same interface to `Displayable.prototype.calculateTextPosition`.\n * @public\n * @param {Obejct} [out] Prepared out object. If not input, auto created in the method.\n * @param {module:zrender/graphic/Style} style where `textPosition` and `textDistance` are visited.\n * @param {Object} rect {x, y, width, height} Rect of the host elment, according to which the text positioned.\n * @return {Object} The input `out`. Set: {x, y, textAlign, textVerticalAlign}\n */\n\n\nfunction calculateTextPosition(out, style, rect) {\n var textPosition = style.textPosition;\n var distance = style.textDistance;\n var x = rect.x;\n var y = rect.y;\n distance = distance || 0;\n var height = rect.height;\n var width = rect.width;\n var halfHeight = height / 2;\n var textAlign = 'left';\n var textVerticalAlign = 'top';\n\n switch (textPosition) {\n case 'left':\n x -= distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'right':\n x += distance + width;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n\n case 'top':\n x += width / 2;\n y -= distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'bottom':\n x += width / 2;\n y += height + distance;\n textAlign = 'center';\n break;\n\n case 'inside':\n x += width / 2;\n y += halfHeight;\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideLeft':\n x += distance;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n\n case 'insideRight':\n x += width - distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideTop':\n x += width / 2;\n y += distance;\n textAlign = 'center';\n break;\n\n case 'insideBottom':\n x += width / 2;\n y += height - distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideTopLeft':\n x += distance;\n y += distance;\n break;\n\n case 'insideTopRight':\n x += width - distance;\n y += distance;\n textAlign = 'right';\n break;\n\n case 'insideBottomLeft':\n x += distance;\n y += height - distance;\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideBottomRight':\n x += width - distance;\n y += height - distance;\n textAlign = 'right';\n textVerticalAlign = 'bottom';\n break;\n }\n\n out = out || {};\n out.x = x;\n out.y = y;\n out.textAlign = textAlign;\n out.textVerticalAlign = textVerticalAlign;\n return out;\n}\n/**\n * To be removed. But still do not remove in case that some one has imported it.\n * @deprecated\n * @public\n * @param {stirng} textPosition\n * @param {Object} rect {x, y, width, height}\n * @param {number} distance\n * @return {Object} {x, y, textAlign, textVerticalAlign}\n */\n\n\nfunction adjustTextPositionOnRect(textPosition, rect, distance) {\n var dummyStyle = {\n textPosition: textPosition,\n textDistance: distance\n };\n return calculateTextPosition({}, dummyStyle, rect);\n}\n/**\n * Show ellipsis if overflow.\n *\n * @public\n * @param {string} text\n * @param {string} containerWidth\n * @param {string} font\n * @param {number} [ellipsis='...']\n * @param {Object} [options]\n * @param {number} [options.maxIterations=3]\n * @param {number} [options.minChar=0] If truncate result are less\n * then minChar, ellipsis will not show, which is\n * better for user hint in some cases.\n * @param {number} [options.placeholder=''] When all truncated, use the placeholder.\n * @return {string}\n */\n\n\nfunction truncateText(text, containerWidth, font, ellipsis, options) {\n if (!containerWidth) {\n return '';\n }\n\n var textLines = (text + '').split('\\n');\n options = prepareTruncateOptions(containerWidth, font, ellipsis, options); // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n\n for (var i = 0, len = textLines.length; i < len; i++) {\n textLines[i] = truncateSingleLine(textLines[i], options);\n }\n\n return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(containerWidth, font, ellipsis, options) {\n options = extend({}, options);\n options.font = font;\n var ellipsis = retrieve2(ellipsis, '...');\n options.maxIterations = retrieve2(options.maxIterations, 2);\n var minChar = options.minChar = retrieve2(options.minChar, 0); // FIXME\n // Other languages?\n\n options.cnCharWidth = getWidth('国', font); // FIXME\n // Consider proportional font?\n\n var ascCharWidth = options.ascCharWidth = getWidth('a', font);\n options.placeholder = retrieve2(options.placeholder, ''); // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n\n var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n\n for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n\n var ellipsisWidth = getWidth(ellipsis, font);\n\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n\n contentWidth = containerWidth - ellipsisWidth;\n options.ellipsis = ellipsis;\n options.ellipsisWidth = ellipsisWidth;\n options.contentWidth = contentWidth;\n options.containerWidth = containerWidth;\n return options;\n}\n\nfunction truncateSingleLine(textLine, options) {\n var containerWidth = options.containerWidth;\n var font = options.font;\n var contentWidth = options.contentWidth;\n\n if (!containerWidth) {\n return '';\n }\n\n var lineWidth = getWidth(textLine, font);\n\n if (lineWidth <= containerWidth) {\n return textLine;\n }\n\n for (var j = 0;; j++) {\n if (lineWidth <= contentWidth || j >= options.maxIterations) {\n textLine += options.ellipsis;\n break;\n }\n\n var subLength = j === 0 ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth) : lineWidth > 0 ? Math.floor(textLine.length * contentWidth / lineWidth) : 0;\n textLine = textLine.substr(0, subLength);\n lineWidth = getWidth(textLine, font);\n }\n\n if (textLine === '') {\n textLine = options.placeholder;\n }\n\n return textLine;\n}\n\nfunction estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) {\n var width = 0;\n var i = 0;\n\n for (var len = text.length; i < len && width < contentWidth; i++) {\n var charCode = text.charCodeAt(i);\n width += 0 <= charCode && charCode <= 127 ? ascCharWidth : cnCharWidth;\n }\n\n return i;\n}\n/**\n * @public\n * @param {string} font\n * @return {number} line height\n */\n\n\nfunction getLineHeight(font) {\n // FIXME A rough approach.\n return getWidth('国', font);\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {Object} width\n */\n\n\nfunction measureText(text, font) {\n return methods.measureText(text, font);\n} // Avoid assign to an exported variable, for transforming to cjs.\n\n\nmethods.measureText = function (text, font) {\n var ctx = getContext();\n ctx.font = font || DEFAULT_FONT;\n return ctx.measureText(text);\n};\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {Object} [truncate]\n * @return {Object} block: {lineHeight, lines, height, outerHeight, canCacheByTextString}\n * Notice: for performance, do not calculate outerWidth util needed.\n * `canCacheByTextString` means the result `lines` is only determined by the input `text`.\n * Thus we can simply comparing the `input` text to determin whether the result changed,\n * without travel the result `lines`.\n */\n\n\nfunction parsePlainText(text, font, padding, textLineHeight, truncate) {\n text != null && (text += '');\n var lineHeight = retrieve2(textLineHeight, getLineHeight(font));\n var lines = text ? text.split('\\n') : [];\n var height = lines.length * lineHeight;\n var outerHeight = height;\n var canCacheByTextString = true;\n\n if (padding) {\n outerHeight += padding[0] + padding[2];\n }\n\n if (text && truncate) {\n canCacheByTextString = false;\n var truncOuterHeight = truncate.outerHeight;\n var truncOuterWidth = truncate.outerWidth;\n\n if (truncOuterHeight != null && outerHeight > truncOuterHeight) {\n text = '';\n lines = [];\n } else if (truncOuterWidth != null) {\n var options = prepareTruncateOptions(truncOuterWidth - (padding ? padding[1] + padding[3] : 0), font, truncate.ellipsis, {\n minChar: truncate.minChar,\n placeholder: truncate.placeholder\n }); // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n\n for (var i = 0, len = lines.length; i < len; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n }\n\n return {\n lines: lines,\n height: height,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n canCacheByTextString: canCacheByTextString\n };\n}\n/**\n * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'\n * Also consider 'bbbb{a|xxx\\nzzz}xxxx\\naaaa'.\n *\n * @public\n * @param {string} text\n * @param {Object} style\n * @return {Object} block\n * {\n * width,\n * height,\n * lines: [{\n * lineHeight,\n * width,\n * tokens: [[{\n * styleName,\n * text,\n * width, // include textPadding\n * height, // include textPadding\n * textWidth, // pure text width\n * textHeight, // pure text height\n * lineHeihgt,\n * font,\n * textAlign,\n * textVerticalAlign\n * }], [...], ...]\n * }, ...]\n * }\n * If styleName is undefined, it is plain text.\n */\n\n\nfunction parseRichText(text, style) {\n var contentBlock = {\n lines: [],\n width: 0,\n height: 0\n };\n text != null && (text += '');\n\n if (!text) {\n return contentBlock;\n }\n\n var lastIndex = STYLE_REG.lastIndex = 0;\n var result;\n\n while ((result = STYLE_REG.exec(text)) != null) {\n var matchedIndex = result.index;\n\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex));\n }\n\n pushTokens(contentBlock, result[2], result[1]);\n lastIndex = STYLE_REG.lastIndex;\n }\n\n if (lastIndex < text.length) {\n pushTokens(contentBlock, text.substring(lastIndex, text.length));\n }\n\n var lines = contentBlock.lines;\n var contentHeight = 0;\n var contentWidth = 0; // For `textWidth: 100%`\n\n var pendingList = [];\n var stlPadding = style.textPadding;\n var truncate = style.truncate;\n var truncateWidth = truncate && truncate.outerWidth;\n var truncateHeight = truncate && truncate.outerHeight;\n\n if (stlPadding) {\n truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]);\n truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]);\n } // Calculate layout info of tokens.\n\n\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var lineHeight = 0;\n var lineWidth = 0;\n\n for (var j = 0; j < line.tokens.length; j++) {\n var token = line.tokens[j];\n var tokenStyle = token.styleName && style.rich[token.styleName] || {}; // textPadding should not inherit from style.\n\n var textPadding = token.textPadding = tokenStyle.textPadding; // textFont has been asigned to font by `normalizeStyle`.\n\n var font = token.font = tokenStyle.font || style.font; // textHeight can be used when textVerticalAlign is specified in token.\n\n var tokenHeight = token.textHeight = retrieve2( // textHeight should not be inherited, consider it can be specified\n // as box height of the block.\n tokenStyle.textHeight, getLineHeight(font));\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n token.lineHeight = retrieve3(tokenStyle.textLineHeight, style.textLineHeight, tokenHeight);\n token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign;\n token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle';\n\n if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) {\n return {\n lines: [],\n width: 0,\n height: 0\n };\n }\n\n token.textWidth = getWidth(token.text, font);\n var tokenWidth = tokenStyle.textWidth;\n var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto'; // Percent width, can be `100%`, can be used in drawing separate\n // line when box width is needed to be auto.\n\n if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') {\n token.percentWidth = tokenWidth;\n pendingList.push(token);\n tokenWidth = 0; // Do not truncate in this case, because there is no user case\n // and it is too complicated.\n } else {\n if (tokenWidthNotSpecified) {\n tokenWidth = token.textWidth; // FIXME: If image is not loaded and textWidth is not specified, calling\n // `getBoundingRect()` will not get correct result.\n\n var textBackgroundColor = tokenStyle.textBackgroundColor;\n var bgImg = textBackgroundColor && textBackgroundColor.image; // Use cases:\n // (1) If image is not loaded, it will be loaded at render phase and call\n // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded\n // image, and then the right size will be calculated here at the next tick.\n // See `graphic/helper/text.js`.\n // (2) If image loaded, and `textBackgroundColor.image` is image src string,\n // use `imageHelper.findExistImage` to find cached image.\n // `imageHelper.findExistImage` will always be called here before\n // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText`\n // which ensures that image will not be rendered before correct size calcualted.\n\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n\n if (imageHelper.isImageReady(bgImg)) {\n tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height);\n }\n }\n }\n\n var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0;\n tokenWidth += paddingW;\n var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null;\n\n if (remianTruncWidth != null && remianTruncWidth < tokenWidth) {\n if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) {\n token.text = '';\n token.textWidth = tokenWidth = 0;\n } else {\n token.text = truncateText(token.text, remianTruncWidth - paddingW, font, truncate.ellipsis, {\n minChar: truncate.minChar\n });\n token.textWidth = getWidth(token.text, font);\n tokenWidth = token.textWidth + paddingW;\n }\n }\n }\n\n lineWidth += token.width = tokenWidth;\n tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n }\n\n line.width = lineWidth;\n line.lineHeight = lineHeight;\n contentHeight += lineHeight;\n contentWidth = Math.max(contentWidth, lineWidth);\n }\n\n contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth);\n contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight);\n\n if (stlPadding) {\n contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n }\n\n for (var i = 0; i < pendingList.length; i++) {\n var token = pendingList[i];\n var percentWidth = token.percentWidth; // Should not base on outerWidth, because token can not be placed out of padding.\n\n token.width = parseInt(percentWidth, 10) / 100 * contentWidth;\n }\n\n return contentBlock;\n}\n\nfunction pushTokens(block, str, styleName) {\n var isEmptyStr = str === '';\n var strs = str.split('\\n');\n var lines = block.lines;\n\n for (var i = 0; i < strs.length; i++) {\n var text = strs[i];\n var token = {\n styleName: styleName,\n text: text,\n isLineHolder: !text && !isEmptyStr\n }; // The first token should be appended to the last line.\n\n if (!i) {\n var tokens = (lines[lines.length - 1] || (lines[0] = {\n tokens: []\n })).tokens; // Consider cases:\n // (1) ''.split('\\n') => ['', '\\n', ''], the '' at the first item\n // (which is a placeholder) should be replaced by new token.\n // (2) A image backage, where token likes {a|}.\n // (3) A redundant '' will affect textAlign in line.\n // (4) tokens with the same tplName should not be merged, because\n // they should be displayed in different box (with border and padding).\n\n var tokensLen = tokens.length;\n tokensLen === 1 && tokens[0].isLineHolder ? tokens[0] = token : // Consider text is '', only insert when it is the \"lineHolder\" or\n // \"emptyStr\". Otherwise a redundant '' will affect textAlign in line.\n (text || !tokensLen || isEmptyStr) && tokens.push(token);\n } // Other tokens always start a new line.\n else {\n // If there is '', insert it as a placeholder.\n lines.push({\n tokens: [token]\n });\n }\n }\n}\n\nfunction makeFont(style) {\n // FIXME in node-canvas fontWeight is before fontStyle\n // Use `fontSize` `fontFamily` to check whether font properties are defined.\n var font = (style.fontSize || style.fontFamily) && [style.fontStyle, style.fontWeight, (style.fontSize || 12) + 'px', // If font properties are defined, `fontFamily` should not be ignored.\n style.fontFamily || 'sans-serif'].join(' ');\n return font && trim(font) || style.textFont || style.font;\n}\n\nexports.DEFAULT_FONT = DEFAULT_FONT;\nexports.$override = $override;\nexports.getWidth = getWidth;\nexports.getBoundingRect = getBoundingRect;\nexports.adjustTextX = adjustTextX;\nexports.adjustTextY = adjustTextY;\nexports.calculateTextPosition = calculateTextPosition;\nexports.adjustTextPositionOnRect = adjustTextPositionOnRect;\nexports.truncateText = truncateText;\nexports.getLineHeight = getLineHeight;\nexports.measureText = measureText;\nexports.parsePlainText = parsePlainText;\nexports.parseRichText = parseRichText;\nexports.makeFont = makeFont;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/text.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/util.js":
/*!**************************************************!*\
!*** ./node_modules/zrender/lib/contain/util.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var PI2 = Math.PI * 2;\n\nfunction normalizeRadian(angle) {\n angle %= PI2;\n\n if (angle < 0) {\n angle += PI2;\n }\n\n return angle;\n}\n\nexports.normalizeRadian = normalizeRadian;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/util.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/contain/windingLine.js":
/*!*********************************************************!*\
!*** ./node_modules/zrender/lib/contain/windingLine.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function windingLine(x0, y0, x1, y1, x, y) {\n if (y > y0 && y > y1 || y < y0 && y < y1) {\n return 0;\n } // Ignore horizontal line\n\n\n if (y1 === y0) {\n return 0;\n }\n\n var dir = y1 < y0 ? 1 : -1;\n var t = (y - y0) / (y1 - y0); // Avoid winding error when intersection point is the connect point of two line of polygon\n\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n var x_ = t * (x1 - x0) + x0; // If (x, y) on the line, considered as \"contain\".\n\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n\nmodule.exports = windingLine;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/contain/windingLine.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/container/Group.js":
/*!*****************************************************!*\
!*** ./node_modules/zrender/lib/container/Group.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var zrUtil = __webpack_require__(/*! ../core/util */ \"./node_modules/zrender/lib/core/util.js\");\n\nvar Element = __webpack_require__(/*! ../Element */ \"./node_modules/zrender/lib/Element.js\");\n\nvar BoundingRect = __webpack_require__(/*! ../core/BoundingRect */ \"./node_modules/zrender/lib/core/BoundingRect.js\");\n\n/**\n * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上\n * @module zrender/graphic/Group\n * @example\n * var Group = require('zrender/container/Group');\n * var Circle = require('zrender/graphic/shape/Circle');\n * var g = new Group();\n * g.position[0] = 100;\n * g.position[1] = 100;\n * g.add(new Circle({\n * style: {\n * x: 100,\n * y: 100,\n * r: 20,\n * }\n * }));\n * zr.add(g);\n */\n\n/**\n * @alias module:zrender/graphic/Group\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @extends module:zrender/mixin/Eventful\n */\nvar Group = function (opts) {\n opts = opts || {};\n Element.call(this, opts);\n\n for (var key in opts) {\n if (opts.hasOwnProperty(key)) {\n this[key] = opts[key];\n }\n }\n\n this._children = [];\n this.__storage = null;\n this.__dirty = true;\n};\n\nGroup.prototype = {\n constructor: Group,\n isGroup: true,\n\n /**\n * @type {string}\n */\n type: 'group',\n\n /**\n * 所有子孙元素是否响应鼠标事件\n * @name module:/zrender/container/Group#silent\n * @type {boolean}\n * @default false\n */\n silent: false,\n\n /**\n * @return {Array.}\n */\n children: function () {\n return this._children.slice();\n },\n\n /**\n * 获取指定 index 的儿子节点\n * @param {number} idx\n * @return {module:zrender/Element}\n */\n childAt: function (idx) {\n return this._children[idx];\n },\n\n /**\n * 获取指定名字的儿子节点\n * @param {string} name\n * @return {module:zrender/Element}\n */\n childOfName: function (name) {\n var children = this._children;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].name === name) {\n return children[i];\n }\n }\n },\n\n /**\n * @return {number}\n */\n childCount: function () {\n return this._children.length;\n },\n\n /**\n * 添加子节点到最后\n * @param {module:zrender/Element} child\n */\n add: function (child) {\n if (child && child !== this && child.parent !== this) {\n this._children.push(child);\n\n this._doAdd(child);\n }\n\n return this;\n },\n\n /**\n * 添加子节点在 nextSibling 之前\n * @param {module:zrender/Element} child\n * @param {module:zrender/Element} nextSibling\n */\n addBefore: function (child, nextSibling) {\n if (child && child !== this && child.parent !== this && nextSibling && nextSibling.parent === this) {\n var children = this._children;\n var idx = children.indexOf(nextSibling);\n\n if (idx >= 0) {\n children.splice(idx, 0, child);\n\n this._doAdd(child);\n }\n }\n\n return this;\n },\n _doAdd: function (child) {\n if (child.parent) {\n child.parent.remove(child);\n }\n\n child.parent = this;\n var storage = this.__storage;\n var zr = this.__zr;\n\n if (storage && storage !== child.__storage) {\n storage.addToStorage(child);\n\n if (child instanceof Group) {\n child.addChildrenToStorage(storage);\n }\n }\n\n zr && zr.refresh();\n },\n\n /**\n * 移除子节点\n * @param {module:zrender/Element} child\n */\n remove: function (child) {\n var zr = this.__zr;\n var storage = this.__storage;\n var children = this._children;\n var idx = zrUtil.indexOf(children, child);\n\n if (idx < 0) {\n return this;\n }\n\n children.splice(idx, 1);\n child.parent = null;\n\n if (storage) {\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n\n zr && zr.refresh();\n return this;\n },\n\n /**\n * 移除所有子节点\n */\n removeAll: function () {\n var children = this._children;\n var storage = this.__storage;\n var child;\n var i;\n\n for (i = 0; i < children.length; i++) {\n child = children[i];\n\n if (storage) {\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n\n child.parent = null;\n }\n\n children.length = 0;\n return this;\n },\n\n /**\n * 遍历所有子节点\n * @param {Function} cb\n * @param {} context\n */\n eachChild: function (cb, context) {\n var children = this._children;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n cb.call(context, child, i);\n }\n\n return this;\n },\n\n /**\n * 深度优先遍历所有子孙节点\n * @param {Function} cb\n * @param {} context\n */\n traverse: function (cb, context) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n cb.call(context, child);\n\n if (child.type === 'group') {\n child.traverse(cb, context);\n }\n }\n\n return this;\n },\n addChildrenToStorage: function (storage) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n storage.addToStorage(child);\n\n if (child instanceof Group) {\n child.addChildrenToStorage(storage);\n }\n }\n },\n delChildrenFromStorage: function (storage) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n },\n dirty: function () {\n this.__dirty = true;\n this.__zr && this.__zr.refresh();\n return this;\n },\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getBoundingRect: function (includeChildren) {\n // TODO Caching\n var rect = null;\n var tmpRect = new BoundingRect(0, 0, 0, 0);\n var children = includeChildren || this._children;\n var tmpMat = [];\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (child.ignore || child.invisible) {\n continue;\n }\n\n var childRect = child.getBoundingRect();\n var transform = child.getLocalTransform(tmpMat); // TODO\n // The boundingRect cacluated by transforming original\n // rect may be bigger than the actual bundingRect when rotation\n // is used. (Consider a circle rotated aginst its center, where\n // the actual boundingRect should be the same as that not be\n // rotated.) But we can not find better approach to calculate\n // actual boundingRect yet, considering performance.\n\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n } else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n\n return rect || tmpRect;\n }\n};\nzrUtil.inherits(Group, Element);\nvar _default = Group;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/container/Group.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/core/BoundingRect.js":
/*!*******************************************************!*\
!*** ./node_modules/zrender/lib/core/BoundingRect.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var vec2 = __webpack_require__(/*! ./vector */ \"./node_modules/zrender/lib/core/vector.js\");\n\nvar matrix = __webpack_require__(/*! ./matrix */ \"./node_modules/zrender/lib/core/matrix.js\");\n\n/**\n * @module echarts/core/BoundingRect\n */\nvar v2ApplyTransform = vec2.applyTransform;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n/**\n * @alias module:echarts/core/BoundingRect\n */\n\nfunction BoundingRect(x, y, width, height) {\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n /**\n * @type {number}\n */\n\n\n this.x = x;\n /**\n * @type {number}\n */\n\n this.y = y;\n /**\n * @type {number}\n */\n\n this.width = width;\n /**\n * @type {number}\n */\n\n this.height = height;\n}\n\nBoundingRect.prototype = {\n constructor: BoundingRect,\n\n /**\n * @param {module:echarts/core/BoundingRect} other\n */\n union: function (other) {\n var x = mathMin(other.x, this.x);\n var y = mathMin(other.y, this.y);\n this.width = mathMax(other.x + other.width, this.x + this.width) - x;\n this.height = mathMax(other.y + other.height, this.y + this.height) - y;\n this.x = x;\n this.y = y;\n },\n\n /**\n * @param {Array.} m\n * @methods\n */\n applyTransform: function () {\n var lt = [];\n var rb = [];\n var lb = [];\n var rt = [];\n return function (m) {\n // In case usage like this\n // el.getBoundingRect().applyTransform(el.transform)\n // And element has no transform\n if (!m) {\n return;\n }\n\n lt[0] = lb[0] = this.x;\n lt[1] = rt[1] = this.y;\n rb[0] = rt[0] = this.x + this.width;\n rb[1] = lb[1] = this.y + this.height;\n v2ApplyTransform(lt, lt, m);\n v2ApplyTransform(rb, rb, m);\n v2ApplyTransform(lb, lb, m);\n v2ApplyTransform(rt, rt, m);\n this.x = mathMin(lt[0], rb[0], lb[0], rt[0]);\n this.y = mathMin(lt[1], rb[1], lb[1], rt[1]);\n var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]);\n var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]);\n this.width = maxX - this.x;\n this.height = maxY - this.y;\n };\n }(),\n\n /**\n * Calculate matrix of transforming from self to target rect\n * @param {module:zrender/core/BoundingRect} b\n * @return {Array.}\n */\n calculateTransform: function (b) {\n var a = this;\n var sx = b.width / a.width;\n var sy = b.height / a.height;\n var m = matrix.create(); // 矩阵右乘\n\n matrix.translate(m, m, [-a.x, -a.y]);\n matrix.scale(m, m, [sx, sy]);\n matrix.translate(m, m, [b.x, b.y]);\n return m;\n },\n\n /**\n * @param {(module:echarts/core/BoundingRect|Object)} b\n * @return {boolean}\n */\n intersect: function (b) {\n if (!b) {\n return false;\n }\n\n if (!(b instanceof BoundingRect)) {\n // Normalize negative width/height.\n b = BoundingRect.create(b);\n }\n\n var a = this;\n var ax0 = a.x;\n var ax1 = a.x + a.width;\n var ay0 = a.y;\n var ay1 = a.y + a.height;\n var bx0 = b.x;\n var bx1 = b.x + b.width;\n var by0 = b.y;\n var by1 = b.y + b.height;\n return !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n },\n contain: function (x, y) {\n var rect = this;\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;\n },\n\n /**\n * @return {module:echarts/core/BoundingRect}\n */\n clone: function () {\n return new BoundingRect(this.x, this.y, this.width, this.height);\n },\n\n /**\n * Copy from another rect\n */\n copy: function (other) {\n this.x = other.x;\n this.y = other.y;\n this.width = other.width;\n this.height = other.height;\n },\n plain: function () {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height\n };\n }\n};\n/**\n * @param {Object|module:zrender/core/BoundingRect} rect\n * @param {number} rect.x\n * @param {number} rect.y\n * @param {number} rect.width\n * @param {number} rect.height\n * @return {module:zrender/core/BoundingRect}\n */\n\nBoundingRect.create = function (rect) {\n return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n};\n\nvar _default = BoundingRect;\nmodule.exports = _default;\n\n//# sourceURL=webpack:///./node_modules/zrender/lib/core/BoundingRect.js?");
/***/ }),
/***/ "./node_modules/zrender/lib/core/GestureMgr.js":
/*!*****************************************************!*\
!*** ./node_modules/zrender/lib/core/GestureMgr.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var eventUtil = __webpack_require__(/*! ./event */ \"./node_modules/zrender/lib/core/event.js\");\n\n/**\n * Only implements needed gestures for mobile.\n */\nvar GestureMgr = function () {\n /**\n * @private\n * @type {Array.