UNPKG

562 kBSource Map (JSON)View Raw
1{"version":3,"file":"interaction.js","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 3de64a368ef50cc3ff8f","webpack:///./node_modules/@antv/g/src/util/index.js","webpack:///./node_modules/@antv/g/src/canvas/core/shape.js","webpack:///./node_modules/@antv/g/src/util/matrix.js","webpack:///./node_modules/@antv/g/src/canvas/shape/util/inside.js","webpack:///./node_modules/@antv/g/src/svg/core/shape.js","webpack:///./node_modules/d3-color/index.js","webpack:///./node_modules/@antv/g/src/canvas/shape/util/arrow.js","webpack:///./node_modules/@antv/g/src/util/common.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./src/base.js","webpack:///./node_modules/@antv/util/build/util.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/@antv/g/src/canvas/shape/math/cubic.js","webpack:///./node_modules/@antv/g/src/svg/core/element.js","webpack:///./node_modules/gl-matrix/src/gl-matrix/common.js","webpack:///./node_modules/@antv/g/src/util/path.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-interpolate/src/value.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/@antv/g/src/util/format.js","webpack:///./node_modules/@antv/g/src/canvas/shape/math/line.js","webpack:///./node_modules/@antv/g/src/canvas/shape/math/quadratic.js","webpack:///./node_modules/@antv/g/src/canvas/shape/math/arc.js","webpack:///./node_modules/@antv/g/src/canvas/shape/rect.js","webpack:///./node_modules/@antv/g/src/canvas/shape/util/path-segment.js","webpack:///./node_modules/@antv/g/src/canvas/shape/marker.js","webpack:///./node_modules/@antv/g/src/index.js","webpack:///./node_modules/@antv/g/src/util/dom.js","webpack:///./node_modules/@antv/g/src/svg/event.js","webpack:///./node_modules/@antv/g/src/svg/core/group.js","webpack:///./node_modules/@antv/g/src/util/mixin/animate.js","webpack:///./node_modules/d3-color/src/math.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3-interpolate/src/array.js","webpack:///./node_modules/d3-interpolate/src/date.js","webpack:///./node_modules/d3-interpolate/src/object.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/wolfy87-eventemitter/EventEmitter.js","webpack:///./node_modules/@antv/g/src/svg/shape/rect.js","webpack:///./node_modules/@antv/g/src/svg/shape/circle.js","webpack:///./node_modules/@antv/g/src/svg/shape/ellipse.js","webpack:///./node_modules/@antv/g/src/svg/shape/path.js","webpack:///./node_modules/@antv/g/src/svg/shape/text.js","webpack:///./node_modules/@antv/g/src/svg/shape/line.js","webpack:///./node_modules/@antv/g/src/svg/shape/image.js","webpack:///./node_modules/@antv/g/src/svg/shape/polygon.js","webpack:///./node_modules/@antv/g/src/svg/shape/marker.js","webpack:///./node_modules/@antv/g/src/svg/shape/dom.js","webpack:///./node_modules/@antv/g/src/svg/shape/fan.js","webpack:///./node_modules/@antv/g/src/canvas/event.js","webpack:///./node_modules/@antv/g/src/canvas/core/group.js","webpack:///./node_modules/@antv/g/src/canvas/core/element.js","webpack:///./node_modules/@antv/g/src/canvas/shape/circle.js","webpack:///./node_modules/@antv/g/src/canvas/shape/ellipse.js","webpack:///./node_modules/@antv/g/src/canvas/shape/path.js","webpack:///./node_modules/@antv/g/src/canvas/shape/text.js","webpack:///./node_modules/@antv/g/src/canvas/shape/line.js","webpack:///./node_modules/@antv/g/src/canvas/shape/image.js","webpack:///./node_modules/@antv/g/src/canvas/shape/polygon.js","webpack:///./node_modules/@antv/g/src/canvas/shape/polyline.js","webpack:///./node_modules/@antv/g/src/canvas/shape/arc.js","webpack:///./node_modules/@antv/g/src/canvas/shape/fan.js","webpack:///./node_modules/@antv/g/src/canvas/shape/cubic.js","webpack:///./node_modules/@antv/g/src/canvas/shape/quadratic.js","webpack:///./src/index.js","webpack:///./node_modules/@antv/g/src/svg/index.js","webpack:///./node_modules/@antv/g/src/svg/canvas.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/@antv/g/src/svg/core/mixin/attribute.js","webpack:///./node_modules/@antv/g/src/svg/core/mixin/transform.js","webpack:///./node_modules/gl-matrix/src/gl-matrix/mat3.js","webpack:///./node_modules/gl-matrix/src/gl-matrix/vec3.js","webpack:///./node_modules/gl-matrix/src/gl-matrix/vec2.js","webpack:///./node_modules/d3-ease/index.js","webpack:///./node_modules/d3-ease/src/linear.js","webpack:///./node_modules/d3-ease/src/quad.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-ease/src/poly.js","webpack:///./node_modules/d3-ease/src/sin.js","webpack:///./node_modules/d3-ease/src/exp.js","webpack:///./node_modules/d3-ease/src/circle.js","webpack:///./node_modules/d3-ease/src/bounce.js","webpack:///./node_modules/d3-ease/src/back.js","webpack:///./node_modules/d3-ease/src/elastic.js","webpack:///./node_modules/d3-timer/index.js","webpack:///./node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3-timer/src/interval.js","webpack:///./node_modules/d3-interpolate/index.js","webpack:///./node_modules/d3-color/src/lab.js","webpack:///./node_modules/d3-color/src/cubehelix.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3-interpolate/src/hsl.js","webpack:///./node_modules/d3-interpolate/src/lab.js","webpack:///./node_modules/d3-interpolate/src/hcl.js","webpack:///./node_modules/d3-interpolate/src/cubehelix.js","webpack:///./node_modules/d3-interpolate/src/quantize.js","webpack:///./node_modules/@antv/g/src/svg/shape/index.js","webpack:///./node_modules/@antv/g/src/svg/core/defs.js","webpack:///./node_modules/@antv/g/src/svg/defs/gradient.js","webpack:///./node_modules/@antv/g/src/svg/defs/shadow.js","webpack:///./node_modules/@antv/g/src/svg/defs/arrow.js","webpack:///./node_modules/@antv/g/src/svg/defs/clip.js","webpack:///./node_modules/@antv/g/src/canvas/index.js","webpack:///./node_modules/@antv/g/src/canvas/canvas.js","webpack:///./node_modules/@antv/g/src/canvas/core/mixin/attribute.js","webpack:///./node_modules/@antv/g/src/util/mixin/transform.js","webpack:///./node_modules/@antv/g/src/canvas/shape/index.js","webpack:///./node_modules/@antv/g/src/canvas/shape/math/ellipse.js","webpack:///./node_modules/@antv/util/src/event/index.js","webpack:///./node_modules/@antv/util/src/event/getWrapBehavior.js","webpack:///./node_modules/@antv/util/src/event/wrapBehavior.js","webpack:///./src/brush.js","webpack:///./src/drag.js","webpack:///./src/zoom.js","webpack:///./src/helper/bindInteraction.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"interaction\"] = factory();\n\telse\n\t\troot[\"interaction\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \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 = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 68);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3de64a368ef50cc3ff8f","var CommonUtil = require('./common');\nvar DomUtil = require('./dom');\n\nvar Util = {};\n\nCommonUtil.merge(Util, CommonUtil, DomUtil, {\n mixin: function mixin(c, mixins) {\n var Param = c.CFG ? 'CFG' : 'ATTRS';\n if (c && mixins) {\n c._mixins = mixins;\n c[Param] = c[Param] || {};\n var temp = {};\n Util.each(mixins, function (mixin) {\n Util.augment(c, mixin);\n var attrs = mixin[Param];\n if (attrs) {\n Util.merge(temp, attrs);\n }\n });\n c[Param] = Util.merge(temp, c[Param]);\n }\n }\n});\n\nmodule.exports = Util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/util/index.js\n// module id = 0\n// module chunks = 0","var Util = require('../../util/index');\nvar Element = require('./element');\nvar Inside = require('../shape/util/inside');\n\nvar Shape = function Shape(cfg) {\n Shape.superclass.constructor.call(this, cfg);\n};\n\nShape.ATTRS = {};\n\nUtil.extend(Shape, Element);\n\nUtil.augment(Shape, {\n isShape: true,\n createPath: function createPath() {},\n afterPath: function afterPath() {},\n drawInner: function drawInner(context) {\n var self = this;\n var attrs = self.__attrs;\n self.createPath(context);\n var originOpacity = context.globalAlpha;\n if (self.hasFill()) {\n var fillOpacity = attrs.fillOpacity;\n if (!Util.isNil(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n context.fill();\n context.globalAlpha = originOpacity;\n } else {\n context.fill();\n }\n }\n if (self.hasStroke()) {\n var lineWidth = self.__attrs.lineWidth;\n if (lineWidth > 0) {\n var strokeOpacity = attrs.strokeOpacity;\n if (!Util.isNil(strokeOpacity) && strokeOpacity !== 1) {\n context.globalAlpha = strokeOpacity;\n }\n context.stroke();\n }\n }\n self.afterPath(context);\n },\n\n /**\n * 节点是否在图形中\n * @param {Number} x x 坐标\n * @param {Number} y y 坐标\n * @return {Boolean} 是否在图形中\n */\n isPointInPath: function isPointInPath() {\n return false;\n },\n\n /**\n * 击中图形时是否进行包围盒判断\n * @return {Boolean} [description]\n */\n isHitBox: function isHitBox() {\n return true;\n },\n\n /**\n * 节点是否能够被击中\n * @param {Number} x x坐标\n * @param {Number} y y坐标\n * @return {Boolean} 是否在图形中\n */\n isHit: function isHit(x, y) {\n var self = this;\n var v = [x, y, 1];\n self.invert(v); // canvas\n\n if (self.isHitBox()) {\n var box = self.getBBox();\n if (box && !Inside.box(box.minX, box.maxX, box.minY, box.maxY, v[0], v[1])) {\n return false;\n }\n }\n var clip = self.__attrs.clip;\n if (clip) {\n if (clip.inside(x, y)) {\n return self.isPointInPath(v[0], v[1]);\n }\n } else {\n return self.isPointInPath(v[0], v[1]);\n }\n return false;\n },\n\n /**\n * @protected\n * 计算包围盒\n * @return {Object} 包围盒\n */\n calculateBox: function calculateBox() {\n return null;\n },\n\n // 获取拾取时线的宽度,需要考虑附加的线的宽度\n getHitLineWidth: function getHitLineWidth() {\n var attrs = this.__attrs;\n // if (!attrs.stroke) {\n // return 0;\n // }\n var lineAppendWidth = attrs.lineAppendWidth || 0;\n var lineWidth = attrs.lineWidth || 0;\n return lineWidth + lineAppendWidth;\n },\n\n // 清除当前的矩阵\n clearTotalMatrix: function clearTotalMatrix() {\n this.__cfg.totalMatrix = null;\n this.__cfg.region = null;\n },\n clearBBox: function clearBBox() {\n this.__cfg.box = null;\n this.__cfg.region = null;\n },\n getBBox: function getBBox() {\n var box = this.__cfg.box;\n // 延迟计算\n if (!box) {\n box = this.calculateBox();\n if (box) {\n box.x = box.minX;\n box.y = box.minY;\n box.width = box.maxX - box.minX;\n box.height = box.maxY - box.minY;\n }\n this.__cfg.box = box;\n }\n return box;\n }\n});\n\nmodule.exports = Shape;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/core/shape.js\n// module id = 1\n// module chunks = 0","var CommonUtil = require('./common');\nvar mat3 = require('gl-matrix/src/gl-matrix/mat3');\nvar vec3 = require('gl-matrix/src/gl-matrix/vec3');\nvar vec2 = require('gl-matrix/src/gl-matrix/vec2');\n\nvec2.angle = function (v1, v2) {\n var theta = vec2.dot(v1, v2) / (vec2.length(v1) * vec2.length(v2));\n return Math.acos(CommonUtil.clamp(theta, -1, 1));\n};\n/**\n * 向量 v1 到 向量 v2 夹角的方向\n * @param {Array} v1 向量\n * @param {Array} v2 向量\n * @return {Boolean} >= 0 顺时针 < 0 逆时针\n */\nvec2.direction = function (v1, v2) {\n return v1[0] * v2[1] - v2[0] * v1[1];\n};\nvec2.angleTo = function (v1, v2, direct) {\n var angle = vec2.angle(v1, v2);\n var angleLargeThanPI = vec2.direction(v1, v2) >= 0;\n if (direct) {\n if (angleLargeThanPI) {\n return Math.PI * 2 - angle;\n }\n\n return angle;\n }\n\n if (angleLargeThanPI) {\n return angle;\n }\n return Math.PI * 2 - angle;\n};\nvec2.vertical = function (out, v, flag) {\n if (flag) {\n out[0] = v[1];\n out[1] = -1 * v[0];\n } else {\n out[0] = -1 * v[1];\n out[1] = v[0];\n }\n\n return out;\n};\n\nmat3.translate = function (out, a, v) {\n var transMat = new Array(9);\n mat3.fromTranslation(transMat, v);\n return mat3.multiply(out, transMat, a);\n};\n\nmat3.rotate = function (out, a, rad) {\n var rotateMat = new Array(9);\n mat3.fromRotation(rotateMat, rad);\n return mat3.multiply(out, rotateMat, a);\n};\n\nmat3.scale = function (out, a, v) {\n var scaleMat = new Array(9);\n mat3.fromScaling(scaleMat, v);\n return mat3.multiply(out, scaleMat, a);\n};\n\nmodule.exports = {\n mat3: mat3,\n vec2: vec2,\n vec3: vec3,\n transform: function transform(m, ts) {\n m = CommonUtil.clone(m);\n CommonUtil.each(ts, function (t) {\n switch (t[0]) {\n case 't':\n mat3.translate(m, m, [t[1], t[2]]);\n break;\n case 's':\n mat3.scale(m, m, [t[1], t[2]]);\n break;\n case 'r':\n mat3.rotate(m, m, t[1]);\n break;\n case 'm':\n mat3.multiply(m, m, t[1]);\n break;\n default:\n return false;\n }\n });\n return m;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/util/matrix.js\n// module id = 2\n// module chunks = 0","var Line = require('../math/line');\nvar Quadratic = require('../math/quadratic');\nvar Cubic = require('../math/cubic');\nvar Arc = require('../math/arc');\n\nmodule.exports = {\n line: function line(x1, y1, x2, y2, lineWidth, x, y) {\n var box = Line.box(x1, y1, x2, y2, lineWidth);\n\n if (!this.box(box.minX, box.maxX, box.minY, box.maxY, x, y)) {\n return false;\n }\n\n var d = Line.pointDistance(x1, y1, x2, y2, x, y);\n if (isNaN(d)) {\n return false;\n }\n return d <= lineWidth / 2;\n },\n polyline: function polyline(points, lineWidth, x, y) {\n var l = points.length - 1;\n if (l < 1) {\n return false;\n }\n for (var i = 0; i < l; i++) {\n var x1 = points[i][0];\n var y1 = points[i][1];\n var x2 = points[i + 1][0];\n var y2 = points[i + 1][1];\n\n if (this.line(x1, y1, x2, y2, lineWidth, x, y)) {\n return true;\n }\n }\n\n return false;\n },\n cubicline: function cubicline(x1, y1, x2, y2, x3, y3, x4, y4, lineWidth, x, y) {\n return Cubic.pointDistance(x1, y1, x2, y2, x3, y3, x4, y4, x, y) <= lineWidth / 2;\n },\n quadraticline: function quadraticline(x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n return Quadratic.pointDistance(x1, y1, x2, y2, x3, y3, x, y) <= lineWidth / 2;\n },\n arcline: function arcline(cx, cy, r, startAngle, endAngle, clockwise, lineWidth, x, y) {\n return Arc.pointDistance(cx, cy, r, startAngle, endAngle, clockwise, x, y) <= lineWidth / 2;\n },\n rect: function rect(rx, ry, width, height, x, y) {\n return rx <= x && x <= rx + width && ry <= y && y <= ry + height;\n },\n circle: function circle(cx, cy, r, x, y) {\n return Math.pow(x - cx, 2) + Math.pow(y - cy, 2) <= Math.pow(r, 2);\n },\n box: function box(minX, maxX, minY, maxY, x, y) {\n return minX <= x && x <= maxX && minY <= y && y <= maxY;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/util/inside.js\n// module id = 3\n// module chunks = 0","var Util = require('../../util/index');\nvar Element = require('./element');\n\nvar SHAPES = {\n rect: 'rect',\n circle: 'circle',\n line: 'line',\n path: 'path',\n marker: 'marker',\n text: 'text',\n polygon: 'polygon',\n image: 'image',\n ellipse: 'ellipse',\n dom: 'foreignObject',\n fan: 'path'\n};\n\nvar Shape = function Shape(cfg) {\n Shape.superclass.constructor.call(this, cfg);\n};\n\nShape.ATTRS = {};\n\nUtil.extend(Shape, Element);\n\nUtil.augment(Shape, {\n isShape: true,\n createPath: function createPath() {},\n init: function init(id) {\n Shape.superclass.init.call(this);\n var type = SHAPES[this.type];\n if (type) {\n var shape = document.createElementNS('http://www.w3.org/2000/svg', type);\n id = id || Util.uniqueId(this.type + '_');\n shape.setAttribute('id', id);\n this.setSilent('el', shape);\n this.setSilent('id', id);\n }\n },\n\n /**\n * 节点是否在图形中\n * @param {Number} x x 坐标\n * @param {Number} y y 坐标\n * @return {Boolean} 是否在图形中\n */\n isPointInPath: function isPointInPath() {\n return false;\n },\n\n /**\n * 击中图形时是否进行包围盒判断\n * @return {Boolean} [description]\n */\n isHitBox: function isHitBox() {\n return true;\n },\n\n /**\n * 节点是否能够被击中\n * @return {Boolean} 是否在图形中\n */\n isHit: function isHit() {\n return false;\n },\n\n /**\n * @protected\n * @protected\n * 计算包围盒\n * @return {Object} 包围盒\n */\n calculateBox: function calculateBox() {\n return null;\n },\n\n // 获取拾取时线的宽度,需要考虑附加的线的宽度\n getHitLineWidth: function getHitLineWidth() {\n var attrs = this.__attrs;\n // if (!attrs.stroke) {\n // return 0;\n // }\n var lineAppendWidth = attrs.lineAppendWidth || 0;\n var lineWidth = attrs.lineWidth || 0;\n return lineWidth + lineAppendWidth;\n },\n\n // 清除当前的矩阵\n clearTotalMatrix: function clearTotalMatrix() {\n this.__cfg.totalMatrix = null;\n this.__cfg.region = null;\n },\n clearBBox: function clearBBox() {\n this.__cfg.box = null;\n this.__cfg.region = null;\n }\n});\n\nmodule.exports = Shape;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/core/shape.js\n// module id = 4\n// module chunks = 0","export { default as color, rgb, hsl } from \"./src/color\";\nexport { default as lab, hcl, lch, gray } from \"./src/lab\";\nexport { default as cubehelix } from \"./src/cubehelix\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-color/index.js\n// module id = 5\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar Marker = require('../marker');\nvar Util = require('../../../util/index');\n\nvar PI = Math.PI;\nvar sin = Math.sin;\nvar cos = Math.cos;\nvar atan2 = Math.atan2;\nvar DEFAULT_LENGTH = 10;\nvar DEFAULT_ANGLE = PI / 3;\n\nfunction _addArrow(ctx, attrs, x1, y1, x2, y2) {\n var leftX = void 0;\n var leftY = void 0;\n var rightX = void 0;\n var rightY = void 0;\n var offsetX = void 0;\n var offsetY = void 0;\n var angle = void 0;\n\n if (!attrs.fill) {\n // 闭合的不绘制箭头\n var arrowLength = attrs.arrowLength || DEFAULT_LENGTH;\n var arrowAngle = attrs.arrowAngle ? attrs.arrowAngle * PI / 180 : DEFAULT_ANGLE; // 转换为弧\n // Calculate angle\n angle = atan2(y2 - y1, x2 - x1);\n // Adjust angle correctly\n angle -= PI;\n // Calculate offset to place arrow at edge of path\n offsetX = attrs.lineWidth * cos(angle);\n offsetY = attrs.lineWidth * sin(angle);\n\n // Calculate coordinates for left half of arrow\n leftX = x2 + arrowLength * cos(angle + arrowAngle / 2);\n leftY = y2 + arrowLength * sin(angle + arrowAngle / 2);\n // Calculate coordinates for right half of arrow\n rightX = x2 + arrowLength * cos(angle - arrowAngle / 2);\n rightY = y2 + arrowLength * sin(angle - arrowAngle / 2);\n ctx.beginPath();\n // Draw left half of arrow\n ctx.moveTo(leftX - offsetX, leftY - offsetY);\n ctx.lineTo(x2 - offsetX, y2 - offsetY);\n // Draw right half of arrow\n ctx.lineTo(rightX - offsetX, rightY - offsetY);\n\n // Visually connect arrow to path\n ctx.moveTo(x2 - offsetX, y2 - offsetY);\n ctx.lineTo(x2 + offsetX, y2 + offsetY);\n // Move back to end of path\n ctx.moveTo(x2, y2);\n ctx.stroke();\n }\n}\n\nfunction _addMarker(ctx, attrs, x1, y1, x2, y2, shape) {\n var marker = shape.__attrs;\n var method = marker.symbol;\n var markerX = marker.x || x2;\n var markerY = marker.y || y2;\n var markerR = marker.r || attrs.lineWidth;\n if (!Util.isFunction(method)) {\n method = Marker.Symbols[method || 'triangle'];\n }\n var deg = 0;\n var x = x1 - x2;\n var y = y1 - y2;\n if (y === 0) {\n if (x < 0) {\n deg = Math.PI / 2;\n } else {\n deg = 270 * Math.PI / 180;\n }\n } else if (x >= 0 && y > 0) {\n deg = -Math.atan(x / y);\n } else if (x <= 0 && y < 0) {\n deg = Math.PI - Math.atan(x / y);\n } else if (x > 0 && y < 0) {\n deg = Math.PI + Math.atan(-x / y);\n } else if (x < 0 && y > 0) {\n deg = Math.atan(x / -y);\n }\n ctx.save();\n ctx.beginPath();\n ctx.translate(markerX, markerY);\n ctx.rotate(deg);\n ctx.translate(-markerX, -markerY);\n method(markerX, markerY, markerR, ctx, shape);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.fillStyle = shape.attr('fill') || ctx.strokeStyle;\n ctx.fill();\n ctx.restore();\n}\n\nmodule.exports = {\n addStartArrow: function addStartArrow(ctx, attrs, x1, y1, x2, y2) {\n if (_typeof(attrs.startArrow) === 'object') {\n _addMarker(ctx, attrs, x1, y1, x2, y2, attrs.startArrow);\n } else if (attrs.startArrow) {\n _addArrow(ctx, attrs, x1, y1, x2, y2);\n }\n },\n addEndArrow: function addEndArrow(ctx, attrs, x1, y1, x2, y2) {\n if (_typeof(attrs.endArrow) === 'object') {\n _addMarker(ctx, attrs, x1, y1, x2, y2, attrs.endArrow);\n } else if (attrs.endArrow) {\n _addArrow(ctx, attrs, x1, y1, x2, y2);\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/util/arrow.js\n// module id = 6\n// module chunks = 0","var Util = require('@antv/util');\n\nmodule.exports = {\n isFunction: Util.isFunction,\n isObject: Util.isObject,\n isBoolean: Util.isBoolean,\n isNil: Util.isNil,\n isString: Util.isString,\n isArray: Util.isArray,\n isNumber: Util.isNumber,\n isEmpty: Util.isEmpty, // isBlank\n uniqueId: Util.uniqueId,\n clone: Util.clone,\n assign: Util.mix, // simpleMix\n merge: Util.deepMix, // mix\n upperFirst: Util.upperFirst, // ucfirst\n each: Util.each,\n isEqual: Util.isEqual,\n toArray: Util.toArray,\n extend: Util.extend,\n augment: Util.augment,\n remove: Util.arrayUtil.pull,\n isNumberEqual: Util.isNumberEqual,\n toRadian: Util.toRadian,\n toDegree: Util.toDegree,\n mod: Util.mod,\n clamp: Util.clamp\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/util/common.js\n// module id = 7\n// module chunks = 0","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function (t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function (t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function (a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/color.js\n// module id = 8\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// const Global = require('../global');\nvar G = require('@antv/g/src');\nvar EventUtil = require('@antv/util/src/event');\nvar DomUtil = G.DomUtil;\nvar CommonUtil = G.CommonUtil;\n// const View = require('../chart/view');\n// const G2 = require('../core.js');\n\nvar assign = CommonUtil.assign;\n\nvar EVENT_TYPES = ['start', 'process', 'end', 'reset'];\n\nvar Interaction = function () {\n Interaction.prototype.getDefaultCfg = function getDefaultCfg() {\n return {\n startEvent: 'mousedown',\n processEvent: 'mousemove',\n endEvent: 'mouseup',\n resetEvent: 'dblclick'\n };\n };\n\n Interaction.prototype._start = function _start(ev) {\n var me = this;\n me.preStart && me.preStart(ev);\n me.start(ev);\n me.onStart && me.onStart(ev);\n };\n\n Interaction.prototype._process = function _process(ev) {\n var me = this;\n me.preProcess && me.preProcess(ev);\n me.process(ev);\n me.onProcess && me.onProcess(ev);\n };\n\n Interaction.prototype._end = function _end(ev) {\n var me = this;\n me.preEnd && me.preEnd(ev);\n me.end(ev);\n me.onEnd && me.onEnd(ev);\n };\n\n Interaction.prototype._reset = function _reset(ev) {\n var me = this;\n me.preReset && me.preReset(ev);\n me.reset(ev);\n me.onReset && me.onReset(ev);\n };\n\n Interaction.prototype.start = function start() {\n // TODO override\n };\n\n Interaction.prototype.process = function process() {\n // TODO override\n };\n\n Interaction.prototype.end = function end() {\n // TODO override\n };\n\n Interaction.prototype.reset = function reset() {\n // TODO override\n };\n\n function Interaction(cfg, view) {\n _classCallCheck(this, Interaction);\n\n var me = this;\n var defaultCfg = me.getDefaultCfg();\n assign(me, defaultCfg, cfg);\n me.view = view;\n me.canvas = view.get('canvas');\n me._bindEvents();\n }\n\n Interaction.prototype._bindEvents = function _bindEvents() {\n var me = this;\n var canvas = me.canvas;\n var canvasDOM = canvas.get('canvasDOM');\n me._clearEvents();\n CommonUtil.each(EVENT_TYPES, function (type) {\n var ucType = CommonUtil.upperFirst(type);\n me['_on' + ucType + 'Listener'] = DomUtil.addEventListener(canvasDOM, me[type + 'Event'], EventUtil.wrapBehavior(me, '_' + type));\n });\n };\n\n Interaction.prototype._clearEvents = function _clearEvents() {\n var me = this;\n CommonUtil.each(EVENT_TYPES, function (type) {\n var listenerName = '_on' + CommonUtil.upperFirst(type) + 'Listener';\n me[listenerName] && me[listenerName].remove();\n });\n };\n\n Interaction.prototype.destroy = function destroy() {\n this._clearEvents();\n };\n\n return Interaction;\n}();\n\nmodule.exports = Interaction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/base.js\n// module id = 9\n// module chunks = 0","var _typeof2 = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n(function webpackUniversalModuleDefinition(root, factory) {\n if ((typeof exports === 'undefined' ? 'undefined' : _typeof2(exports)) === 'object' && (typeof module === 'undefined' ? 'undefined' : _typeof2(module)) === 'object') module.exports = factory();else if (typeof define === 'function' && define.amd) define([], factory);else if ((typeof exports === 'undefined' ? 'undefined' : _typeof2(exports)) === 'object') exports[\"Util\"] = factory();else root[\"Util\"] = factory();\n})(this, function () {\n return (/******/function (modules) {\n // webpackBootstrap\n /******/ // The module cache\n /******/var installedModules = {};\n /******/\n /******/ // The require function\n /******/function __webpack_require__(moduleId) {\n /******/\n /******/ // Check if module is in cache\n /******/if (installedModules[moduleId]) {\n /******/return installedModules[moduleId].exports;\n /******/\n }\n /******/ // Create a new module (and put it into the cache)\n /******/var module = installedModules[moduleId] = {\n /******/i: moduleId,\n /******/l: false,\n /******/exports: {}\n /******/ };\n /******/\n /******/ // Execute the module function\n /******/modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n /******/\n /******/ // Flag the module as loaded\n /******/module.l = true;\n /******/\n /******/ // Return the exports of the module\n /******/return module.exports;\n /******/\n }\n /******/\n /******/\n /******/ // expose the modules object (__webpack_modules__)\n /******/__webpack_require__.m = modules;\n /******/\n /******/ // expose the module cache\n /******/__webpack_require__.c = installedModules;\n /******/\n /******/ // define getter function for harmony exports\n /******/__webpack_require__.d = function (exports, name, getter) {\n /******/if (!__webpack_require__.o(exports, name)) {\n /******/Object.defineProperty(exports, name, {\n /******/configurable: false,\n /******/enumerable: true,\n /******/get: getter\n /******/ });\n /******/\n }\n /******/\n };\n /******/\n /******/ // getDefaultExport function for compatibility with non-harmony modules\n /******/__webpack_require__.n = function (module) {\n /******/var getter = module && module.__esModule ?\n /******/function getDefault() {\n return module['default'];\n } :\n /******/function getModuleExports() {\n return module;\n };\n /******/__webpack_require__.d(getter, 'a', getter);\n /******/return getter;\n /******/\n };\n /******/\n /******/ // Object.prototype.hasOwnProperty.call\n /******/__webpack_require__.o = function (object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n };\n /******/\n /******/ // __webpack_public_path__\n /******/__webpack_require__.p = \"\";\n /******/\n /******/ // Load entry module and return exports\n /******/return __webpack_require__(__webpack_require__.s = 22);\n /******/\n }(\n /************************************************************************/\n /******/[\n /* 0 */\n /***/function (module, exports, __webpack_require__) {\n\n var isType = __webpack_require__(3);\n\n var isArray = Array.isArray ? Array.isArray : function (value) {\n return isType(value, 'Array');\n };\n\n module.exports = isArray;\n\n /***/\n },\n /* 1 */\n /***/function (module, exports, __webpack_require__) {\n\n var isObject = __webpack_require__(12);\n var isArray = __webpack_require__(0);\n\n var each = function each(elements, func) {\n if (!elements) {\n return;\n }\n var rst = void 0;\n if (isArray(elements)) {\n for (var i = 0, len = elements.length; i < len; i++) {\n rst = func(elements[i], i);\n if (rst === false) {\n break;\n }\n }\n } else if (isObject(elements)) {\n for (var k in elements) {\n if (elements.hasOwnProperty(k)) {\n rst = func(elements[k], k);\n if (rst === false) {\n break;\n }\n }\n }\n }\n };\n\n module.exports = each;\n\n /***/\n },\n /* 2 */\n /***/function (module, exports) {\n\n var isArrayLike = function isArrayLike(value) {\n /**\n * isArrayLike([1, 2, 3]) => true\n * isArrayLike(document.body.children) => true\n * isArrayLike('abc') => true\n * isArrayLike(Function) => false\n */\n return value !== null && typeof value !== 'function' && isFinite(value.length);\n };\n\n module.exports = isArrayLike;\n\n /***/\n },\n /* 3 */\n /***/function (module, exports) {\n\n var toString = {}.toString;\n var isType = function isType(value, type) {\n return toString.call(value) === '[object ' + type + ']';\n };\n\n module.exports = isType;\n\n /***/\n },\n /* 4 */\n /***/function (module, exports, __webpack_require__) {\n\n /**\n * 判断是否数字\n * @return {Boolean} 是否数字\n */\n var isType = __webpack_require__(3);\n\n var isNumber = function isNumber(value) {\n return isType(value, 'Number');\n };\n module.exports = isNumber;\n\n /***/\n },\n /* 5 */\n /***/function (module, exports, __webpack_require__) {\n\n /**\n * 是否为函数\n * @param {*} fn 对象\n * @return {Boolean} 是否函数\n */\n var isType = __webpack_require__(3);\n\n var isFunction = function isFunction(value) {\n return isType(value, 'Function');\n };\n\n module.exports = isFunction;\n\n /***/\n },\n /* 6 */\n /***/function (module, exports) {\n\n // isFinite,\n var isNil = function isNil(value) {\n /**\n * isNil(null) => true\n * isNil() => true\n */\n return value === null || value === undefined;\n };\n\n module.exports = isNil;\n\n /***/\n },\n /* 7 */\n /***/function (module, exports, __webpack_require__) {\n\n var isObjectLike = __webpack_require__(8);\n var isType = __webpack_require__(3);\n\n var isPlainObject = function isPlainObject(value) {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n * isObjectLike(Object.create(null)) => true\n */\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n var proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n };\n\n module.exports = isPlainObject;\n\n /***/\n },\n /* 8 */\n /***/function (module, exports) {\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n };\n\n var isObjectLike = function isObjectLike(value) {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n * isObjectLike(null) => false\n */\n return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null;\n };\n\n module.exports = isObjectLike;\n\n /***/\n },\n /* 9 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArrayLike = __webpack_require__(2);\n\n function toArray(value) {\n return isArrayLike(value) ? Array.prototype.slice.call(value) : [];\n }\n\n module.exports = toArray;\n\n /***/\n },\n /* 10 */\n /***/function (module, exports) {\n\n function _mix(dist, obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n dist[key] = obj[key];\n }\n }\n }\n\n var mix = function mix(dist, src1, src2, src3) {\n if (src1) _mix(dist, src1);\n if (src2) _mix(dist, src2);\n if (src3) _mix(dist, src3);\n return dist;\n };\n\n module.exports = mix;\n\n /***/\n },\n /* 11 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArrayLike = __webpack_require__(2);\n\n var indexOf = Array.prototype.indexOf;\n\n var contains = function contains(arr, value) {\n if (!isArrayLike(arr)) {\n return false;\n }\n return indexOf.call(arr, value) > -1;\n };\n\n module.exports = contains;\n\n /***/\n },\n /* 12 */\n /***/function (module, exports) {\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n };\n\n var isObject = function isObject(value) {\n /**\n * isObject({}) => true\n * isObject([1, 2, 3]) => true\n * isObject(Function) => true\n * isObject(null) => false\n */\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n return value !== null && type === 'object' || type === 'function';\n };\n\n module.exports = isObject;\n\n /***/\n },\n /* 13 */\n /***/function (module, exports, __webpack_require__) {\n\n var each = __webpack_require__(1);\n var isArrayLike = __webpack_require__(2);\n\n var filter = function filter(arr, func) {\n if (!isArrayLike(arr)) {\n return arr;\n }\n var result = [];\n each(arr, function (value, index) {\n if (func(value, index)) {\n result.push(value);\n }\n });\n return result;\n };\n\n module.exports = filter;\n\n /***/\n },\n /* 14 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArrayLike = __webpack_require__(2);\n\n var splice = Array.prototype.splice;\n\n var pullAt = function pullAt(arr, indexes) {\n if (!isArrayLike(arr)) {\n return [];\n }\n var length = arr ? indexes.length : 0;\n var last = length - 1;\n\n while (length--) {\n var previous = void 0;\n var index = indexes[length];\n if (length === last || index !== previous) {\n previous = index;\n splice.call(arr, index, 1);\n }\n }\n return arr;\n };\n\n module.exports = pullAt;\n\n /***/\n },\n /* 15 */\n /***/function (module, exports) {\n\n module.exports = parseInt;\n\n /***/\n },\n /* 16 */\n /***/function (module, exports) {\n\n var toString = {}.toString;\n\n var getType = function getType(value) {\n return toString.call(value).replace(/^\\[object /, '').replace(/\\]$/, '');\n };\n\n module.exports = getType;\n\n /***/\n },\n /* 17 */\n /***/function (module, exports) {\n\n var objectProto = Object.prototype;\n var isPrototype = function isPrototype(value) {\n var Ctor = value && value.constructor;\n var proto = typeof Ctor === 'function' && Ctor.prototype || objectProto;\n return value === proto;\n };\n\n module.exports = isPrototype;\n\n /***/\n },\n /* 18 */\n /***/function (module, exports, __webpack_require__) {\n\n var isType = __webpack_require__(3);\n\n var isString = function isString(str) {\n return isType(str, 'String');\n };\n\n module.exports = isString;\n\n /***/\n },\n /* 19 */\n /***/function (module, exports, __webpack_require__) {\n\n var isFunction = __webpack_require__(5);\n var isArray = __webpack_require__(0);\n var groupBy = __webpack_require__(20);\n\n var groupToMap = function groupToMap(data, condition) {\n if (!condition) {\n return {\n 0: data\n };\n }\n if (!isFunction(condition)) {\n var paramsCondition = isArray(condition) ? condition : condition.replace(/\\s+/g, '').split('*');\n condition = function condition(row) {\n var unique = '_'; // 避免出现数字作为Key的情况,会进行按照数字的排序\n for (var i = 0, l = paramsCondition.length; i < l; i++) {\n unique += row[paramsCondition[i]] && row[paramsCondition[i]].toString();\n }\n return unique;\n };\n }\n var groups = groupBy(data, condition);\n return groups;\n };\n\n module.exports = groupToMap;\n\n /***/\n },\n /* 20 */\n /***/function (module, exports, __webpack_require__) {\n\n var each = __webpack_require__(1);\n var isArray = __webpack_require__(0);\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var groupBy = function groupBy(data, condition) {\n if (!condition || !isArray(data)) {\n return data;\n }\n var result = {};\n var key = null;\n each(data, function (item) {\n key = condition(item);\n if (hasOwnProperty.call(result, key)) {\n result[key].push(item);\n } else {\n result[key] = [item];\n }\n });\n return result;\n };\n\n module.exports = groupBy;\n\n /***/\n },\n /* 21 */\n /***/function (module, exports, __webpack_require__) {\n\n var isObjectLike = __webpack_require__(8);\n var isArrayLike = __webpack_require__(2);\n var isString = __webpack_require__(18);\n\n var isEqual = function isEqual(value, other) {\n if (value === other) {\n return true;\n }\n if (!value || !other) {\n return false;\n }\n if (isString(value) || isString(other)) {\n return false;\n }\n if (isArrayLike(value) || isArrayLike(other)) {\n if (value.length !== other.length) {\n return false;\n }\n var rst = true;\n for (var i = 0; i < value.length; i++) {\n rst = isEqual(value[i], other[i]);\n if (!rst) {\n break;\n }\n }\n return rst;\n }\n if (isObjectLike(value) || isObjectLike(other)) {\n var valueKeys = Object.keys(value);\n var otherKeys = Object.keys(other);\n if (valueKeys.length !== otherKeys.length) {\n return false;\n }\n var _rst = true;\n for (var _i = 0; _i < valueKeys.length; _i++) {\n _rst = isEqual(value[valueKeys[_i]], other[valueKeys[_i]]);\n if (!_rst) {\n break;\n }\n }\n return _rst;\n }\n return false;\n };\n\n module.exports = isEqual;\n\n /***/\n },\n /* 22 */\n /***/function (module, exports, __webpack_require__) {\n\n var arrayUtil = __webpack_require__(23);\n var eventUtil = __webpack_require__(34);\n var mathUtil = __webpack_require__(37);\n var stringUtil = __webpack_require__(52);\n var typeUtil = __webpack_require__(53);\n var each = __webpack_require__(1);\n var mix = __webpack_require__(10);\n\n var util = {\n // collections\n arrayUtil: arrayUtil,\n eventUtil: eventUtil,\n mathUtil: mathUtil,\n stringUtil: stringUtil,\n typeUtil: typeUtil,\n // others\n augment: __webpack_require__(58),\n clone: __webpack_require__(59),\n deepMix: __webpack_require__(60),\n each: each,\n extend: __webpack_require__(61),\n filter: __webpack_require__(13),\n group: __webpack_require__(62),\n groupBy: __webpack_require__(20),\n groupToMap: __webpack_require__(19),\n indexOf: __webpack_require__(63),\n isEmpty: __webpack_require__(64),\n isEqual: __webpack_require__(21),\n isEqualWith: __webpack_require__(65),\n map: __webpack_require__(66),\n mix: mix,\n pick: __webpack_require__(67),\n toArray: __webpack_require__(9),\n uniqueId: __webpack_require__(68)\n };\n\n each([arrayUtil, eventUtil, mathUtil, stringUtil, typeUtil], function (collection) {\n mix(util, collection);\n });\n\n module.exports = util;\n\n /***/\n },\n /* 23 */\n /***/function (module, exports, __webpack_require__) {\n\n module.exports = {\n contains: __webpack_require__(11),\n firstValue: __webpack_require__(24),\n flatten: __webpack_require__(25),\n getRange: __webpack_require__(26),\n merge: __webpack_require__(27),\n pull: __webpack_require__(28),\n pullAt: __webpack_require__(14),\n reduce: __webpack_require__(29),\n remove: __webpack_require__(30),\n union: __webpack_require__(31),\n uniq: __webpack_require__(32),\n values: __webpack_require__(33)\n };\n\n /***/\n },\n /* 24 */\n /***/function (module, exports, __webpack_require__) {\n\n var isNil = __webpack_require__(6);\n var isArray = __webpack_require__(0);\n\n var firstValue = function firstValue(data, name) {\n var rst = null;\n for (var i = 0; i < data.length; i++) {\n var obj = data[i];\n var value = obj[name];\n if (!isNil(value)) {\n if (isArray(value)) {\n rst = value[0];\n } else {\n rst = value;\n }\n break;\n }\n }\n return rst;\n };\n\n module.exports = firstValue;\n\n /***/\n },\n /* 25 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArray = __webpack_require__(0);\n var each = __webpack_require__(1);\n\n /**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]); // => [1, 2, [3, [4]], 5]\n */\n var flatten = function flatten(arr) {\n if (!isArray(arr)) {\n return arr;\n }\n var result = [];\n each(arr, function (item) {\n if (isArray(item)) {\n each(item, function (subItem) {\n result.push(subItem);\n });\n } else {\n result.push(item);\n }\n });\n return result;\n };\n\n module.exports = flatten;\n\n /***/\n },\n /* 26 */\n /***/function (module, exports, __webpack_require__) {\n\n var filter = __webpack_require__(13);\n var isArray = __webpack_require__(0);\n\n var getRange = function getRange(values) {\n // 存在 NaN 时,min,max 判定会出问题\n values = filter(values, function (v) {\n return !isNaN(v);\n });\n if (!values.length) {\n // 如果没有数值则直接返回0\n return {\n min: 0,\n max: 0\n };\n }\n if (isArray(values[0])) {\n var tmp = [];\n for (var i = 0; i < values.length; i++) {\n tmp = tmp.concat(values[i]);\n }\n values = tmp;\n }\n var max = Math.max.apply(null, values);\n var min = Math.min.apply(null, values);\n return {\n min: min,\n max: max\n };\n };\n\n module.exports = getRange;\n\n /***/\n },\n /* 27 */\n /***/function (module, exports) {\n\n var merge = function merge(dataArray) {\n var rst = [];\n for (var i = 0; i < dataArray.length; i++) {\n rst = rst.concat(dataArray[i]);\n }\n return rst;\n };\n\n module.exports = merge;\n\n /***/\n },\n /* 28 */\n /***/function (module, exports) {\n\n var arrPrototype = Array.prototype;\n var splice = arrPrototype.splice;\n var indexOf = arrPrototype.indexOf;\n var slice = arrPrototype.slice;\n\n var pull = function pull(arr) {\n var values = slice.call(arguments, 1);\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n var fromIndex = -1;\n while ((fromIndex = indexOf.call(arr, value)) > -1) {\n splice.call(arr, fromIndex, 1);\n }\n }\n return arr;\n };\n\n module.exports = pull;\n\n /***/\n },\n /* 29 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArray = __webpack_require__(0);\n var isPlainObject = __webpack_require__(7);\n var each = __webpack_require__(1);\n\n var reduce = function reduce(arr, fn, init) {\n if (!isArray(arr) && !isPlainObject(arr)) {\n return arr;\n }\n var result = init;\n each(arr, function (data, i) {\n result = fn(result, data, i);\n });\n return result;\n };\n\n module.exports = reduce;\n\n /***/\n },\n /* 30 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArrayLike = __webpack_require__(2);\n var pullAt = __webpack_require__(14);\n\n var remove = function remove(arr, predicate) {\n /**\n * const arr = [1, 2, 3, 4]\n * const evens = remove(arr, n => n % 2 == 0)\n * console.log(arr) // => [1, 3]\n * console.log(evens) // => [2, 4]\n */\n var result = [];\n if (!isArrayLike(arr)) {\n return result;\n }\n var i = -1;\n var indexes = [];\n var length = arr.length;\n\n while (++i < length) {\n var value = arr[i];\n if (predicate(value, i, arr)) {\n result.push(value);\n indexes.push(i);\n }\n }\n pullAt(arr, indexes);\n return result;\n };\n\n module.exports = remove;\n\n /***/\n },\n /* 31 */\n /***/function (module, exports, __webpack_require__) {\n\n var each = __webpack_require__(1);\n var toArray = __webpack_require__(9);\n\n var union = function union() {\n var result = new Set();\n var values = [];\n each(arguments, function (arg) {\n values = toArray(arg);\n each(values, function (val) {\n result.add(val);\n });\n });\n return Array.from(result);\n };\n\n module.exports = union;\n\n /***/\n },\n /* 32 */\n /***/function (module, exports, __webpack_require__) {\n\n var contains = __webpack_require__(11);\n\n var uniq = function uniq(arr) {\n var resultArr = [];\n arr.forEach(function (item) {\n if (!contains(resultArr, item)) {\n resultArr.push(item);\n }\n });\n return resultArr;\n };\n\n module.exports = uniq;\n\n /***/\n },\n /* 33 */\n /***/function (module, exports, __webpack_require__) {\n\n var each = __webpack_require__(1);\n var isNil = __webpack_require__(6);\n var isArray = __webpack_require__(0);\n\n var values = function values(data, name) {\n var rst = [];\n var tmpMap = {};\n for (var i = 0; i < data.length; i++) {\n var obj = data[i];\n var value = obj[name];\n if (!isNil(value)) {\n if (!isArray(value)) {\n value = [value];\n }\n each(value, function (val) {\n if (!tmpMap[val]) {\n rst.push(val);\n tmpMap[val] = true;\n }\n });\n }\n }\n return rst;\n };\n\n module.exports = values;\n\n /***/\n },\n /* 34 */\n /***/function (module, exports, __webpack_require__) {\n\n module.exports = {\n getWrapBehavior: __webpack_require__(35),\n wrapBehavior: __webpack_require__(36)\n };\n\n /***/\n },\n /* 35 */\n /***/function (module, exports) {\n\n /**\n * 获取封装的事件\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\n function getWrapBehavior(obj, action) {\n return obj['_wrap_' + action];\n }\n\n module.exports = getWrapBehavior;\n\n /***/\n },\n /* 36 */\n /***/function (module, exports) {\n\n /**\n * 封装事件,便于使用上下文this,和便于解除事件时使用\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\n function wrapBehavior(obj, action) {\n if (obj['_wrap_' + action]) {\n return obj['_wrap_' + action];\n }\n var method = function method(e) {\n obj[action](e);\n };\n obj['_wrap_' + action] = method;\n return method;\n }\n\n module.exports = wrapBehavior;\n\n /***/\n },\n /* 37 */\n /***/function (module, exports, __webpack_require__) {\n\n module.exports = {\n clamp: __webpack_require__(38),\n fixedBase: __webpack_require__(39),\n isDecimal: __webpack_require__(40),\n isEven: __webpack_require__(41),\n isInteger: __webpack_require__(42),\n isNegative: __webpack_require__(43),\n isNumberEqual: __webpack_require__(44),\n isOdd: __webpack_require__(45),\n isPositive: __webpack_require__(46),\n maxBy: __webpack_require__(47),\n minBy: __webpack_require__(48),\n mod: __webpack_require__(49),\n toDegree: __webpack_require__(50),\n toInt: __webpack_require__(15),\n toInteger: __webpack_require__(15),\n toRadian: __webpack_require__(51)\n };\n\n /***/\n },\n /* 38 */\n /***/function (module, exports) {\n\n var clamp = function clamp(a, min, max) {\n if (a < min) {\n return min;\n } else if (a > max) {\n return max;\n }\n return a;\n };\n\n module.exports = clamp;\n\n /***/\n },\n /* 39 */\n /***/function (module, exports) {\n\n var fixedBase = function fixedBase(v, base) {\n var str = base.toString();\n var index = str.indexOf('.');\n if (index === -1) {\n return Math.round(v);\n }\n var length = str.substr(index + 1).length;\n if (length > 20) {\n length = 20;\n }\n return parseFloat(v.toFixed(length));\n };\n\n module.exports = fixedBase;\n\n /***/\n },\n /* 40 */\n /***/function (module, exports, __webpack_require__) {\n\n var isNumber = __webpack_require__(4);\n\n var isDecimal = function isDecimal(num) {\n return isNumber(num) && num % 1 !== 0;\n };\n\n module.exports = isDecimal;\n\n /***/\n },\n /* 41 */\n /***/function (module, exports, __webpack_require__) {\n\n var isNumber = __webpack_require__(4);\n\n var isEven = function isEven(num) {\n return isNumber(num) && num % 2 === 0;\n };\n\n module.exports = isEven;\n\n /***/\n },\n /* 42 */\n /***/function (module, exports, __webpack_require__) {\n\n var isNumber = __webpack_require__(4);\n\n var isInteger = Number.isInteger ? Number.isInteger : function (num) {\n return isNumber(num) && num % 1 === 0;\n };\n\n module.exports = isInteger;\n\n /***/\n },\n /* 43 */\n /***/function (module, exports, __webpack_require__) {\n\n var isNumber = __webpack_require__(4);\n\n var isNagative = function isNagative(num) {\n return isNumber(num) && num < 0;\n };\n\n module.exports = isNagative;\n\n /***/\n },\n /* 44 */\n /***/function (module, exports) {\n\n var PRECISION = 0.00001; // numbers less than this is considered as 0\n\n var isNumberEqual = function isNumberEqual(a, b) {\n return Math.abs(a - b) < PRECISION;\n };\n\n module.exports = isNumberEqual;\n\n /***/\n },\n /* 45 */\n /***/function (module, exports, __webpack_require__) {\n\n var isNumber = __webpack_require__(4);\n\n var isOdd = function isOdd(num) {\n return isNumber(num) && num % 2 !== 0;\n };\n\n module.exports = isOdd;\n\n /***/\n },\n /* 46 */\n /***/function (module, exports, __webpack_require__) {\n\n var isNumber = __webpack_require__(4);\n\n var isPositive = function isPositive(num) {\n return isNumber(num) && num > 0;\n };\n\n module.exports = isPositive;\n\n /***/\n },\n /* 47 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArray = __webpack_require__(0);\n var isFunction = __webpack_require__(5);\n var each = __webpack_require__(1);\n /**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n var maxBy = function maxBy(arr, fn) {\n if (!isArray(arr)) {\n return undefined;\n }\n var max = arr[0];\n var maxData = void 0;\n if (isFunction(fn)) {\n maxData = fn(arr[0]);\n } else {\n maxData = arr[0][fn];\n }\n var data = void 0;\n each(arr, function (val) {\n if (isFunction(fn)) {\n data = fn(val);\n } else {\n data = val[fn];\n }\n if (data > maxData) {\n max = val;\n maxData = data;\n }\n });\n return max;\n };\n\n module.exports = maxBy;\n\n /***/\n },\n /* 48 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArray = __webpack_require__(0);\n var isFunction = __webpack_require__(5);\n var each = __webpack_require__(1);\n /**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n var minBy = function minBy(arr, fn) {\n if (!isArray(arr)) {\n return undefined;\n }\n var min = arr[0];\n var minData = void 0;\n if (isFunction(fn)) {\n minData = fn(arr[0]);\n } else {\n minData = arr[0][fn];\n }\n var data = void 0;\n each(arr, function (val) {\n if (isFunction(fn)) {\n data = fn(val);\n } else {\n data = val[fn];\n }\n if (data < minData) {\n min = val;\n minData = data;\n }\n });\n return min;\n };\n\n module.exports = minBy;\n\n /***/\n },\n /* 49 */\n /***/function (module, exports) {\n\n var mod = function mod(n, m) {\n return (n % m + m) % m;\n };\n\n module.exports = mod;\n\n /***/\n },\n /* 50 */\n /***/function (module, exports) {\n\n var DEGREE = 180 / Math.PI;\n\n var toDegree = function toDegree(radian) {\n return DEGREE * radian;\n };\n\n module.exports = toDegree;\n\n /***/\n },\n /* 51 */\n /***/function (module, exports) {\n\n var RADIAN = Math.PI / 180;\n\n var toRadian = function toRadian(degree) {\n return RADIAN * degree;\n };\n\n module.exports = toRadian;\n\n /***/\n },\n /* 52 */\n /***/function (module, exports) {\n\n function toString(value) {\n return value.toString();\n }\n\n function upperCase(value) {\n return toString(value).toUpperCase();\n }\n\n function lowerCase(value) {\n return toString(value).toLowerCase();\n }\n\n var strUtil = {\n lc: lowerCase,\n lowerCase: lowerCase,\n lowerFirst: function lowerFirst(value) {\n value = toString(value);\n return lowerCase(value.charAt(0)) + value.substring(1);\n },\n\n uc: upperCase,\n upperCase: upperCase,\n upperFirst: function upperFirst(value) {\n value = toString(value);\n return upperCase(value.charAt(0)) + value.substring(1);\n }\n };\n\n module.exports = strUtil;\n\n /***/\n },\n /* 53 */\n /***/function (module, exports, __webpack_require__) {\n\n var isType = __webpack_require__(3);\n\n var checkType = {\n getType: __webpack_require__(16),\n isArray: __webpack_require__(0),\n isArrayLike: __webpack_require__(2),\n isBoolean: __webpack_require__(54),\n isFunction: __webpack_require__(5),\n isNil: __webpack_require__(6),\n isNull: __webpack_require__(55),\n isNumber: __webpack_require__(4),\n isObject: __webpack_require__(12),\n isObjectLike: __webpack_require__(8),\n isPlainObject: __webpack_require__(7),\n isPrototype: __webpack_require__(17),\n isType: isType,\n isUndefined: __webpack_require__(56),\n isString: __webpack_require__(18),\n isRegExp: __webpack_require__(57)\n };\n\n ['Arguments', 'Date', 'Error'].forEach(function (type) {\n checkType['is' + type] = function (value) {\n return isType(value, type);\n };\n });\n\n module.exports = checkType;\n\n /***/\n },\n /* 54 */\n /***/function (module, exports, __webpack_require__) {\n\n /**\n * 是否是布尔类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\n var isType = __webpack_require__(3);\n\n var isBoolean = function isBoolean(value) {\n return isType(value, 'Boolean');\n };\n\n module.exports = isBoolean;\n\n /***/\n },\n /* 55 */\n /***/function (module, exports) {\n\n var isNull = function isNull(value) {\n return value === null;\n };\n\n module.exports = isNull;\n\n /***/\n },\n /* 56 */\n /***/function (module, exports) {\n\n var isUndefined = function isUndefined(value) {\n return value === undefined;\n };\n\n module.exports = isUndefined;\n\n /***/\n },\n /* 57 */\n /***/function (module, exports, __webpack_require__) {\n\n var isType = __webpack_require__(3);\n\n var isRegExp = function isRegExp(str) {\n return isType(str, 'RegExp');\n };\n\n module.exports = isRegExp;\n\n /***/\n },\n /* 58 */\n /***/function (module, exports, __webpack_require__) {\n\n var isFunction = __webpack_require__(5);\n var toArray = __webpack_require__(9);\n var mix = __webpack_require__(10);\n\n var augment = function augment(c) {\n var args = toArray(arguments);\n for (var i = 1; i < args.length; i++) {\n var obj = args[i];\n if (isFunction(obj)) {\n obj = obj.prototype;\n }\n mix(c.prototype, obj);\n }\n };\n\n module.exports = augment;\n\n /***/\n },\n /* 59 */\n /***/function (module, exports, __webpack_require__) {\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n };\n\n var isArray = __webpack_require__(0);\n\n var clone = function clone(obj) {\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' || obj === null) {\n return obj;\n }\n var rst = void 0;\n if (isArray(obj)) {\n rst = [];\n for (var i = 0, l = obj.length; i < l; i++) {\n if (_typeof(obj[i]) === 'object' && obj[i] != null) {\n rst[i] = clone(obj[i]);\n } else {\n rst[i] = obj[i];\n }\n }\n } else {\n rst = {};\n for (var k in obj) {\n if (_typeof(obj[k]) === 'object' && obj[k] != null) {\n rst[k] = clone(obj[k]);\n } else {\n rst[k] = obj[k];\n }\n }\n }\n\n return rst;\n };\n\n module.exports = clone;\n\n /***/\n },\n /* 60 */\n /***/function (module, exports, __webpack_require__) {\n\n var isPlainObject = __webpack_require__(7);\n var isArray = __webpack_require__(0);\n\n var MAX_MIX_LEVEL = 5;\n\n function _deepMix(dist, src, level, maxLevel) {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n var value = src[key];\n if (value !== null && isPlainObject(value)) {\n if (!isPlainObject(dist[key])) {\n dist[key] = {};\n }\n if (level < maxLevel) {\n _deepMix(dist[key], value, level + 1, maxLevel);\n } else {\n dist[key] = src[key];\n }\n } else if (isArray(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n } else if (value !== undefined) {\n dist[key] = value;\n }\n }\n }\n }\n\n var deepMix = function deepMix() {\n var args = new Array(arguments.length);\n var length = args.length;\n for (var i = 0; i < length; i++) {\n args[i] = arguments[i];\n }\n var rst = args[0];\n for (var _i = 1; _i < length; _i++) {\n _deepMix(rst, args[_i]);\n }\n return rst;\n };\n\n module.exports = deepMix;\n\n /***/\n },\n /* 61 */\n /***/function (module, exports, __webpack_require__) {\n\n var isFunction = __webpack_require__(5);\n var mix = __webpack_require__(10);\n\n var extend = function extend(subclass, superclass, overrides, staticOverrides) {\n // 如果只提供父类构造函数,则自动生成子类构造函数\n if (!isFunction(superclass)) {\n overrides = superclass;\n superclass = subclass;\n subclass = function subclass() {};\n }\n\n var create = Object.create ? function (proto, c) {\n return Object.create(proto, {\n constructor: {\n value: c\n }\n });\n } : function (proto, c) {\n function Tmp() {}\n Tmp.prototype = proto;\n var o = new Tmp();\n o.constructor = c;\n return o;\n };\n\n var superObj = create(superclass.prototype, subclass); // new superclass(),//实例化父类作为子类的prototype\n subclass.prototype = mix(superObj, subclass.prototype); // 指定子类的prototype\n subclass.superclass = create(superclass.prototype, superclass);\n mix(superObj, overrides);\n mix(subclass, staticOverrides);\n return subclass;\n };\n\n module.exports = extend;\n\n /***/\n },\n /* 62 */\n /***/function (module, exports, __webpack_require__) {\n\n var groupToMap = __webpack_require__(19);\n\n var group = function group(data, condition) {\n if (!condition) {\n return [data];\n }\n var groups = groupToMap(data, condition);\n var array = [];\n for (var i in groups) {\n array.push(groups[i]);\n }\n return array;\n };\n\n module.exports = group;\n\n /***/\n },\n /* 63 */\n /***/function (module, exports, __webpack_require__) {\n\n var isArrayLike = __webpack_require__(2);\n\n var indexOf = function indexOf(arr, obj) {\n if (!isArrayLike(arr)) {\n return -1;\n }\n var m = Array.prototype.indexOf;\n if (m) {\n return m.call(arr, obj);\n }\n var index = -1;\n\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === obj) {\n index = i;\n break;\n }\n }\n return index;\n };\n\n module.exports = indexOf;\n\n /***/\n },\n /* 64 */\n /***/function (module, exports, __webpack_require__) {\n\n var isNil = __webpack_require__(6);\n var isArrayLike = __webpack_require__(2);\n var getType = __webpack_require__(16);\n var isPrototype = __webpack_require__(17);\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n function isEmpty(value) {\n /**\n * isEmpty(null) => true\n * isEmpty() => true\n * isEmpty(true) => true\n * isEmpty(1) => true\n * isEmpty([1, 2, 3]) => false\n * isEmpty('abc') => false\n * isEmpty({ a: 1 }) => false\n */\n if (isNil(value)) {\n return true;\n }\n if (isArrayLike(value)) {\n return !value.length;\n }\n var type = getType(value);\n if (type === 'Map' || type === 'Set') {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !Object.keys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n module.exports = isEmpty;\n\n /***/\n },\n /* 65 */\n /***/function (module, exports, __webpack_require__) {\n\n var isFunction = __webpack_require__(5);\n var isEqual = __webpack_require__(21);\n /**\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [fn] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer); // => true\n */\n\n var isEqualWith = function isEqualWith(value, other, fn) {\n if (!isFunction(fn)) {\n return isEqual(value, other);\n }\n return !!fn(value, other);\n };\n\n module.exports = isEqualWith;\n\n /***/\n },\n /* 66 */\n /***/function (module, exports, __webpack_require__) {\n\n var each = __webpack_require__(1);\n var isArrayLike = __webpack_require__(2);\n\n var map = function map(arr, func) {\n if (!isArrayLike(arr)) {\n return arr;\n }\n var result = [];\n each(arr, function (value, index) {\n result.push(func(value, index));\n });\n return result;\n };\n\n module.exports = map;\n\n /***/\n },\n /* 67 */\n /***/function (module, exports, __webpack_require__) {\n\n var each = __webpack_require__(1);\n var isPlaineObject = __webpack_require__(7);\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n * pick(object, ['a', 'c']); // => { 'a': 1, 'c': 3 }\n */\n\n var pick = function pick(object, keys) {\n if (object === null || !isPlaineObject(object)) {\n return {};\n }\n var result = {};\n each(keys, function (key) {\n if (hasOwnProperty.call(object, key)) {\n result[key] = object[key];\n }\n });\n return result;\n };\n\n module.exports = pick;\n\n /***/\n },\n /* 68 */\n /***/function (module, exports) {\n\n var uniqueId = function () {\n var map = {};\n return function (prefix) {\n prefix = prefix || 'g';\n if (!map[prefix]) {\n map[prefix] = 1;\n } else {\n map[prefix] += 1;\n }\n return prefix + map[prefix];\n };\n }();\n\n module.exports = uniqueId;\n\n /***/\n }]\n /******/)\n );\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/util/build/util.js\n// module id = 10\n// module chunks = 0","export default function (a, b) {\n return a = +a, b -= a, function (t) {\n return a + b * t;\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/number.js\n// module id = 11\n// module chunks = 0","var Util = require('../../../util/index');\nvar vec2 = require('../../../util/matrix').vec2;\n\nfunction cubicAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return onet * onet * (onet * p3 + 3 * t * p2) + t * t * (t * p0 + 3 * onet * p1);\n}\n\nfunction cubicDerivativeAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + (p3 - p2) * t * t);\n}\n\nfunction cubicProjectPoint(x1, y1, x2, y2, x3, y3, x4, y4, x, y, out) {\n var t = void 0;\n var interval = 0.005;\n var d = Infinity;\n var _t = void 0;\n var v1 = void 0;\n var d1 = void 0;\n var d2 = void 0;\n var v2 = void 0;\n var prev = void 0;\n var next = void 0;\n var EPSILON = 0.0001;\n var v0 = [x, y];\n\n for (_t = 0; _t < 1; _t += 0.05) {\n v1 = [cubicAt(x1, x2, x3, x4, _t), cubicAt(y1, y2, y3, y4, _t)];\n\n d1 = vec2.squaredDistance(v0, v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON) {\n break;\n }\n\n prev = t - interval;\n next = t + interval;\n\n v1 = [cubicAt(x1, x2, x3, x4, prev), cubicAt(y1, y2, y3, y4, prev)];\n\n d1 = vec2.squaredDistance(v0, v1);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n v2 = [cubicAt(x1, x2, x3, x4, next), cubicAt(y1, y2, y3, y4, next)];\n\n d2 = vec2.squaredDistance(v0, v2);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n\n if (out) {\n out.x = cubicAt(x1, x2, x3, x4, t);\n out.y = cubicAt(y1, y2, y3, y4, t);\n }\n\n return Math.sqrt(d);\n}\n\nfunction cubicExtrema(p0, p1, p2, p3) {\n var a = 3 * p0 - 9 * p1 + 9 * p2 - 3 * p3;\n var b = 6 * p1 - 12 * p2 + 6 * p3;\n var c = 3 * p2 - 3 * p3;\n var extrema = [];\n var t1 = void 0;\n var t2 = void 0;\n var discSqrt = void 0;\n\n if (Util.isNumberEqual(a, 0)) {\n if (!Util.isNumberEqual(b, 0)) {\n t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extrema.push(t1);\n }\n }\n } else {\n var disc = b * b - 4 * a * c;\n if (Util.isNumberEqual(disc, 0)) {\n extrema.push(-b / (2 * a));\n } else if (disc > 0) {\n discSqrt = Math.sqrt(disc);\n t1 = (-b + discSqrt) / (2 * a);\n t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extrema.push(t1);\n }\n if (t2 >= 0 && t2 <= 1) {\n extrema.push(t2);\n }\n }\n }\n return extrema;\n}\n\nfunction base3(t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n var t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n}\n\nfunction cubiclLen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n if (Util.isNil(z)) {\n z = 1;\n }\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n var z2 = z / 2;\n var n = 12;\n var Tvalues = [-0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699, -0.9041, 0.9041, -0.9816, 0.9816];\n var Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472];\n var sum = 0;\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2;\n var xbase = base3(ct, x1, x2, x3, x4);\n var ybase = base3(ct, y1, y2, y3, y4);\n var comb = xbase * xbase + ybase * ybase;\n sum += Cvalues[i] * Math.sqrt(comb);\n }\n return z2 * sum;\n}\n\nmodule.exports = {\n at: cubicAt,\n derivativeAt: cubicDerivativeAt,\n projectPoint: function projectPoint(x1, y1, x2, y2, x3, y3, x4, y4, x, y) {\n var rst = {};\n cubicProjectPoint(x1, y1, x2, y2, x3, y3, x4, y4, x, y, rst);\n return rst;\n },\n\n pointDistance: cubicProjectPoint,\n extrema: cubicExtrema,\n len: cubiclLen\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/math/cubic.js\n// module id = 12\n// module chunks = 0","var Util = require('../../util/index');\nvar Attribute = require('./mixin/attribute');\nvar Transform = require('./mixin/transform');\nvar Animate = require('../../util/mixin/animate');\nvar EventEmitter = require('wolfy87-eventemitter');\n\nvar Element = function Element(cfg) {\n this.__cfg = {\n zIndex: 0,\n capture: true,\n visible: true,\n destroyed: false\n }; // 配置存放地\n\n Util.assign(this.__cfg, this.getDefaultCfg(), cfg); // Element.CFG不合并,提升性能 合并默认配置,用户配置->继承默认配置->Element默认配置\n // 在子元素的init中创建新svg元素,然后设置属性和变换。在这边设置id而不是attr里,是考虑id一旦设置后应不能修改\n this.init(cfg ? cfg.id : null); // 类型初始化\n this.initAttrs(this.__cfg.attrs); // 初始化绘图属性\n this.initTransform(); // 初始化变换\n};\n\nElement.CFG = {\n /**\n * 唯一标示\n * @type {Number}\n */\n id: null,\n /**\n * Z轴的层叠关系,Z值越大离用户越近\n * @type {Number}\n */\n zIndex: 0,\n /**\n * Canvas对象\n * @type: {Object}\n */\n canvas: null,\n /**\n * 父元素指针\n * @type {Object}\n */\n parent: null,\n /**\n * 用来设置当前对象是否能被捕捉\n * true 能\n * false 不能\n * 对象默认是都可以被捕捉的, 当capture为false时,group.getShape(x, y)方法无法获得该元素\n * 通过将不必要捕捉的元素的该属性设置成false, 来提高捕捉性能\n * @type {Boolean}\n **/\n capture: true,\n /**\n * 画布的上下文\n * @type {Object}\n */\n context: null,\n /**\n * 是否显示\n * @type {Boolean}\n */\n visible: true,\n /**\n * 是否被销毁\n * @type: {Boolean}\n */\n destroyed: false\n};\n\nUtil.augment(Element, Attribute, Transform, EventEmitter, Animate, {\n init: function init() {\n this.setSilent('animable', true);\n this.setSilent('animating', false); // 初始时不处于动画状态\n },\n getParent: function getParent() {\n return this.get('parent');\n },\n\n /**\n * 获取默认的配置信息\n * @protected\n * @return {Object} 默认的属性\n */\n getDefaultCfg: function getDefaultCfg() {\n return {};\n },\n set: function set(name, value) {\n if (name === 'zIndex') {\n this._beforeSetZIndex(value);\n }\n this.__cfg[name] = value;\n return this;\n },\n setSilent: function setSilent(name, value) {\n this.__cfg[name] = value;\n },\n get: function get(name) {\n return this.__cfg[name];\n },\n draw: function draw() {},\n drawInner: function drawInner() {},\n show: function show() {\n this.set('visible', true);\n var el = this.get('el');\n if (el) {\n el.setAttribute('visibility', 'visible');\n }\n return this;\n },\n hide: function hide() {\n this.set('visible', false);\n var el = this.get('el');\n if (el) {\n el.setAttribute('visibility', 'hidden');\n }\n return this;\n },\n remove: function remove(destroy) {\n var el = this.get('el');\n if (destroy === undefined) {\n destroy = true;\n }\n\n if (this.get('parent')) {\n var parent = this.get('parent');\n var children = parent.get('children');\n Util.remove(children, this);\n el.parentNode.removeChild(el);\n }\n\n if (destroy) {\n this.destroy();\n }\n\n return this;\n },\n destroy: function destroy() {\n var destroyed = this.get('destroyed');\n if (destroyed) {\n return;\n }\n // 如果正在执行动画,清理动画\n if (this.get('animating')) {\n var timer = this.get('animateTimer');\n timer && timer.stop();\n }\n this.__cfg = {};\n this.__attrs = null;\n this.removeEvent(); // 移除所有的事件\n this.set('destroyed', true);\n },\n _beforeSetZIndex: function _beforeSetZIndex(zIndex) {\n this.__cfg.zIndex = zIndex;\n\n if (!Util.isNil(this.get('parent'))) {\n this.get('parent').sort();\n }\n return zIndex;\n },\n _setAttrs: function _setAttrs(attrs) {\n this.attr(attrs);\n return attrs;\n },\n setZIndex: function setZIndex(zIndex) {\n this.__cfg.zIndex = zIndex;\n return zIndex;\n },\n clone: function clone() {\n return Util.clone(this);\n },\n getBBox: function getBBox() {\n var el = this.get('el');\n if (!el) {\n return {\n minX: 0,\n minY: 0,\n maxX: 0,\n maxY: 0,\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n }\n var bbox = el.getBBox();\n if (!el.parentNode || bbox.width === 0 && bbox.height === 0) {\n var node = el.cloneNode();\n node.innerHTML = el.innerHTML;\n node.setAttribute('visible', 'hidden');\n var svg = document.getElementsByTagName('svg')[0];\n svg.appendChild(node);\n bbox = node.getBBox();\n svg.removeChild(node);\n }\n bbox.minX = bbox.x;\n bbox.minY = bbox.y;\n bbox.maxX = bbox.x + bbox.width;\n bbox.maxY = bbox.y + bbox.height;\n return {\n minX: bbox.x,\n minY: bbox.y,\n maxX: bbox.x + bbox.width,\n maxY: bbox.y + bbox.height,\n width: bbox.width,\n height: bbox.height,\n x: bbox.x,\n y: bbox.y\n };\n }\n});\n\nmodule.exports = Element;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/core/element.js\n// module id = 13\n// module chunks = 0","/**\n * Common utilities\n * @module glMatrix\n */\n\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Type} type Array type, such as Float32Array or Array\n */\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\n\nvar degree = Math.PI / 180;\n\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\nexport function toRadian(a) {\n return a * degree;\n}\n\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/gl-matrix/src/gl-matrix/common.js\n// module id = 14\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar Util = require('./common');\nvar SPACES = '\\t\\n\\x0B\\f\\r \\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp('([a-z])[' + SPACES + ',]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[' + SPACES + ']*,?[' + SPACES + ']*)+)', 'ig');\nvar PATH_VALUES = new RegExp('(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[' + SPACES + ']*,?[' + SPACES + ']*', 'ig');\n\n// Parses given path string into an array of arrays of path segments\nvar parsePathString = function parsePathString(pathString) {\n if (!pathString) {\n return null;\n }\n\n if ((typeof pathString === 'undefined' ? 'undefined' : _typeof(pathString)) === _typeof([])) {\n return pathString;\n }\n var paramCounts = {\n a: 7,\n c: 6,\n o: 2,\n h: 1,\n l: 2,\n m: 2,\n r: 4,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n u: 3,\n z: 0\n };\n var data = [];\n\n String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n var params = [];\n var name = b.toLowerCase();\n c.replace(PATH_VALUES, function (a, b) {\n b && params.push(+b);\n });\n if (name === 'm' && params.length > 2) {\n data.push([b].concat(params.splice(0, 2)));\n name = 'l';\n b = b === 'm' ? 'l' : 'L';\n }\n if (name === 'o' && params.length === 1) {\n data.push([b, params[0]]);\n }\n if (name === 'r') {\n data.push([b].concat(params));\n } else {\n while (params.length >= paramCounts[name]) {\n data.push([b].concat(params.splice(0, paramCounts[name])));\n if (!paramCounts[name]) {\n break;\n }\n }\n }\n });\n\n return data;\n};\n\n// http://schepers.cc/getting-to-the-point\nvar catmullRom2bezier = function catmullRom2bezier(crp, z) {\n var d = [];\n for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n var p = [{\n x: +crp[i - 2],\n y: +crp[i - 1]\n }, {\n x: +crp[i],\n y: +crp[i + 1]\n }, {\n x: +crp[i + 2],\n y: +crp[i + 3]\n }, {\n x: +crp[i + 4],\n y: +crp[i + 5]\n }];\n if (z) {\n if (!i) {\n p[0] = {\n x: +crp[iLen - 2],\n y: +crp[iLen - 1]\n };\n } else if (iLen - 4 === i) {\n p[3] = {\n x: +crp[0],\n y: +crp[1]\n };\n } else if (iLen - 2 === i) {\n p[2] = {\n x: +crp[0],\n y: +crp[1]\n };\n p[3] = {\n x: +crp[2],\n y: +crp[3]\n };\n }\n } else {\n if (iLen - 4 === i) {\n p[3] = p[2];\n } else if (!i) {\n p[0] = {\n x: +crp[i],\n y: +crp[i + 1]\n };\n }\n }\n d.push(['C', (-p[0].x + 6 * p[1].x + p[2].x) / 6, (-p[0].y + 6 * p[1].y + p[2].y) / 6, (p[1].x + 6 * p[2].x - p[3].x) / 6, (p[1].y + 6 * p[2].y - p[3].y) / 6, p[2].x, p[2].y]);\n }\n\n return d;\n};\n\nvar ellipsePath = function ellipsePath(x, y, rx, ry, a) {\n var res = [];\n if (a === null && ry === null) {\n ry = rx;\n }\n x = +x;\n y = +y;\n rx = +rx;\n ry = +ry;\n if (a !== null) {\n var rad = Math.PI / 180;\n var x1 = x + rx * Math.cos(-ry * rad);\n var x2 = x + rx * Math.cos(-a * rad);\n var y1 = y + rx * Math.sin(-ry * rad);\n var y2 = y + rx * Math.sin(-a * rad);\n res = [['M', x1, y1], ['A', rx, rx, 0, +(a - ry > 180), 0, x2, y2]];\n } else {\n res = [['M', x, y], ['m', 0, -ry], ['a', rx, ry, 0, 1, 1, 0, 2 * ry], ['a', rx, ry, 0, 1, 1, 0, -2 * ry], ['z']];\n }\n return res;\n};\n\nvar pathToAbsolute = function pathToAbsolute(pathArray) {\n pathArray = parsePathString(pathArray);\n\n if (!pathArray || !pathArray.length) {\n return [['M', 0, 0]];\n }\n var res = [];\n var x = 0;\n var y = 0;\n var mx = 0;\n var my = 0;\n var start = 0;\n var pa0 = void 0;\n var dots = void 0;\n if (pathArray[0][0] === 'M') {\n x = +pathArray[0][1];\n y = +pathArray[0][2];\n mx = x;\n my = y;\n start++;\n res[0] = ['M', x, y];\n }\n var crz = pathArray.length === 3 && pathArray[0][0] === 'M' && pathArray[1][0].toUpperCase() === 'R' && pathArray[2][0].toUpperCase() === 'Z';\n for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\n res.push(r = []);\n pa = pathArray[i];\n pa0 = pa[0];\n if (pa0 !== pa0.toUpperCase()) {\n r[0] = pa0.toUpperCase();\n switch (r[0]) {\n case 'A':\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +pa[6] + x;\n r[7] = +pa[7] + y;\n break;\n case 'V':\n r[1] = +pa[1] + y;\n break;\n case 'H':\n r[1] = +pa[1] + x;\n break;\n case 'R':\n dots = [x, y].concat(pa.slice(1));\n for (var j = 2, jj = dots.length; j < jj; j++) {\n dots[j] = +dots[j] + x;\n dots[++j] = +dots[j] + y;\n }\n res.pop();\n res = res.concat(catmullRom2bezier(dots, crz));\n break;\n case 'O':\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n break;\n case 'U':\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = ['U'].concat(res[res.length - 1].slice(-2));\n break;\n case 'M':\n mx = +pa[1] + x;\n my = +pa[2] + y;\n break; // for lint\n default:\n for (var _j = 1, _jj = pa.length; _j < _jj; _j++) {\n r[_j] = +pa[_j] + (_j % 2 ? x : y);\n }\n }\n } else if (pa0 === 'R') {\n dots = [x, y].concat(pa.slice(1));\n res.pop();\n res = res.concat(catmullRom2bezier(dots, crz));\n r = ['R'].concat(pa.slice(-2));\n } else if (pa0 === 'O') {\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n } else if (pa0 === 'U') {\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = ['U'].concat(res[res.length - 1].slice(-2));\n } else {\n for (var k = 0, kk = pa.length; k < kk; k++) {\n r[k] = pa[k];\n }\n }\n pa0 = pa0.toUpperCase();\n if (pa0 !== 'O') {\n switch (r[0]) {\n case 'Z':\n x = +mx;\n y = +my;\n break;\n case 'H':\n x = r[1];\n break;\n case 'V':\n y = r[1];\n break;\n case 'M':\n mx = r[r.length - 2];\n my = r[r.length - 1];\n break; // for lint\n default:\n x = r[r.length - 2];\n y = r[r.length - 1];\n }\n }\n }\n\n return res;\n};\n\nvar l2c = function l2c(x1, y1, x2, y2) {\n return [x1, y1, x2, y2, x2, y2];\n};\n\nvar q2c = function q2c(x1, y1, ax, ay, x2, y2) {\n var _13 = 1 / 3;\n var _23 = 2 / 3;\n return [_13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x2 + _23 * ax, _13 * y2 + _23 * ay, x2, y2];\n};\n\nvar a2c = function a2c(x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n // for more information of where this math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n if (rx === ry) {\n rx += 1;\n }\n\n var _120 = Math.PI * 120 / 180;\n var rad = Math.PI / 180 * (+angle || 0);\n var res = [];\n var xy = void 0;\n var f1 = void 0;\n var f2 = void 0;\n var cx = void 0;\n var cy = void 0;\n var rotate = function rotate(x, y, rad) {\n var X = x * Math.cos(rad) - y * Math.sin(rad);\n var Y = x * Math.sin(rad) + y * Math.cos(rad);\n return {\n x: X,\n y: Y\n };\n };\n if (!recursive) {\n xy = rotate(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotate(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n if (x1 === x2 && y1 === y2) {\n // 若弧的起始点和终点重叠则错开一点\n x2 += 1;\n y2 += 1;\n }\n // const cos = Math.cos(Math.PI / 180 * angle);\n // const sin = Math.sin(Math.PI / 180 * angle);\n var x = (x1 - x2) / 2;\n var y = (y1 - y2) / 2;\n var h = x * x / (rx * rx) + y * y / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx = h * rx;\n ry = h * ry;\n }\n var rx2 = rx * rx;\n var ry2 = ry * ry;\n var k = (large_arc_flag === sweep_flag ? -1 : 1) * Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)));\n cx = k * rx * y / ry + (x1 + x2) / 2;\n cy = k * -ry * x / rx + (y1 + y2) / 2;\n f1 = Math.asin(((y1 - cy) / ry).toFixed(9));\n f2 = Math.asin(((y2 - cy) / ry).toFixed(9));\n\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n f1 < 0 && (f1 = Math.PI * 2 + f1);\n f2 < 0 && (f2 = Math.PI * 2 + f2);\n if (sweep_flag && f1 > f2) {\n f1 = f1 - Math.PI * 2;\n }\n if (!sweep_flag && f2 > f1) {\n f2 = f2 - Math.PI * 2;\n }\n } else {\n f1 = recursive[0];\n f2 = recursive[1];\n cx = recursive[2];\n cy = recursive[3];\n }\n var df = f2 - f1;\n if (Math.abs(df) > _120) {\n var f2old = f2;\n var x2old = x2;\n var y2old = y2;\n f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2);\n y2 = cy + ry * Math.sin(f2);\n res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n }\n df = f2 - f1;\n var c1 = Math.cos(f1);\n var s1 = Math.sin(f1);\n var c2 = Math.cos(f2);\n var s2 = Math.sin(f2);\n var t = Math.tan(df / 4);\n var hx = 4 / 3 * rx * t;\n var hy = 4 / 3 * ry * t;\n var m1 = [x1, y1];\n var m2 = [x1 + hx * s1, y1 - hy * c1];\n var m3 = [x2 + hx * s2, y2 - hy * c2];\n var m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2, m3, m4].concat(res);\n }\n res = [m2, m3, m4].concat(res).join().split(',');\n var newres = [];\n for (var i = 0, ii = res.length; i < ii; i++) {\n newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n }\n return newres;\n};\n\nvar pathTocurve = function pathTocurve(path, path2) {\n var p = pathToAbsolute(path);\n var p2 = path2 && pathToAbsolute(path2);\n var attrs = {\n x: 0,\n y: 0,\n bx: 0,\n by: 0,\n X: 0,\n Y: 0,\n qx: null,\n qy: null\n };\n var attrs2 = {\n x: 0,\n y: 0,\n bx: 0,\n by: 0,\n X: 0,\n Y: 0,\n qx: null,\n qy: null\n };\n var pcoms1 = []; // path commands of original path p\n var pcoms2 = []; // path commands of original path p2\n var pfirst = ''; // temporary holder for original path command\n var pcom = ''; // holder for previous path command of original path\n var ii = void 0;\n var processPath = function processPath(path, d, pcom) {\n var nx = void 0,\n ny = void 0;\n if (!path) {\n return ['C', d.x, d.y, d.x, d.y, d.x, d.y];\n }!(path[0] in {\n T: 1,\n Q: 1\n }) && (d.qx = d.qy = null);\n switch (path[0]) {\n case 'M':\n d.X = path[1];\n d.Y = path[2];\n break;\n case 'A':\n path = ['C'].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));\n break;\n case 'S':\n if (pcom === 'C' || pcom === 'S') {\n // In \"S\" case we have to take into account, if the previous command is C/S.\n nx = d.x * 2 - d.bx; // And reflect the previous\n ny = d.y * 2 - d.by; // command's control point relative to the current point.\n } else {\n // or some else or nothing\n nx = d.x;\n ny = d.y;\n }\n path = ['C', nx, ny].concat(path.slice(1));\n break;\n case 'T':\n if (pcom === 'Q' || pcom === 'T') {\n // In \"T\" case we have to take into account, if the previous command is Q/T.\n d.qx = d.x * 2 - d.qx; // And make a reflection similar\n d.qy = d.y * 2 - d.qy; // to case \"S\".\n } else {\n // or something else or nothing\n d.qx = d.x;\n d.qy = d.y;\n }\n path = ['C'].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n break;\n case 'Q':\n d.qx = path[1];\n d.qy = path[2];\n path = ['C'].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n break;\n case 'L':\n path = ['C'].concat(l2c(d.x, d.y, path[1], path[2]));\n break;\n case 'H':\n path = ['C'].concat(l2c(d.x, d.y, path[1], d.y));\n break;\n case 'V':\n path = ['C'].concat(l2c(d.x, d.y, d.x, path[1]));\n break;\n case 'Z':\n path = ['C'].concat(l2c(d.x, d.y, d.X, d.Y));\n break;\n default:\n break;\n }\n return path;\n };\n var fixArc = function fixArc(pp, i) {\n if (pp[i].length > 7) {\n pp[i].shift();\n var pi = pp[i];\n while (pi.length) {\n pcoms1[i] = 'A'; // if created multiple C:s, their original seg is saved\n p2 && (pcoms2[i] = 'A'); // the same as above\n pp.splice(i++, 0, ['C'].concat(pi.splice(0, 6)));\n }\n pp.splice(i, 1);\n ii = Math.max(p.length, p2 && p2.length || 0);\n }\n };\n var fixM = function fixM(path1, path2, a1, a2, i) {\n if (path1 && path2 && path1[i][0] === 'M' && path2[i][0] !== 'M') {\n path2.splice(i, 0, ['M', a2.x, a2.y]);\n a1.bx = 0;\n a1.by = 0;\n a1.x = path1[i][1];\n a1.y = path1[i][2];\n ii = Math.max(p.length, p2 && p2.length || 0);\n }\n };\n ii = Math.max(p.length, p2 && p2.length || 0);\n for (var i = 0; i < ii; i++) {\n\n p[i] && (pfirst = p[i][0]); // save current path command\n\n if (pfirst !== 'C') {\n // C is not saved yet, because it may be result of conversion\n pcoms1[i] = pfirst; // Save current path command\n i && (pcom = pcoms1[i - 1]); // Get previous path command pcom\n }\n p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n\n if (pcoms1[i] !== 'A' && pfirst === 'C') pcoms1[i] = 'C'; // A is the only command\n // which may produce multiple C:s\n // so we have to make sure that C is also C in original path\n\n fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n\n if (p2) {\n // the same procedures is done to p2\n p2[i] && (pfirst = p2[i][0]);\n if (pfirst !== 'C') {\n pcoms2[i] = pfirst;\n i && (pcom = pcoms2[i - 1]);\n }\n p2[i] = processPath(p2[i], attrs2, pcom);\n\n if (pcoms2[i] !== 'A' && pfirst === 'C') {\n pcoms2[i] = 'C';\n }\n\n fixArc(p2, i);\n }\n fixM(p, p2, attrs, attrs2, i);\n fixM(p2, p, attrs2, attrs, i);\n var seg = p[i];\n var seg2 = p2 && p2[i];\n var seglen = seg.length;\n var seg2len = p2 && seg2.length;\n attrs.x = seg[seglen - 2];\n attrs.y = seg[seglen - 1];\n attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x;\n attrs.by = parseFloat(seg[seglen - 3]) || attrs.y;\n attrs2.bx = p2 && (parseFloat(seg2[seg2len - 4]) || attrs2.x);\n attrs2.by = p2 && (parseFloat(seg2[seg2len - 3]) || attrs2.y);\n attrs2.x = p2 && seg2[seg2len - 2];\n attrs2.y = p2 && seg2[seg2len - 1];\n }\n\n return p2 ? [p, p2] : p;\n};\n\nvar p2s = /,?([a-z]),?/gi;\nvar parsePathArray = function parsePathArray(path) {\n return path.join(',').replace(p2s, '$1');\n};\n\nvar base3 = function base3(t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n var t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n};\n\nvar bezlen = function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n if (z === null) {\n z = 1;\n }\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n var z2 = z / 2;\n var n = 12;\n var Tvalues = [-0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699, -0.9041, 0.9041, -0.9816, 0.9816];\n var Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472];\n var sum = 0;\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2;\n var xbase = base3(ct, x1, x2, x3, x4);\n var ybase = base3(ct, y1, y2, y3, y4);\n var comb = xbase * xbase + ybase * ybase;\n sum += Cvalues[i] * Math.sqrt(comb);\n }\n return z2 * sum;\n};\n\nvar curveDim = function curveDim(x0, y0, x1, y1, x2, y2, x3, y3) {\n var tvalues = [];\n var bounds = [[], []];\n var a = void 0;\n var b = void 0;\n var c = void 0;\n var t = void 0;\n\n for (var i = 0; i < 2; ++i) {\n if (i === 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n } else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (t > 0 && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n var b2ac = b * b - 4 * c * a;\n var sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n var t1 = (-b + sqrtb2ac) / (2 * a);\n if (t1 > 0 && t1 < 1) {\n tvalues.push(t1);\n }\n var t2 = (-b - sqrtb2ac) / (2 * a);\n if (t2 > 0 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var j = tvalues.length;\n var jlen = j;\n var mt = void 0;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n\n return {\n min: {\n x: Math.min.apply(0, bounds[0]),\n y: Math.min.apply(0, bounds[1])\n },\n max: {\n x: Math.max.apply(0, bounds[0]),\n y: Math.max.apply(0, bounds[1])\n }\n };\n};\n\nvar intersect = function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\n if (Math.max(x1, x2) < Math.min(x3, x4) || Math.min(x1, x2) > Math.max(x3, x4) || Math.max(y1, y2) < Math.min(y3, y4) || Math.min(y1, y2) > Math.max(y3, y4)) {\n return;\n }\n var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);\n var ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);\n var denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n if (!denominator) {\n return;\n }\n var px = nx / denominator;\n var py = ny / denominator;\n var px2 = +px.toFixed(2);\n var py2 = +py.toFixed(2);\n if (px2 < +Math.min(x1, x2).toFixed(2) || px2 > +Math.max(x1, x2).toFixed(2) || px2 < +Math.min(x3, x4).toFixed(2) || px2 > +Math.max(x3, x4).toFixed(2) || py2 < +Math.min(y1, y2).toFixed(2) || py2 > +Math.max(y1, y2).toFixed(2) || py2 < +Math.min(y3, y4).toFixed(2) || py2 > +Math.max(y3, y4).toFixed(2)) {\n return;\n }\n return {\n x: px,\n y: py\n };\n};\n\nvar isPointInsideBBox = function isPointInsideBBox(bbox, x, y) {\n return x >= bbox.x && x <= bbox.x + bbox.width && y >= bbox.y && y <= bbox.y + bbox.height;\n};\n\nvar rectPath = function rectPath(x, y, w, h, r) {\n if (r) {\n return [['M', +x + +r, y], ['l', w - r * 2, 0], ['a', r, r, 0, 0, 1, r, r], ['l', 0, h - r * 2], ['a', r, r, 0, 0, 1, -r, r], ['l', r * 2 - w, 0], ['a', r, r, 0, 0, 1, -r, -r], ['l', 0, r * 2 - h], ['a', r, r, 0, 0, 1, r, -r], ['z']];\n }\n var res = [['M', x, y], ['l', w, 0], ['l', 0, h], ['l', -w, 0], ['z']];\n res.parsePathArray = parsePathArray;\n return res;\n};\n\nvar box = function box(x, y, width, height) {\n if (x === null) {\n x = y = width = height = 0;\n }\n if (y === null) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n return {\n x: x,\n y: y,\n width: width,\n w: width,\n height: height,\n h: height,\n x2: x + width,\n y2: y + height,\n cx: x + width / 2,\n cy: y + height / 2,\n r1: Math.min(width, height) / 2,\n r2: Math.max(width, height) / 2,\n r0: Math.sqrt(width * width + height * height) / 2,\n path: rectPath(x, y, width, height),\n vb: [x, y, width, height].join(' ')\n };\n};\n\nvar isBBoxIntersect = function isBBoxIntersect(bbox1, bbox2) {\n bbox1 = box(bbox1);\n bbox2 = box(bbox2);\n return isPointInsideBBox(bbox2, bbox1.x, bbox1.y) || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y) || isPointInsideBBox(bbox2, bbox1.x, bbox1.y2) || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2) || isPointInsideBBox(bbox1, bbox2.x, bbox2.y) || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y) || isPointInsideBBox(bbox1, bbox2.x, bbox2.y2) || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2) || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x) && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n};\n\nvar bezierBBox = function bezierBBox(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n if (!Util.isArray(p1x)) {\n p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n }\n var bbox = curveDim.apply(null, p1x);\n return box(bbox.min.x, bbox.min.y, bbox.max.x - bbox.min.x, bbox.max.y - bbox.min.y);\n};\n\nvar findDotsAtSegment = function findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t;\n var t13 = Math.pow(t1, 3);\n var t12 = Math.pow(t1, 2);\n var t2 = t * t;\n var t3 = t2 * t;\n var x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x;\n var y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y;\n var mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x);\n var my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y);\n var nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x);\n var ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y);\n var ax = t1 * p1x + t * c1x;\n var ay = t1 * p1y + t * c1y;\n var cx = t1 * c2x + t * p2x;\n var cy = t1 * c2y + t * p2y;\n var alpha = 90 - Math.atan2(mx - nx, my - ny) * 180 / Math.PI;\n // (mx > nx || my < ny) && (alpha += 180);\n return {\n x: x,\n y: y,\n m: {\n x: mx,\n y: my\n },\n n: {\n x: nx,\n y: ny\n },\n start: {\n x: ax,\n y: ay\n },\n end: {\n x: cx,\n y: cy\n },\n alpha: alpha\n };\n};\n\nvar interHelper = function interHelper(bez1, bez2, justCount) {\n var bbox1 = bezierBBox(bez1);\n var bbox2 = bezierBBox(bez2);\n if (!isBBoxIntersect(bbox1, bbox2)) {\n return justCount ? 0 : [];\n }\n var l1 = bezlen.apply(0, bez1);\n var l2 = bezlen.apply(0, bez2);\n var n1 = ~~(l1 / 8);\n var n2 = ~~(l2 / 8);\n var dots1 = [];\n var dots2 = [];\n var xy = {};\n var res = justCount ? 0 : [];\n for (var i = 0; i < n1 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n dots1.push({\n x: d.x,\n y: d.y,\n t: i / n1\n });\n }\n for (var _i = 0; _i < n2 + 1; _i++) {\n var _d = findDotsAtSegment.apply(0, bez2.concat(_i / n2));\n dots2.push({\n x: _d.x,\n y: _d.y,\n t: _i / n2\n });\n }\n for (var _i2 = 0; _i2 < n1; _i2++) {\n for (var j = 0; j < n2; j++) {\n var di = dots1[_i2];\n var di1 = dots1[_i2 + 1];\n var dj = dots2[j];\n var dj1 = dots2[j + 1];\n var ci = Math.abs(di1.x - di.x) < 0.001 ? 'y' : 'x';\n var cj = Math.abs(dj1.x - dj.x) < 0.001 ? 'y' : 'x';\n var is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n if (is) {\n if (xy[is.x.toFixed(4)] === is.y.toFixed(4)) {\n continue;\n }\n xy[is.x.toFixed(4)] = is.y.toFixed(4);\n var t1 = di.t + Math.abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t);\n var t2 = dj.t + Math.abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n if (justCount) {\n res++;\n } else {\n res.push({\n x: is.x,\n y: is.y,\n t1: t1,\n t2: t2\n });\n }\n }\n }\n }\n }\n return res;\n};\n\nvar interPathHelper = function interPathHelper(path1, path2, justCount) {\n path1 = pathTocurve(path1);\n path2 = pathTocurve(path2);\n var x1 = void 0;\n var y1 = void 0;\n var x2 = void 0;\n var y2 = void 0;\n var x1m = void 0;\n var y1m = void 0;\n var x2m = void 0;\n var y2m = void 0;\n var bez1 = void 0;\n var bez2 = void 0;\n var res = justCount ? 0 : [];\n for (var i = 0, ii = path1.length; i < ii; i++) {\n var pi = path1[i];\n if (pi[0] === 'M') {\n x1 = x1m = pi[1];\n y1 = y1m = pi[2];\n } else {\n if (pi[0] === 'C') {\n bez1 = [x1, y1].concat(pi.slice(1));\n x1 = bez1[6];\n y1 = bez1[7];\n } else {\n bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n x1 = x1m;\n y1 = y1m;\n }\n for (var j = 0, jj = path2.length; j < jj; j++) {\n var pj = path2[j];\n if (pj[0] === 'M') {\n x2 = x2m = pj[1];\n y2 = y2m = pj[2];\n } else {\n if (pj[0] === 'C') {\n bez2 = [x2, y2].concat(pj.slice(1));\n x2 = bez2[6];\n y2 = bez2[7];\n } else {\n bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n x2 = x2m;\n y2 = y2m;\n }\n var intr = interHelper(bez1, bez2, justCount);\n if (justCount) {\n res += intr;\n } else {\n for (var k = 0, kk = intr.length; k < kk; k++) {\n intr[k].segment1 = i;\n intr[k].segment2 = j;\n intr[k].bez1 = bez1;\n intr[k].bez2 = bez2;\n }\n res = res.concat(intr);\n }\n }\n }\n }\n }\n return res;\n};\n\nvar pathIntersection = function pathIntersection(path1, path2) {\n return interPathHelper(path1, path2);\n};\n\nmodule.exports = {\n parsePathString: parsePathString,\n parsePathArray: parsePathArray,\n pathTocurve: pathTocurve,\n pathToAbsolute: pathToAbsolute,\n catmullRomToBezier: catmullRom2bezier,\n rectPath: rectPath,\n intersection: pathIntersection\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/util/path.js\n// module id = 15\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar frame = 0,\n // is an animation frame pending?\ntimeout = 0,\n // is a timeout pending?\ninterval = 0,\n // are any timers active?\npokeDelay = 1000,\n // how frequently we check for clock skew\ntaskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = (typeof performance === \"undefined\" ? \"undefined\" : _typeof(performance)) === \"object\" && performance.now ? performance : Date,\n setFrame = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function (f) {\n setTimeout(f, 17);\n};\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call = this._time = this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function restart(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function stop() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer();\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead,\n e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(),\n delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0,\n t1 = taskHead,\n t2,\n time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-timer/src/timer.js\n// module id = 16\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { color } from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function (a, b) {\n var t = typeof b === \"undefined\" ? \"undefined\" : _typeof(b),\n c;\n return b == null || t === \"boolean\" ? constant(b) : (t === \"number\" ? number : t === \"string\" ? (c = color(b)) ? (b = c, rgb) : string : b instanceof color ? rgb : b instanceof Date ? date : Array.isArray(b) ? array : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object : number)(a, b);\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/value.js\n// module id = 17\n// module chunks = 0","import define, { extend } from \"./define\";\n\nexport function Color() {}\n\nvar _darker = 0.7;\nexport { _darker as darker };\nvar _brighter = 1 / _darker;\n\nexport { _brighter as brighter };\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function displayable() {\n return this.rgb().displayable();\n },\n hex: function hex() {\n return this.rgb().hex();\n },\n toString: function toString() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb(m >> 8 & 0xf | m >> 4 & 0x0f0, m >> 4 & 0xf | m & 0xf0, (m & 0xf) << 4 | m & 0xf, 1) // #f00\n ) : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0) : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb();\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function rgb() {\n return this;\n },\n displayable: function displayable() {\n return 0 <= this.r && this.r <= 255 && 0 <= this.g && this.g <= 255 && 0 <= this.b && this.b <= 255 && 0 <= this.opacity && this.opacity <= 1;\n },\n hex: function hex() {\n return \"#\" + _hex(this.r) + _hex(this.g) + _hex(this.b);\n },\n toString: function toString() {\n var a = this.opacity;a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\") + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \" + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \" + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction _hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;else if (l <= 0 || l >= 1) h = s = NaN;else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl();\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;else if (g === max) h = (b - r) / s + 2;else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity);\n },\n displayable: function displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-color/src/color.js\n// module id = 18\n// module chunks = 0","export default function (constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) {\n prototype[key] = definition[key];\n }return prototype;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-color/src/define.js\n// module id = 19\n// module chunks = 0","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1,\n t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6;\n}\n\nexport default function (values) {\n var n = values.length - 1;\n return function (t) {\n var i = t <= 0 ? t = 0 : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/basis.js\n// module id = 20\n// module chunks = 0","var Util = require('../util/index');\n\nvar regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/ig;\nvar regexDot = /[^\\s\\,]+/ig;\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/ig;\nvar numColorCache = {};\n\nfunction addStop(steps, gradient) {\n var arr = steps.match(regexColorStop);\n Util.each(arr, function (item) {\n item = item.split(':');\n gradient.addColorStop(item[0], item[1]);\n });\n}\n\nfunction parseLineGradient(color, self) {\n var arr = regexLG.exec(color);\n var angle = Util.mod(Util.toRadian(parseFloat(arr[1])), Math.PI * 2);\n var steps = arr[2];\n var box = self.getBBox();\n var start = void 0;\n var end = void 0;\n\n if (angle >= 0 && angle < 0.5 * Math.PI) {\n start = {\n x: box.minX,\n y: box.minY\n };\n end = {\n x: box.maxX,\n y: box.maxY\n };\n } else if (0.5 * Math.PI <= angle && angle < Math.PI) {\n start = {\n x: box.maxX,\n y: box.minY\n };\n end = {\n x: box.minX,\n y: box.maxY\n };\n } else if (Math.PI <= angle && angle < 1.5 * Math.PI) {\n start = {\n x: box.maxX,\n y: box.maxY\n };\n end = {\n x: box.minX,\n y: box.minY\n };\n } else {\n start = {\n x: box.minX,\n y: box.maxY\n };\n end = {\n x: box.maxX,\n y: box.minY\n };\n }\n\n var tanTheta = Math.tan(angle);\n var tanTheta2 = tanTheta * tanTheta;\n\n var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n var y = tanTheta * (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.y;\n var context = self.get('context');\n var gradient = context.createLinearGradient(start.x, start.y, x, y);\n addStop(steps, gradient);\n return gradient;\n}\n\nfunction parseRadialGradient(color, self) {\n var arr = regexRG.exec(color);\n var fx = parseFloat(arr[1]);\n var fy = parseFloat(arr[2]);\n var fr = parseFloat(arr[3]);\n var steps = arr[4];\n // 环半径为0时,默认无渐变,取渐变序列的最后一个颜色\n if (fr === 0) {\n var colors = steps.match(regexColorStop);\n return colors[colors.length - 1].split(':')[1];\n }\n var box = self.getBBox();\n var context = self.get('context');\n var width = box.maxX - box.minX;\n var height = box.maxY - box.minY;\n var r = Math.sqrt(width * width + height * height) / 2;\n var gradient = context.createRadialGradient(box.minX + width * fx, box.minY + height * fy, fr * r, box.minX + width / 2, box.minY + height / 2, r);\n addStop(steps, gradient);\n return gradient;\n}\n\nfunction parsePattern(color, self) {\n if (self.get('patternSource') && self.get('patternSource') === color) {\n return self.get('pattern');\n }\n var pattern = void 0;\n var img = void 0;\n var arr = regexPR.exec(color);\n var repeat = arr[1];\n var source = arr[2];\n\n // Function to be called when pattern loads\n function onload() {\n // Create pattern\n var context = self.get('context');\n pattern = context.createPattern(img, repeat);\n self.setSilent('pattern', pattern); // be a cache\n self.setSilent('patternSource', color);\n }\n\n switch (repeat) {\n case 'a':\n repeat = 'repeat';\n break;\n case 'x':\n repeat = 'repeat-x';\n break;\n case 'y':\n repeat = 'repeat-y';\n break;\n case 'n':\n repeat = 'no-repeat';\n break;\n default:\n repeat = 'no-repeat';\n }\n\n img = new Image();\n // If source URL is not a data URL\n if (!source.match(/^data:/i)) {\n // Set crossOrigin for this image\n img.crossOrigin = 'Anonymous';\n }\n img.src = source;\n\n if (img.complete) {\n onload();\n } else {\n img.onload = onload;\n // Fix onload() bug in IE9\n img.src = img.src;\n }\n\n return pattern;\n}\n\nmodule.exports = {\n parsePath: function parsePath(path) {\n path = path || [];\n if (Util.isArray(path)) {\n return path;\n }\n\n if (Util.isString(path)) {\n path = path.match(regexTags);\n Util.each(path, function (item, index) {\n item = item.match(regexDot);\n if (item[0].length > 1) {\n var tag = item[0].charAt(0);\n item.splice(1, 0, item[0].substr(1));\n item[0] = tag;\n }\n Util.each(item, function (sub, i) {\n if (!isNaN(sub)) {\n item[i] = +sub;\n }\n });\n path[index] = item;\n });\n return path;\n }\n },\n parseStyle: function parseStyle(color, self) {\n if (Util.isString(color)) {\n if (color[1] === '(' || color[2] === '(') {\n if (color[0] === 'l') {\n // regexLG.test(color)\n return parseLineGradient(color, self);\n } else if (color[0] === 'r') {\n // regexRG.test(color)\n return parseRadialGradient(color, self);\n } else if (color[0] === 'p') {\n // regexPR.test(color)\n return parsePattern(color, self);\n }\n }\n return color;\n }\n },\n numberToColor: function numberToColor(num) {\n // 增加缓存\n var color = numColorCache[num];\n if (!color) {\n var str = num.toString(16);\n for (var i = str.length; i < 6; i++) {\n str = '0' + str;\n }\n color = '#' + str;\n numColorCache[num] = color;\n }\n return color;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/util/format.js\n// module id = 21\n// module chunks = 0","var vec2 = require('../../../util/matrix').vec2;\n\nmodule.exports = {\n at: function at(p1, p2, t) {\n return (p2 - p1) * t + p1;\n },\n pointDistance: function pointDistance(x1, y1, x2, y2, x, y) {\n var d = [x2 - x1, y2 - y1];\n if (vec2.exactEquals(d, [0, 0])) {\n return NaN;\n }\n\n var u = [-d[1], d[0]];\n vec2.normalize(u, u);\n var a = [x - x1, y - y1];\n return Math.abs(vec2.dot(a, u));\n },\n box: function box(x1, y1, x2, y2, lineWidth) {\n var halfWidth = lineWidth / 2;\n var minX = Math.min(x1, x2);\n var maxX = Math.max(x1, x2);\n var minY = Math.min(y1, y2);\n var maxY = Math.max(y1, y2);\n\n return {\n minX: minX - halfWidth,\n minY: minY - halfWidth,\n maxX: maxX + halfWidth,\n maxY: maxY + halfWidth\n };\n },\n len: function len(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/math/line.js\n// module id = 22\n// module chunks = 0","var Util = require('../../../util/index');\nvar vec2 = require('../../../util/matrix').vec2;\n\nfunction quadraticAt(p0, p1, p2, t) {\n var onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\nfunction quadraticProjectPoint(x1, y1, x2, y2, x3, y3, x, y, out) {\n var t = void 0;\n var interval = 0.005;\n var d = Infinity;\n var d1 = void 0;\n var v1 = void 0;\n var v2 = void 0;\n var _t = void 0;\n var d2 = void 0;\n var i = void 0;\n var EPSILON = 0.0001;\n var v0 = [x, y];\n\n for (_t = 0; _t < 1; _t += 0.05) {\n v1 = [quadraticAt(x1, x2, x3, _t), quadraticAt(y1, y2, y3, _t)];\n\n d1 = vec2.squaredDistance(v0, v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n for (i = 0; i < 32; i++) {\n if (interval < EPSILON) {\n break;\n }\n\n var prev = t - interval;\n var next = t + interval;\n\n v1 = [quadraticAt(x1, x2, x3, prev), quadraticAt(y1, y2, y3, prev)];\n\n d1 = vec2.squaredDistance(v0, v1);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n v2 = [quadraticAt(x1, x2, x3, next), quadraticAt(y1, y2, y3, next)];\n\n d2 = vec2.squaredDistance(v0, v2);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n\n if (out) {\n out.x = quadraticAt(x1, x2, x3, t);\n out.y = quadraticAt(y1, y2, y3, t);\n }\n\n return Math.sqrt(d);\n}\n\nfunction quadraticExtrema(p0, p1, p2) {\n var a = p0 + p2 - 2 * p1;\n if (Util.isNumberEqual(a, 0)) {\n return [0.5];\n }\n var rst = (p0 - p1) / a;\n if (rst <= 1 && rst >= 0) {\n return [rst];\n }\n return [];\n}\n\nmodule.exports = {\n at: quadraticAt,\n projectPoint: function projectPoint(x1, y1, x2, y2, x3, y3, x, y) {\n var rst = {};\n quadraticProjectPoint(x1, y1, x2, y2, x3, y3, x, y, rst);\n return rst;\n },\n\n pointDistance: quadraticProjectPoint,\n extrema: quadraticExtrema\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/math/quadratic.js\n// module id = 23\n// module chunks = 0","var Util = require('../../../util/index');\nvar vec2 = require('../../../util/matrix').vec2;\n\nfunction circlePoint(cx, cy, r, angle) {\n return {\n x: Math.cos(angle) * r + cx,\n y: Math.sin(angle) * r + cy\n };\n}\n\nfunction angleNearTo(angle, min, max, out) {\n var v1 = void 0;\n var v2 = void 0;\n if (out) {\n if (angle < min) {\n v1 = min - angle;\n v2 = Math.PI * 2 - max + angle;\n } else if (angle > max) {\n v1 = Math.PI * 2 - angle + min;\n v2 = angle - max;\n }\n } else {\n v1 = angle - min;\n v2 = max - angle;\n }\n\n return v1 > v2 ? max : min;\n}\n\nfunction nearAngle(angle, startAngle, endAngle, clockwise) {\n var plus = 0;\n if (endAngle - startAngle >= Math.PI * 2) {\n plus = Math.PI * 2;\n }\n startAngle = Util.mod(startAngle, Math.PI * 2);\n endAngle = Util.mod(endAngle, Math.PI * 2) + plus;\n angle = Util.mod(angle, Math.PI * 2);\n if (clockwise) {\n if (startAngle >= endAngle) {\n if (angle > endAngle && angle < startAngle) {\n return angle;\n }\n return angleNearTo(angle, endAngle, startAngle, true);\n }\n if (angle < startAngle || angle > endAngle) {\n return angle;\n }\n return angleNearTo(angle, startAngle, endAngle);\n }\n if (startAngle <= endAngle) {\n if (startAngle < angle && angle < endAngle) {\n return angle;\n }\n return angleNearTo(angle, startAngle, endAngle, true);\n }\n if (angle > startAngle || angle < endAngle) {\n return angle;\n }\n return angleNearTo(angle, endAngle, startAngle);\n}\n\nfunction arcProjectPoint(cx, cy, r, startAngle, endAngle, clockwise, x, y, out) {\n var v = [x, y];\n var v0 = [cx, cy];\n var v1 = [1, 0];\n var subv = vec2.subtract([], v, v0);\n var angle = vec2.angleTo(v1, subv);\n\n angle = nearAngle(angle, startAngle, endAngle, clockwise);\n var vpoint = [r * Math.cos(angle) + cx, r * Math.sin(angle) + cy];\n if (out) {\n out.x = vpoint[0];\n out.y = vpoint[1];\n }\n var d = vec2.distance(vpoint, v);\n return d;\n}\n\nfunction arcBox(cx, cy, r, startAngle, endAngle, clockwise) {\n var angleRight = 0;\n var angleBottom = Math.PI / 2;\n var angleLeft = Math.PI;\n var angleTop = Math.PI * 3 / 2;\n var points = [];\n var angle = nearAngle(angleRight, startAngle, endAngle, clockwise);\n if (angle === angleRight) {\n points.push(circlePoint(cx, cy, r, angleRight));\n }\n\n angle = nearAngle(angleBottom, startAngle, endAngle, clockwise);\n if (angle === angleBottom) {\n points.push(circlePoint(cx, cy, r, angleBottom));\n }\n\n angle = nearAngle(angleLeft, startAngle, endAngle, clockwise);\n if (angle === angleLeft) {\n points.push(circlePoint(cx, cy, r, angleLeft));\n }\n\n angle = nearAngle(angleTop, startAngle, endAngle, clockwise);\n if (angle === angleTop) {\n points.push(circlePoint(cx, cy, r, angleTop));\n }\n\n points.push(circlePoint(cx, cy, r, startAngle));\n points.push(circlePoint(cx, cy, r, endAngle));\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n Util.each(points, function (point) {\n if (minX > point.x) {\n minX = point.x;\n }\n if (maxX < point.x) {\n maxX = point.x;\n }\n if (minY > point.y) {\n minY = point.y;\n }\n if (maxY < point.y) {\n maxY = point.y;\n }\n });\n\n return {\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY\n };\n}\n\nmodule.exports = {\n nearAngle: nearAngle,\n projectPoint: function projectPoint(cx, cy, r, startAngle, endAngle, clockwise, x, y) {\n var rst = {};\n arcProjectPoint(cx, cy, r, startAngle, endAngle, clockwise, x, y, rst);\n return rst;\n },\n\n pointDistance: arcProjectPoint,\n box: arcBox\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/math/arc.js\n// module id = 24\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\n\nvar Rect = function Rect(cfg) {\n Rect.superclass.constructor.call(this, cfg);\n};\n\nRect.ATTRS = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n radius: 0,\n lineWidth: 1\n};\n\nUtil.extend(Rect, Shape);\n\nUtil.augment(Rect, {\n canFill: true,\n canStroke: true,\n type: 'rect',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n radius: 0\n };\n },\n calculateBox: function calculateBox() {\n var self = this;\n var attrs = self.__attrs;\n var x = attrs.x;\n var y = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var lineWidth = this.getHitLineWidth();\n\n var halfWidth = lineWidth / 2;\n return {\n minX: x - halfWidth,\n minY: y - halfWidth,\n maxX: x + width + halfWidth,\n maxY: y + height + halfWidth\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var self = this;\n var fill = self.hasFill();\n var stroke = self.hasStroke();\n\n if (fill && stroke) {\n return self._isPointInFill(x, y) || self._isPointInStroke(x, y);\n }\n\n if (fill) {\n return self._isPointInFill(x, y);\n }\n\n if (stroke) {\n return self._isPointInStroke(x, y);\n }\n\n return false;\n },\n _isPointInFill: function _isPointInFill(x, y) {\n var context = this.get('context');\n\n if (!context) return false;\n this.createPath();\n return context.isPointInPath(x, y);\n },\n _isPointInStroke: function _isPointInStroke(x, y) {\n var self = this;\n var attrs = self.__attrs;\n var rx = attrs.x;\n var ry = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var radius = attrs.radius;\n var lineWidth = this.getHitLineWidth();\n\n if (radius === 0) {\n var halfWidth = lineWidth / 2;\n return Inside.line(rx - halfWidth, ry, rx + width + halfWidth, ry, lineWidth, x, y) || Inside.line(rx + width, ry - halfWidth, rx + width, ry + height + halfWidth, lineWidth, x, y) || Inside.line(rx + width + halfWidth, ry + height, rx - halfWidth, ry + height, lineWidth, x, y) || Inside.line(rx, ry + height + halfWidth, rx, ry - halfWidth, lineWidth, x, y);\n }\n\n return Inside.line(rx + radius, ry, rx + width - radius, ry, lineWidth, x, y) || Inside.line(rx + width, ry + radius, rx + width, ry + height - radius, lineWidth, x, y) || Inside.line(rx + width - radius, ry + height, rx + radius, ry + height, lineWidth, x, y) || Inside.line(rx, ry + height - radius, rx, ry + radius, lineWidth, x, y) || Inside.arcline(rx + width - radius, ry + radius, radius, 1.5 * Math.PI, 2 * Math.PI, false, lineWidth, x, y) || Inside.arcline(rx + width - radius, ry + height - radius, radius, 0, 0.5 * Math.PI, false, lineWidth, x, y) || Inside.arcline(rx + radius, ry + height - radius, radius, 0.5 * Math.PI, Math.PI, false, lineWidth, x, y) || Inside.arcline(rx + radius, ry + radius, radius, Math.PI, 1.5 * Math.PI, false, lineWidth, x, y);\n },\n createPath: function createPath(context) {\n var self = this;\n var attrs = self.__attrs;\n var x = attrs.x;\n var y = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var radius = attrs.radius;\n context = context || self.get('context');\n\n context.beginPath();\n if (radius === 0) {\n // 改成原生的rect方法\n context.rect(x, y, width, height);\n } else {\n context.moveTo(x + radius, y);\n context.lineTo(x + width - radius, y);\n context.arc(x + width - radius, y + radius, radius, -Math.PI / 2, 0, false);\n context.lineTo(x + width, y + height - radius);\n context.arc(x + width - radius, y + height - radius, radius, 0, Math.PI / 2, false);\n context.lineTo(x + radius, y + height);\n context.arc(x + radius, y + height - radius, radius, Math.PI / 2, Math.PI, false);\n context.lineTo(x, y + radius);\n context.arc(x + radius, y + radius, radius, Math.PI, Math.PI * 3 / 2, false);\n context.closePath();\n }\n }\n});\n\nmodule.exports = Rect;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/rect.js\n// module id = 25\n// module chunks = 0","var Util = require('../../../util/index');\nvar Inside = require('./inside');\nvar Cubic = require('../math/cubic');\nvar Quadratic = require('../math/quadratic');\nvar Ellipse = require('../math/ellipse');\nvar vec3 = require('../../../util/matrix').vec3;\nvar mat3 = require('../../../util/matrix').mat3;\n\nvar ARR_CMD = ['m', 'l', 'c', 'a', 'q', 'h', 'v', 't', 's', 'z'];\n\nfunction toAbsolute(x, y, curPoint) {\n // 获取绝对坐标\n return {\n x: curPoint.x + x,\n y: curPoint.y + y\n };\n}\n\nfunction toSymmetry(point, center) {\n // 点对称\n return {\n x: center.x + (center.x - point.x),\n y: center.y + (center.y - point.y)\n };\n}\n\nfunction vMag(v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n\nfunction vRatio(u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n}\n\nfunction vAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n}\n\nfunction getArcParams(point1, point2, fa, fs, rx, ry, psiDeg) {\n var psi = Util.mod(Util.toRadian(psiDeg), Math.PI * 2);\n var x1 = point1.x;\n var y1 = point1.y;\n var x2 = point2.x;\n var y2 = point2.y;\n var xp = Math.cos(psi) * (x1 - x2) / 2.0 + Math.sin(psi) * (y1 - y2) / 2.0;\n var yp = -1 * Math.sin(psi) * (x1 - x2) / 2.0 + Math.cos(psi) * (y1 - y2) / 2.0;\n var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n var diff = rx * rx * (yp * yp) + ry * ry * (xp * xp);\n var f = Math.sqrt((rx * rx * (ry * ry) - diff) / diff);\n\n if (fa === fs) {\n f *= -1;\n }\n if (isNaN(f)) {\n f = 0;\n }\n\n var cxp = f * rx * yp / ry;\n var cyp = f * -ry * xp / rx;\n\n var cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;\n var cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;\n\n var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n var dTheta = vAngle(u, v);\n if (fs === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * Math.PI;\n }\n if (fs === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * Math.PI;\n }\n return [point1, cx, cy, rx, ry, theta, dTheta, psi, fs];\n}\n\nvar PathSegment = function PathSegment(item, preSegment, isLast) {\n this.preSegment = preSegment;\n this.isLast = isLast;\n this.init(item, preSegment);\n};\n\nUtil.augment(PathSegment, {\n init: function init(item, preSegment) {\n var command = item[0];\n preSegment = preSegment || {\n endPoint: {\n x: 0,\n y: 0\n }\n };\n var relative = ARR_CMD.indexOf(command) >= 0; // /[a-z]/.test(command);\n var cmd = relative ? command.toUpperCase() : command;\n var p = item;\n var point1 = void 0;\n var point2 = void 0;\n var point3 = void 0;\n var point = void 0;\n var preEndPoint = preSegment.endPoint;\n\n var p1 = p[1];\n var p2 = p[2];\n switch (cmd) {\n default:\n break;\n case 'M':\n if (relative) {\n point = toAbsolute(p1, p2, preEndPoint);\n } else {\n point = {\n x: p1,\n y: p2\n };\n }\n this.command = 'M';\n this.params = [preEndPoint, point];\n this.subStart = point;\n this.endPoint = point;\n break;\n case 'L':\n if (relative) {\n point = toAbsolute(p1, p2, preEndPoint);\n } else {\n point = {\n x: p1,\n y: p2\n };\n }\n this.command = 'L';\n this.params = [preEndPoint, point];\n this.subStart = preSegment.subStart;\n this.endPoint = point;\n this.endTangent = function () {\n return [point.x - preEndPoint.x, point.y - preEndPoint.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point.x, preEndPoint.y - point.y];\n };\n break;\n case 'H':\n if (relative) {\n point = toAbsolute(p1, 0, preEndPoint);\n } else {\n point = {\n x: p1,\n y: preEndPoint.y\n };\n }\n this.command = 'L';\n this.params = [preEndPoint, point];\n this.subStart = preSegment.subStart;\n this.endPoint = point;\n this.endTangent = function () {\n return [point.x - preEndPoint.x, point.y - preEndPoint.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point.x, preEndPoint.y - point.y];\n };\n break;\n case 'V':\n if (relative) {\n point = toAbsolute(0, p1, preEndPoint);\n } else {\n point = {\n x: preEndPoint.x,\n y: p1\n };\n }\n this.command = 'L';\n this.params = [preEndPoint, point];\n this.subStart = preSegment.subStart;\n this.endPoint = point;\n this.endTangent = function () {\n return [point.x - preEndPoint.x, point.y - preEndPoint.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point.x, preEndPoint.y - point.y];\n };\n break;\n case 'Q':\n if (relative) {\n point1 = toAbsolute(p1, p2, preEndPoint);\n point2 = toAbsolute(p[3], p[4], preEndPoint);\n } else {\n point1 = {\n x: p1,\n y: p2\n };\n point2 = {\n x: p[3],\n y: p[4]\n };\n }\n this.command = 'Q';\n this.params = [preEndPoint, point1, point2];\n this.subStart = preSegment.subStart;\n this.endPoint = point2;\n this.endTangent = function () {\n return [point2.x - point1.x, point2.y - point1.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point1.x, preEndPoint.y - point1.y];\n };\n break;\n case 'T':\n if (relative) {\n point2 = toAbsolute(p1, p2, preEndPoint);\n } else {\n point2 = {\n x: p1,\n y: p2\n };\n }\n if (preSegment.command === 'Q') {\n point1 = toSymmetry(preSegment.params[1], preEndPoint);\n this.command = 'Q';\n this.params = [preEndPoint, point1, point2];\n this.subStart = preSegment.subStart;\n this.endPoint = point2;\n this.endTangent = function () {\n return [point2.x - point1.x, point2.y - point1.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point1.x, preEndPoint.y - point1.y];\n };\n } else {\n this.command = 'TL';\n this.params = [preEndPoint, point2];\n this.subStart = preSegment.subStart;\n this.endPoint = point2;\n this.endTangent = function () {\n return [point2.x - preEndPoint.x, point2.y - preEndPoint.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point2.x, preEndPoint.y - point2.y];\n };\n }\n\n break;\n case 'C':\n if (relative) {\n point1 = toAbsolute(p1, p2, preEndPoint);\n point2 = toAbsolute(p[3], p[4], preEndPoint);\n point3 = toAbsolute(p[5], p[6], preEndPoint);\n } else {\n point1 = {\n x: p1,\n y: p2\n };\n point2 = {\n x: p[3],\n y: p[4]\n };\n point3 = {\n x: p[5],\n y: p[6]\n };\n }\n this.command = 'C';\n this.params = [preEndPoint, point1, point2, point3];\n this.subStart = preSegment.subStart;\n this.endPoint = point3;\n this.endTangent = function () {\n return [point3.x - point2.x, point3.y - point2.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point1.x, preEndPoint.y - point1.y];\n };\n break;\n case 'S':\n if (relative) {\n point2 = toAbsolute(p1, p2, preEndPoint);\n point3 = toAbsolute(p[3], p[4], preEndPoint);\n } else {\n point2 = {\n x: p1,\n y: p2\n };\n point3 = {\n x: p[3],\n y: p[4]\n };\n }\n if (preSegment.command === 'C') {\n point1 = toSymmetry(preSegment.params[2], preEndPoint);\n this.command = 'C';\n this.params = [preEndPoint, point1, point2, point3];\n this.subStart = preSegment.subStart;\n this.endPoint = point3;\n this.endTangent = function () {\n return [point3.x - point2.x, point3.y - point2.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point1.x, preEndPoint.y - point1.y];\n };\n } else {\n this.command = 'SQ';\n this.params = [preEndPoint, point2, point3];\n this.subStart = preSegment.subStart;\n this.endPoint = point3;\n this.endTangent = function () {\n return [point3.x - point2.x, point3.y - point2.y];\n };\n this.startTangent = function () {\n return [preEndPoint.x - point2.x, preEndPoint.y - point2.y];\n };\n }\n break;\n case 'A':\n {\n var rx = p1;\n var ry = p2;\n var psi = p[3];\n var fa = p[4];\n var fs = p[5];\n if (relative) {\n point = toAbsolute(p[6], p[7], preEndPoint);\n } else {\n point = {\n x: p[6],\n y: p[7]\n };\n }\n\n this.command = 'A';\n var params = getArcParams(preEndPoint, point, fa, fs, rx, ry, psi);\n this.params = params;\n var start = preSegment.subStart;\n this.subStart = start;\n this.endPoint = point;\n var startAngle = params[5] % (Math.PI * 2);\n if (Util.isNumberEqual(startAngle, Math.PI * 2)) {\n startAngle = 0;\n }\n var endAngle = params[6] % (Math.PI * 2);\n if (Util.isNumberEqual(endAngle, Math.PI * 2)) {\n endAngle = 0;\n }\n var d = 0.001;\n this.startTangent = function () {\n if (fs === 0) {\n d *= -1;\n }\n var dx = params[3] * Math.cos(startAngle - d) + params[1];\n var dy = params[4] * Math.sin(startAngle - d) + params[2];\n return [dx - start.x, dy - start.y];\n };\n this.endTangent = function () {\n var endAngle = params[6];\n if (endAngle - Math.PI * 2 < 0.0001) {\n endAngle = 0;\n }\n var dx = params[3] * Math.cos(startAngle + endAngle + d) + params[1];\n var dy = params[4] * Math.sin(startAngle + endAngle - d) + params[2];\n return [preEndPoint.x - dx, preEndPoint.y - dy];\n };\n break;\n }\n case 'Z':\n {\n this.command = 'Z';\n this.params = [preEndPoint, preSegment.subStart];\n this.subStart = preSegment.subStart;\n this.endPoint = preSegment.subStart;\n }\n }\n },\n isInside: function isInside(x, y, lineWidth) {\n var self = this;\n var command = self.command;\n var params = self.params;\n var box = self.box;\n if (box) {\n if (!Inside.box(box.minX, box.maxX, box.minY, box.maxY, x, y)) {\n return false;\n }\n }\n switch (command) {\n default:\n break;\n case 'M':\n return false;\n case 'TL':\n case 'L':\n case 'Z':\n return Inside.line(params[0].x, params[0].y, params[1].x, params[1].y, lineWidth, x, y);\n case 'SQ':\n case 'Q':\n return Inside.quadraticline(params[0].x, params[0].y, params[1].x, params[1].y, params[2].x, params[2].y, lineWidth, x, y);\n case 'C':\n {\n return Inside.cubicline(params[0].x, params[0].y, params[1].x, params[1].y, params[2].x, params[2].y, params[3].x, params[3].y, lineWidth, x, y);\n }\n case 'A':\n {\n var p = params;\n var cx = p[1];\n var cy = p[2];\n var rx = p[3];\n var ry = p[4];\n var theta = p[5];\n var dTheta = p[6];\n var psi = p[7];\n var fs = p[8];\n\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n\n p = [x, y, 1];\n var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n mat3.translate(m, m, [-cx, -cy]);\n mat3.rotate(m, m, -psi);\n mat3.scale(m, m, [1 / scaleX, 1 / scaleY]);\n vec3.transformMat3(p, p, m);\n return Inside.arcline(0, 0, r, theta, theta + dTheta, 1 - fs, lineWidth, p[0], p[1]);\n }\n }\n return false;\n },\n draw: function draw(context) {\n var command = this.command;\n var params = this.params;\n var point1 = void 0;\n var point2 = void 0;\n var point3 = void 0;\n\n switch (command) {\n default:\n break;\n case 'M':\n context.moveTo(params[1].x, params[1].y);\n break;\n case 'TL':\n case 'L':\n context.lineTo(params[1].x, params[1].y);\n break;\n case 'SQ':\n case 'Q':\n point1 = params[1];\n point2 = params[2];\n context.quadraticCurveTo(point1.x, point1.y, point2.x, point2.y);\n break;\n case 'C':\n point1 = params[1];\n point2 = params[2];\n point3 = params[3];\n context.bezierCurveTo(point1.x, point1.y, point2.x, point2.y, point3.x, point3.y);\n break;\n case 'A':\n {\n var p = params;\n var p1 = p[1];\n var p2 = p[2];\n var cx = p1;\n var cy = p2;\n var rx = p[3];\n var ry = p[4];\n var theta = p[5];\n var dTheta = p[6];\n var psi = p[7];\n var fs = p[8];\n\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n\n context.translate(cx, cy);\n context.rotate(psi);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, theta, theta + dTheta, 1 - fs);\n context.scale(1 / scaleX, 1 / scaleY);\n context.rotate(-psi);\n context.translate(-cx, -cy);\n break;\n }\n case 'Z':\n context.closePath();\n break;\n }\n },\n getBBox: function getBBox(lineWidth) {\n var halfWidth = lineWidth / 2;\n var params = this.params;\n var yDims = void 0;\n var xDims = void 0;\n var i = void 0;\n var l = void 0;\n\n switch (this.command) {\n default:\n case 'M':\n case 'Z':\n break;\n case 'TL':\n case 'L':\n this.box = {\n minX: Math.min(params[0].x, params[1].x) - halfWidth,\n maxX: Math.max(params[0].x, params[1].x) + halfWidth,\n minY: Math.min(params[0].y, params[1].y) - halfWidth,\n maxY: Math.max(params[0].y, params[1].y) + halfWidth\n };\n break;\n case 'SQ':\n case 'Q':\n xDims = Quadratic.extrema(params[0].x, params[1].x, params[2].x);\n for (i = 0, l = xDims.length; i < l; i++) {\n xDims[i] = Quadratic.at(params[0].x, params[1].x, params[2].x, xDims[i]);\n }\n xDims.push(params[0].x, params[2].x);\n yDims = Quadratic.extrema(params[0].y, params[1].y, params[2].y);\n for (i = 0, l = yDims.length; i < l; i++) {\n yDims[i] = Quadratic.at(params[0].y, params[1].y, params[2].y, yDims);\n }\n yDims.push(params[0].y, params[2].y);\n this.box = {\n minX: Math.min.apply(Math, xDims) - halfWidth,\n maxX: Math.max.apply(Math, xDims) + halfWidth,\n minY: Math.min.apply(Math, yDims) - halfWidth,\n maxY: Math.max.apply(Math, yDims) + halfWidth\n };\n break;\n case 'C':\n xDims = Cubic.extrema(params[0].x, params[1].x, params[2].x, params[3].x);\n for (i = 0, l = xDims.length; i < l; i++) {\n xDims[i] = Cubic.at(params[0].x, params[1].x, params[2].x, params[3].x, xDims[i]);\n }\n yDims = Cubic.extrema(params[0].y, params[1].y, params[2].y, params[3].y);\n for (i = 0, l = yDims.length; i < l; i++) {\n yDims[i] = Cubic.at(params[0].y, params[1].y, params[2].y, params[3].y, yDims[i]);\n }\n xDims.push(params[0].x, params[3].x);\n yDims.push(params[0].y, params[3].y);\n this.box = {\n minX: Math.min.apply(Math, xDims) - halfWidth,\n maxX: Math.max.apply(Math, xDims) + halfWidth,\n minY: Math.min.apply(Math, yDims) - halfWidth,\n maxY: Math.max.apply(Math, yDims) + halfWidth\n };\n break;\n case 'A':\n {\n // todo 待优化\n var p = params;\n var cx = p[1];\n var cy = p[2];\n var rx = p[3];\n var ry = p[4];\n var theta = p[5];\n var dTheta = p[6];\n var psi = p[7];\n var fs = p[8];\n var start = theta;\n var end = theta + dTheta;\n\n var xDim = Ellipse.xExtrema(psi, rx, ry);\n var minX = Infinity;\n var maxX = -Infinity;\n var xs = [start, end];\n for (i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var xAngle = xDim + i;\n if (fs === 1) {\n if (start < xAngle && xAngle < end) {\n xs.push(xAngle);\n }\n } else {\n if (end < xAngle && xAngle < start) {\n xs.push(xAngle);\n }\n }\n }\n\n for (i = 0, l = xs.length; i < l; i++) {\n var x = Ellipse.xAt(psi, rx, ry, cx, xs[i]);\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n }\n\n var yDim = Ellipse.yExtrema(psi, rx, ry);\n var minY = Infinity;\n var maxY = -Infinity;\n var ys = [start, end];\n for (i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var yAngle = yDim + i;\n if (fs === 1) {\n if (start < yAngle && yAngle < end) {\n ys.push(yAngle);\n }\n } else {\n if (end < yAngle && yAngle < start) {\n ys.push(yAngle);\n }\n }\n }\n\n for (i = 0, l = ys.length; i < l; i++) {\n var y = Ellipse.yAt(psi, rx, ry, cy, ys[i]);\n if (y < minY) {\n minY = y;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n this.box = {\n minX: minX - halfWidth,\n maxX: maxX + halfWidth,\n minY: minY - halfWidth,\n maxY: maxY + halfWidth\n };\n break;\n }\n }\n }\n});\n\nmodule.exports = PathSegment;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/util/path-segment.js\n// module id = 26\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\nvar Format = require('../../util/format');\nvar PathSegment = require('./util/path-segment');\n\nvar Marker = function Marker(cfg) {\n Marker.superclass.constructor.call(this, cfg);\n};\n\nMarker.Symbols = {\n // 圆\n circle: function circle(x, y, r) {\n return [['M', x, y], ['m', -r, 0], ['a', r, r, 0, 1, 0, r * 2, 0], ['a', r, r, 0, 1, 0, -r * 2, 0]];\n },\n\n // 正方形\n square: function square(x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n },\n\n // 菱形\n diamond: function diamond(x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n },\n\n // 三角形\n triangle: function triangle(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['z']];\n },\n\n // 倒三角形\n 'triangle-down': function triangleDown(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n }\n};\n\nMarker.ATTRS = {\n path: null,\n lineWidth: 1\n};\n\nUtil.extend(Marker, Shape);\n\nUtil.augment(Marker, {\n type: 'marker',\n canFill: true,\n canStroke: true,\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n x: 0,\n y: 0,\n lineWidth: 1\n };\n },\n calculateBox: function calculateBox() {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.radius;\n var lineWidth = this.getHitLineWidth();\n var halfWidth = lineWidth / 2 + r;\n return {\n minX: cx - halfWidth,\n minY: cy - halfWidth,\n maxX: cx + halfWidth,\n maxY: cy + halfWidth\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.radius || attrs.r;\n var lineWidth = this.getHitLineWidth();\n return Inside.circle(cx, cy, r + lineWidth / 2, x, y);\n },\n createPath: function createPath(context) {\n var attrs = this.__attrs;\n var x = attrs.x;\n var y = attrs.y;\n var r = attrs.radius || attrs.r;\n var symbol = attrs.symbol || 'circle';\n var method = void 0;\n if (Util.isFunction(symbol)) {\n method = symbol;\n } else {\n method = Marker.Symbols[symbol];\n }\n var path = method(x, y, r);\n path = Format.parsePath(path);\n context.beginPath();\n var preSegment = void 0;\n for (var i = 0; i < path.length; i++) {\n var item = path[i];\n preSegment = new PathSegment(item, preSegment, i === path.length - 1);\n preSegment.draw(context);\n }\n }\n});\n\nmodule.exports = Marker;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/marker.js\n// module id = 27\n// module chunks = 0","module.exports = {\n // renderers\n svg: require('./svg/index'),\n canvas: require('./canvas/index'),\n // utils\n CommonUtil: require('./util/common'),\n DomUtil: require('./util/dom'),\n MatrixUtil: require('./util/matrix'),\n PathUtil: require('./util/path'),\n // version, etc.\n version: '3.0.0-beta.4'\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/index.js\n// module id = 28\n// module chunks = 0","var Util = require('./common');\n\nvar TABLE = document.createElement('table');\nvar TABLE_TR = document.createElement('tr');\nvar FRAGMENT_REG = /^\\s*<(\\w+|!)[^>]*>/;\nvar CONTAINERS = {\n tr: document.createElement('tbody'),\n tbody: TABLE,\n thead: TABLE,\n tfoot: TABLE,\n td: TABLE_TR,\n th: TABLE_TR,\n '*': document.createElement('div')\n};\n\nmodule.exports = {\n getBoundingClientRect: function getBoundingClientRect(node, defaultValue) {\n if (node && node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n var top = document.documentElement.clientTop;\n var left = document.documentElement.clientLeft;\n return {\n top: rect.top - top,\n bottom: rect.bottom - top,\n left: rect.left - left,\n right: rect.right - left\n };\n }\n return defaultValue || null;\n },\n\n /**\n * 获取样式\n * @param {Object} dom DOM节点\n * @param {String} name 样式名\n * @param {Any} defaultValue 默认值\n * @return {String} 属性值\n */\n getStyle: function getStyle(dom, name, defaultValue) {\n try {\n if (window.getComputedStyle) {\n return window.getComputedStyle(dom, null)[name];\n }\n return dom.currentStyle[name];\n } catch (e) {\n if (!Util.isNil(defaultValue)) {\n return defaultValue;\n }\n return null;\n }\n },\n modifyCSS: function modifyCSS(dom, css) {\n if (dom) {\n for (var key in css) {\n if (css.hasOwnProperty(key)) {\n dom.style[key] = css[key];\n }\n }\n }\n return dom;\n },\n\n /**\n * 创建DOM 节点\n * @param {String} str Dom 字符串\n * @return {HTMLElement} DOM 节点\n */\n createDom: function createDom(str) {\n var name = FRAGMENT_REG.test(str) && RegExp.$1;\n if (!(name in CONTAINERS)) {\n name = '*';\n }\n var container = CONTAINERS[name];\n str = str.replace(/(^\\s*)|(\\s*$)/g, '');\n container.innerHTML = '' + str;\n var dom = container.childNodes[0];\n container.removeChild(dom);\n return dom;\n },\n getRatio: function getRatio() {\n return window.devicePixelRatio ? window.devicePixelRatio : 2;\n },\n\n /**\n * 获取宽度\n * @param {HTMLElement} el dom节点\n * @param {Number} defaultValue 默认值\n * @return {Number} 宽度\n */\n getWidth: function getWidth(el, defaultValue) {\n var width = this.getStyle(el, 'width', defaultValue);\n if (width === 'auto') {\n width = el.offsetWidth;\n }\n return parseFloat(width);\n },\n\n /**\n * 获取高度\n * @param {HTMLElement} el dom节点\n * @param {Number} defaultValue 默认值\n * @return {Number} 高度\n */\n getHeight: function getHeight(el, defaultValue) {\n var height = this.getStyle(el, 'height', defaultValue);\n if (height === 'auto') {\n height = el.offsetHeight;\n }\n return parseFloat(height);\n },\n\n /**\n * 获取外层高度\n * @param {HTMLElement} el dom节点\n * @param {Number} defaultValue 默认值\n * @return {Number} 高度\n */\n getOuterHeight: function getOuterHeight(el, defaultValue) {\n var height = this.getHeight(el, defaultValue);\n var bTop = parseFloat(this.getStyle(el, 'borderTopWidth')) || 0;\n var pTop = parseFloat(this.getStyle(el, 'paddingTop')) || 0;\n var pBottom = parseFloat(this.getStyle(el, 'paddingBottom')) || 0;\n var bBottom = parseFloat(this.getStyle(el, 'borderBottomWidth')) || 0;\n return height + bTop + bBottom + pTop + pBottom;\n },\n\n /**\n * 获取外层宽度\n * @param {HTMLElement} el dom节点\n * @param {Number} defaultValue 默认值\n * @return {Number} 宽度\n */\n getOuterWidth: function getOuterWidth(el, defaultValue) {\n var width = this.getWidth(el, defaultValue);\n var bLeft = parseFloat(this.getStyle(el, 'borderLeftWidth')) || 0;\n var pLeft = parseFloat(this.getStyle(el, 'paddingLeft')) || 0;\n var pRight = parseFloat(this.getStyle(el, 'paddingRight')) || 0;\n var bRight = parseFloat(this.getStyle(el, 'borderRightWidth')) || 0;\n return width + bLeft + bRight + pLeft + pRight;\n },\n\n /**\n * 添加事件监听器\n * @param {Object} target DOM对象\n * @param {String} eventType 事件名\n * @param {Funtion} callback 回调函数\n * @return {Object} 返回对象\n */\n addEventListener: function addEventListener(target, eventType, callback) {\n if (target) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function remove() {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n }\n },\n requestAnimationFrame: function requestAnimationFrame(fn) {\n var method = window.requestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) {\n return setTimeout(fn, 16);\n };\n\n return method(fn);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/util/dom.js\n// module id = 29\n// module chunks = 0","var Util = require('../util/index');\n\nvar Event = function Event(type, event, bubbles, cancelable) {\n this.type = type; // 事件类型\n this.target = null; // 目标\n this.currentTarget = null; // 当前目标\n this.bubbles = bubbles; // 冒泡\n this.cancelable = cancelable; // 是否能够阻止\n this.timeStamp = new Date().getTime(); // 时间戳\n this.defaultPrevented = false; // 阻止默认\n this.propagationStopped = false; // 阻止冒泡\n this.removed = false; // 是否被移除\n this.event = event; // 触发的原生事件\n};\n\nUtil.augment(Event, {\n preventDefault: function preventDefault() {\n this.defaultPrevented = this.cancelable && true;\n },\n stopPropagation: function stopPropagation() {\n this.propagationStopped = true;\n },\n remove: function remove() {\n this.remove = true;\n },\n clone: function clone() {\n return Util.clone(this);\n },\n toString: function toString() {\n return '[Event (type=' + this.type + ')]';\n }\n});\n\nmodule.exports = Event;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/event.js\n// module id = 30\n// module chunks = 0","var Util = require('../../util/index');\nvar Element = require('./element');\nvar Shape = require('../shape/index');\n\nvar SHAPE_MAP = {}; // 缓存图形类型\nvar INDEX = '_INDEX';\n\nfunction getComparer(compare) {\n return function (left, right) {\n var result = compare(left, right);\n return result === 0 ? left[INDEX] - right[INDEX] : result;\n };\n}\n\nvar Group = function Group(cfg) {\n Group.superclass.constructor.call(this, cfg);\n this.set('children', []);\n\n this._beforeRenderUI();\n this._renderUI();\n this._bindUI();\n};\n\nfunction initClassCfgs(c) {\n if (c.__cfg || c === Group) {\n return;\n }\n var superCon = c.superclass.constructor;\n if (superCon && !superCon.__cfg) {\n initClassCfgs(superCon);\n }\n c.__cfg = {};\n\n Util.merge(c.__cfg, superCon.__cfg);\n Util.merge(c.__cfg, c.CFG);\n}\n\nUtil.extend(Group, Element);\n\nUtil.augment(Group, {\n isGroup: true,\n canFill: true,\n canStroke: true,\n init: function init(id) {\n Group.superclass.init.call(this);\n var shape = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n id = id || Util.uniqueId('g_');\n shape.setAttribute('id', id);\n this.setSilent('el', shape);\n this.setSilent('id', id);\n },\n getDefaultCfg: function getDefaultCfg() {\n initClassCfgs(this.constructor);\n return Util.merge({}, this.constructor.__cfg);\n },\n _beforeRenderUI: function _beforeRenderUI() {},\n _renderUI: function _renderUI() {},\n _bindUI: function _bindUI() {},\n addShape: function addShape(type, cfg) {\n var canvas = this.get('canvas');\n cfg = cfg || {};\n var shapeType = SHAPE_MAP[type];\n if (!shapeType) {\n shapeType = Util.upperFirst(type);\n SHAPE_MAP[type] = shapeType;\n }\n if (cfg.attrs) {\n var attrs = cfg.attrs;\n if (type === 'text') {\n // 临时解决\n var topFontFamily = canvas.get('fontFamily');\n if (topFontFamily) {\n attrs.fontFamily = attrs.fontFamily || topFontFamily;\n }\n }\n }\n cfg.canvas = canvas;\n cfg.defs = this.get('defs');\n cfg.type = type;\n var shape = Shape[shapeType];\n if (!shape) {\n throw new TypeError('the shape ' + shapeType + ' is not supported by svg version, use canvas instead');\n }\n var rst = new shape(cfg);\n this.add(rst);\n return rst;\n },\n\n /** 添加图组\n * @param {Function|Object|undefined} param 图组类\n * @param {Object} cfg 配置项\n * @return {Object} rst 图组\n */\n addGroup: function addGroup(param, cfg) {\n var canvas = this.get('canvas');\n var rst = void 0;\n cfg = Util.merge({}, cfg);\n if (Util.isFunction(param)) {\n if (cfg) {\n cfg.canvas = canvas;\n cfg.parent = this;\n rst = new param(cfg);\n } else {\n rst = new param({\n canvas: canvas,\n parent: this\n });\n }\n this.add(rst);\n } else if (Util.isObject(param)) {\n param.canvas = canvas;\n rst = new Group(param);\n this.add(rst);\n } else if (param === undefined) {\n rst = new Group();\n this.add(rst);\n } else {\n return false;\n }\n return rst;\n },\n\n /** 绘制背景\n * @param {Array} padding 内边距\n * @param {Attrs} attrs 图形属性\n * @param {Shape} backShape 背景图形\n * @return {Object} 背景层对象\n */\n renderBack: function renderBack(padding, attrs) {\n var backShape = this.get('backShape');\n var innerBox = this.getBBox();\n // const parent = this.get('parent'); // getParent\n Util.merge(attrs, {\n x: innerBox.minX - padding[3],\n y: innerBox.minY - padding[0],\n width: innerBox.width + padding[1] + padding[3],\n height: innerBox.height + padding[0] + padding[2]\n });\n if (backShape) {\n backShape.attr(attrs);\n } else {\n backShape = this.addShape('rect', {\n zIndex: -1,\n attrs: attrs\n });\n }\n this.set('backShape', backShape);\n this.sort();\n return backShape;\n },\n removeChild: function removeChild(item, destroy) {\n if (arguments.length >= 2) {\n if (this.contain(item)) {\n item.remove(destroy);\n }\n } else {\n if (arguments.length === 1) {\n if (Util.isBoolean(item)) {\n destroy = item;\n } else {\n if (this.contain(item)) {\n item.remove(true);\n }\n return this;\n }\n }\n if (arguments.length === 0) {\n destroy = true;\n }\n\n Group.superclass.remove.call(this, destroy);\n }\n return this;\n },\n\n /**\n * 向组中添加shape或者group\n * @param {Object} items 图形或者分组\n * @return {Object} group 本尊\n */\n add: function add(items) {\n var self = this;\n var children = self.get('children');\n var el = self.get('el');\n if (Util.isArray(items)) {\n Util.each(items, function (item) {\n var parent = item.get('parent');\n if (parent) {\n parent.removeChild(item, false);\n }\n if (item.get('dependencies')) {\n self._addDependency(item);\n }\n self._setEvn(item);\n el.appendChild(item.get('el'));\n });\n children.push.apply(children, items);\n } else {\n var item = items;\n var parent = item.get('parent');\n if (parent) {\n parent.removeChild(item, false);\n }\n self._setEvn(item);\n if (item.get('dependencies')) {\n self._addDependency(item);\n }\n el.appendChild(item.get('el'));\n children.push(item);\n }\n return self;\n },\n contain: function contain(item) {\n var children = this.get('children');\n return children.indexOf(item) > -1;\n },\n getChildByIndex: function getChildByIndex(index) {\n var children = this.get('children');\n return children[index];\n },\n getFirst: function getFirst() {\n return this.getChildByIndex(0);\n },\n getLast: function getLast() {\n var lastIndex = this.get('children').length - 1;\n return this.getChildByIndex(lastIndex);\n },\n _addDependency: function _addDependency(item) {\n var dependencies = item.get('dependencies');\n item.attr(dependencies);\n item.__cfg.dependencies = {};\n },\n _setEvn: function _setEvn(item) {\n var self = this;\n item.__cfg.parent = self;\n item.__cfg.parent = self;\n item.__cfg.canvas = self.__cfg.canvas;\n item.__cfg.defs = self.__cfg.defs;\n var clip = item.__attrs.clip;\n if (clip) {\n clip.setSilent('parent', self);\n clip.setSilent('context', self.get('context'));\n }\n var children = item.__cfg.children;\n if (children) {\n Util.each(children, function (child) {\n item._setEvn(child);\n });\n }\n },\n getCount: function getCount() {\n return this.get('children').length;\n },\n sort: function sort() {\n var children = this.get('children');\n // 稳定排序\n Util.each(children, function (child, index) {\n child[INDEX] = index;\n return child;\n });\n\n children.sort(getComparer(function (obj1, obj2) {\n return obj1.get('zIndex') - obj2.get('zIndex');\n }));\n\n return this;\n },\n findById: function findById(id) {\n return this.find(function (item) {\n return item.get('id') === id;\n });\n },\n\n /**\n * 根据查找函数查找分组或者图形\n * @param {Function} fn 匹配函数\n * @return {Canvas.Base} 分组或者图形\n */\n find: function find(fn) {\n if (Util.isString(fn)) {\n return this.findById(fn);\n }\n var children = this.get('children');\n var rst = null;\n\n Util.each(children, function (item) {\n if (fn(item)) {\n rst = item;\n } else if (item.find) {\n rst = item.find(fn);\n }\n if (rst) {\n return false;\n }\n });\n return rst;\n },\n\n /**\n * @param {Function} fn filter mathod\n * @return {Array} all the matching shapes and groups\n */\n findAll: function findAll(fn) {\n var children = this.get('children');\n var rst = [];\n var childRst = [];\n Util.each(children, function (item) {\n if (fn(item)) {\n rst.push(item);\n }\n if (item.findAllBy) {\n childRst = item.findAllBy(fn);\n rst = rst.concat(childRst);\n }\n });\n return rst;\n },\n\n /**\n * @Deprecated\n * @param {Function} fn filter method\n * @return {Object} found shape or group\n */\n findBy: function findBy(fn) {\n var children = this.get('children');\n var rst = null;\n\n Util.each(children, function (item) {\n if (fn(item)) {\n rst = item;\n } else if (item.findBy) {\n rst = item.findBy(fn);\n }\n if (rst) {\n return false;\n }\n });\n return rst;\n },\n\n /**\n * @Deprecated\n * @param {Function} fn filter mathod\n * @return {Array} all the matching shapes and groups\n */\n findAllBy: function findAllBy(fn) {\n var children = this.get('children');\n var rst = [];\n var childRst = [];\n Util.each(children, function (item) {\n if (fn(item)) {\n rst.push(item);\n }\n if (item.findAllBy) {\n childRst = item.findAllBy(fn);\n rst = rst.concat(childRst);\n }\n });\n return rst;\n },\n\n // svg不进行拾取,仅保留接口\n getShape: function getShape() {\n return null;\n },\n\n /**\n * 根据点击事件的element获取对应的图形对象\n * @param {Object} el 点击的dom元素\n * @return {Object} 对应图形对象\n */\n findShape: function findShape(el) {\n if (this.__cfg.visible && this.__cfg.capture && this.get('el') === el) {\n return this;\n }\n var children = this.__cfg.children;\n var shape = null;\n for (var i = children.length - 1; i >= 0; i--) {\n var child = children[i];\n if (child.isGroup) {\n shape = child.findShape(el);\n shape = child.findShape(el);\n } else if (child.get('visible') && child.get('el') === el) {\n shape = child;\n }\n if (shape) {\n break;\n }\n }\n return shape;\n },\n clearTotalMatrix: function clearTotalMatrix() {\n var m = this.get('totalMatrix');\n if (m) {\n this.setSilent('totalMatrix', null);\n var children = this.__cfg.children;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n child.clearTotalMatrix();\n }\n }\n },\n clear: function clear() {\n var children = this.get('children');\n\n while (children.length !== 0) {\n children[children.length - 1].remove();\n }\n return this;\n },\n destroy: function destroy() {\n if (this.get('destroyed')) {\n return;\n }\n this.clear();\n Group.superclass.destroy.call(this);\n }\n});\n\nmodule.exports = Group;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/core/group.js\n// module id = 31\n// module chunks = 0","var MatrixUtil = require('../matrix');\nvar PathUtil = require('../path');\nvar Util = require('../index');\nvar d3Ease = require('d3-ease');\nvar d3Timer = require('d3-timer');\n\nvar _require = require('d3-interpolate'),\n interpolate = _require.interpolate,\n interpolateArray = _require.interpolateArray; // 目前整体动画只需要数值和数组的差值计算\n\n\nvar ReservedProps = {\n delay: 'delay'\n};\nmodule.exports = {\n stopAnimate: function stopAnimate() {\n var self = this;\n var canvas = self.get('canvas');\n if (self.get('destroyed')) {\n return;\n }\n if (self.get('animating')) {\n var clip = self.attr('clip');\n // 如果 clip 在执行动画\n if (clip && clip.get('animating')) {\n clip.stopAnimate();\n }\n var timer = self.get('animateTimer');\n if (timer) {\n timer.stop();\n self.setSilent('animateTimer', null);\n }\n var animateCfg = self.get('animateCfg');\n if (animateCfg) {\n self.attr(animateCfg.toAttrs);\n if (animateCfg.toM) {\n self.setMatrix(animateCfg.toM);\n }\n if (animateCfg.callback) {\n animateCfg.callback();\n }\n self.setSilent('animateCfg', null);\n }\n self.setSilent('animating', false); // 动画停止\n canvas.draw();\n }\n },\n\n /**\n * 执行动画\n * @param {Object} toProps 动画最终状态\n * @param {Number} duration 动画执行时间\n * @param {String} easing 动画缓动效果\n * @param {Function} callback 动画执行后的回调\n * @param {Number} delay 动画延迟时间\n */\n animate: function animate(toProps, duration, easing, callback) {\n var delay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n var self = this;\n var canvas = self.get('canvas');\n var formatProps = getFormatProps(toProps);\n var toAttrs = formatProps.attrs;\n var toM = formatProps.M;\n var fromAttrs = getfromAttrs(toAttrs);\n var fromM = Util.clone(self.getMatrix());\n var repeat = toProps.repeat;\n var timer = self.get('animateTimer');\n timer && timer.stop();\n // 可能不设置 easing\n if (Util.isNumber(callback)) {\n delay = callback;\n callback = null;\n }\n if (Util.isFunction(easing)) {\n callback = easing;\n easing = 'easeLinear';\n } else {\n easing = easing ? easing : 'easeLinear';\n }\n\n self.setSilent('animating', true); // 处于动画状态\n self.setSilent('animateCfg', {\n toAttrs: toAttrs,\n toM: toM,\n callback: callback\n });\n\n // 执行动画\n timer = d3Timer.timer(function (elapsed) {\n if (repeat) {\n excuteRepeat(elapsed);\n } else {\n excuteOnce(elapsed);\n }\n }, delay);\n\n self.setSilent('animateTimer', timer);\n\n function excuteRepeat(elapsed) {\n var ratio = elapsed % duration / duration;\n ratio = d3Ease[easing](ratio);\n update(ratio);\n }\n\n function excuteOnce(elapsed) {\n var ratio = elapsed / duration;\n if (ratio < 1) {\n ratio = d3Ease[easing](ratio);\n update(ratio);\n } else {\n update(1); // 保证最后一帧的绘制\n callback && callback();\n self.setSilent('animating', false); // 动画停止\n self.setSilent('animateCfg', null);\n self.setSilent('animateTimer', null);\n timer.stop();\n }\n }\n\n function update(ratio) {\n var cProps = {}; // 此刻属性\n if (self.get('destroyed')) {\n return;\n }\n var interf = void 0; // 差值函数\n\n for (var k in toAttrs) {\n if (!Util.isEqual(fromAttrs[k], toAttrs[k])) {\n if (k === 'path') {\n var toPath = PathUtil.parsePathString(toAttrs[k]); // 终点状态\n var fromPath = PathUtil.parsePathString(fromAttrs[k]); // 起始状态\n cProps[k] = [];\n for (var i = 0; i < toPath.length; i++) {\n var toPathPoint = toPath[i];\n var fromPathPoint = fromPath[i];\n var cPathPoint = [];\n for (var j = 0; j < toPathPoint.length; j++) {\n if (Util.isNumber(toPathPoint[j]) && fromPathPoint) {\n interf = interpolate(fromPathPoint[j], toPathPoint[j]);\n cPathPoint.push(interf(ratio));\n } else {\n cPathPoint.push(toPathPoint[j]);\n }\n }\n cProps[k].push(cPathPoint);\n }\n } else {\n interf = interpolate(fromAttrs[k], toAttrs[k]);\n cProps[k] = interf(ratio);\n }\n }\n }\n if (toM) {\n var mf = interpolateArray(fromM, toM);\n var cM = mf(ratio);\n self.setMatrix(cM);\n }\n self.attr(cProps);\n canvas.draw();\n }\n\n function getFormatProps(props) {\n var rst = {\n M: null,\n attrs: {}\n };\n for (var k in props) {\n if (k === 'transform') {\n rst.M = MatrixUtil.transform(self.getMatrix(), props[k]);\n } else if (k === 'matrix') {\n rst.M = props[k];\n } else if (!ReservedProps[k]) {\n rst.attrs[k] = props[k];\n }\n }\n return rst;\n }\n\n function getfromAttrs(toAttrs) {\n var rst = {};\n for (var k in toAttrs) {\n rst[k] = self.attr(k);\n }\n return rst;\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/util/mixin/animate.js\n// module id = 32\n// module chunks = 0","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-color/src/math.js\n// module id = 33\n// module chunks = 0","import { rgb as colorRgb } from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, { gamma } from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function (colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i,\n color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function (t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/rgb.js\n// module id = 34\n// module chunks = 0","import { basis } from \"./basis\";\n\nexport default function (values) {\n var n = values.length;\n return function (t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/basisClosed.js\n// module id = 35\n// module chunks = 0","export default function (x) {\n return function () {\n return x;\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/constant.js\n// module id = 36\n// module chunks = 0","import value from \"./value\";\n\nexport default function (a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) {\n x[i] = value(a[i], b[i]);\n }for (; i < nb; ++i) {\n c[i] = b[i];\n }return function (t) {\n for (i = 0; i < na; ++i) {\n c[i] = x[i](t);\n }return c;\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/array.js\n// module id = 37\n// module chunks = 0","export default function (a, b) {\n var d = new Date();\n return a = +a, b -= a, function (t) {\n return d.setTime(a + b * t), d;\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/date.js\n// module id = 38\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport value from \"./value\";\n\nexport default function (a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) !== \"object\") a = {};\n if (b === null || (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function (t) {\n for (k in i) {\n c[k] = i[k](t);\n }return c;\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/object.js\n// module id = 39\n// module chunks = 0","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function () {\n return b;\n };\n}\n\nfunction one(b) {\n return function (t) {\n return b(t) + \"\";\n };\n}\n\nexport default function (a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0,\n // scan index for next number in b\n am,\n // current match in a\n bm,\n // current match in b\n bs,\n // string preceding current number in b, if any\n i = -1,\n // index in s\n s = [],\n // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a)) && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) {\n // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else {\n // interpolate non-matching numbers\n s[++i] = null;\n q.push({ i: i, x: number(am, bm) });\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? q[0] ? one(q[0].x) : zero(b) : (b = q.length, function (t) {\n for (var i = 0, o; i < b; ++i) {\n s[(o = q[i]).i] = o.x(t);\n }return s.join(\"\");\n });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/string.js\n// module id = 40\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * EventEmitter v5.1.0 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function (exports) {\n 'use strict';\n\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class EventEmitter Manages event registering and emitting.\n */\n\n function EventEmitter() {}\n\n // Shortcuts to improve speed and size\n var proto = EventEmitter.prototype;\n var originalGlobalValue = exports.EventEmitter;\n\n /**\n * Finds the index of the listener for the event in its storage array.\n *\n * @param {Function[]} listeners Array of listeners to search through.\n * @param {Function} listener Method to look for.\n * @return {Number} Index of the specified listener, -1 if not found\n * @api private\n */\n function indexOfListener(listeners, listener) {\n var i = listeners.length;\n while (i--) {\n if (listeners[i].listener === listener) {\n return i;\n }\n }\n\n return -1;\n }\n\n /**\n * Alias a method while keeping the context correct, to allow for overwriting of target method.\n *\n * @param {String} name The name of the target method.\n * @return {Function} The aliased method\n * @api private\n */\n function alias(name) {\n return function aliasClosure() {\n return this[name].apply(this, arguments);\n };\n }\n\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n * Each property in the object response is an array of listener functions.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Function[]|Object} All listener functions for the event.\n */\n proto.getListeners = function getListeners(evt) {\n var events = this._getEvents();\n var response;\n var key;\n\n // Return a concatenated array of all matching events if\n // the selector is a regular expression.\n if (evt instanceof RegExp) {\n response = {};\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n response[key] = events[key];\n }\n }\n } else {\n response = events[evt] || (events[evt] = []);\n }\n\n return response;\n };\n\n /**\n * Takes a list of listener objects and flattens it into a list of listener functions.\n *\n * @param {Object[]} listeners Raw listener objects.\n * @return {Function[]} Just the listener functions.\n */\n proto.flattenListeners = function flattenListeners(listeners) {\n var flatListeners = [];\n var i;\n\n for (i = 0; i < listeners.length; i += 1) {\n flatListeners.push(listeners[i].listener);\n }\n\n return flatListeners;\n };\n\n /**\n * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Object} All listener functions for an event in an object.\n */\n proto.getListenersAsObject = function getListenersAsObject(evt) {\n var listeners = this.getListeners(evt);\n var response;\n\n if (listeners instanceof Array) {\n response = {};\n response[evt] = listeners;\n }\n\n return response || listeners;\n };\n\n function isValidListener(listener) {\n if (typeof listener === 'function' || listener instanceof RegExp) {\n return true;\n } else if (listener && (typeof listener === 'undefined' ? 'undefined' : _typeof(listener)) === 'object') {\n return isValidListener(listener.listener);\n } else {\n return false;\n }\n }\n\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListener = function addListener(evt, listener) {\n if (!isValidListener(listener)) {\n throw new TypeError('listener must be a function');\n }\n\n var listeners = this.getListenersAsObject(evt);\n var listenerIsWrapped = (typeof listener === 'undefined' ? 'undefined' : _typeof(listener)) === 'object';\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n listeners[key].push(listenerIsWrapped ? listener : {\n listener: listener,\n once: false\n });\n }\n }\n\n return this;\n };\n\n /**\n * Alias of addListener\n */\n proto.on = alias('addListener');\n\n /**\n * Semi-alias of addListener. It will add a listener that will be\n * automatically removed after its first execution.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addOnceListener = function addOnceListener(evt, listener) {\n return this.addListener(evt, {\n listener: listener,\n once: true\n });\n };\n\n /**\n * Alias of addOnceListener.\n */\n proto.once = alias('addOnceListener');\n\n /**\n * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n * You need to tell it what event names should be matched by a regex.\n *\n * @param {String} evt Name of the event to create.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvent = function defineEvent(evt) {\n this.getListeners(evt);\n return this;\n };\n\n /**\n * Uses defineEvent to define multiple events.\n *\n * @param {String[]} evts An array of event names to define.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvents = function defineEvents(evts) {\n for (var i = 0; i < evts.length; i += 1) {\n this.defineEvent(evts[i]);\n }\n return this;\n };\n\n /**\n * Removes a listener function from the specified event.\n * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListener = function removeListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var index;\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key)) {\n index = indexOfListener(listeners[key], listener);\n\n if (index !== -1) {\n listeners[key].splice(index, 1);\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of removeListener\n */\n proto.off = alias('removeListener');\n\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n * You can also pass it a regular expression to add the array of listeners to all events that match it.\n * Yeah, this function does quite a bit. That's probably a bad thing.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListeners = function addListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n * You can also pass it a regular expression to remove the listeners from all events that match it.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListeners = function removeListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n var i;\n var value;\n var single = remove ? this.removeListener : this.addListener;\n var multiple = remove ? this.removeListeners : this.addListeners;\n\n // If evt is an object then pass each of its properties to this method\n if ((typeof evt === 'undefined' ? 'undefined' : _typeof(evt)) === 'object' && !(evt instanceof RegExp)) {\n for (i in evt) {\n if (evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if (typeof value === 'function') {\n single.call(this, i, value);\n } else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n } else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n while (i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n return this;\n };\n\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n * You can also pass a regex to remove all events that match it.\n *\n * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeEvent = function removeEvent(evt) {\n var type = typeof evt === 'undefined' ? 'undefined' : _typeof(evt);\n var events = this._getEvents();\n var key;\n\n // Remove different things depending on the state of evt\n if (type === 'string') {\n // Remove all listeners for the specified event\n delete events[evt];\n } else if (evt instanceof RegExp) {\n // Remove all events matching the regex.\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n delete events[key];\n }\n }\n } else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n return this;\n };\n\n /**\n * Alias of removeEvent.\n *\n * Added to mirror the node API.\n */\n proto.removeAllListeners = alias('removeEvent');\n\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n * You can also pass a regular expression to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emitEvent = function emitEvent(evt, args) {\n var listenersMap = this.getListenersAsObject(evt);\n var listeners;\n var listener;\n var i;\n var key;\n var response;\n\n for (key in listenersMap) {\n if (listenersMap.hasOwnProperty(key)) {\n listeners = listenersMap[key].slice(0);\n\n for (i = 0; i < listeners.length; i++) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n listener = listeners[i];\n\n if (listener.once === true) {\n this.removeListener(evt, listener.listener);\n }\n\n response = listener.listener.apply(this, args || []);\n\n if (response === this._getOnceReturnValue()) {\n this.removeListener(evt, listener.listener);\n }\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of emitEvent\n */\n proto.trigger = alias('emitEvent');\n\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emit = function emit(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n\n /**\n * Sets the current value to check against when executing listeners. If a\n * listeners return value matches the one set here then it will be removed\n * after execution. This value defaults to true.\n *\n * @param {*} value The new value to check for when executing listeners.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.setOnceReturnValue = function setOnceReturnValue(value) {\n this._onceReturnValue = value;\n return this;\n };\n\n /**\n * Fetches the current value to check against when executing listeners. If\n * the listeners return value matches this one then it should be removed\n * automatically. It will return true by default.\n *\n * @return {*|Boolean} The current value to check for or the default, true.\n * @api private\n */\n proto._getOnceReturnValue = function _getOnceReturnValue() {\n if (this.hasOwnProperty('_onceReturnValue')) {\n return this._onceReturnValue;\n } else {\n return true;\n }\n };\n\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n * @api private\n */\n proto._getEvents = function _getEvents() {\n return this._events || (this._events = {});\n };\n\n /**\n * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n *\n * @return {Function} Non conflicting EventEmitter class.\n */\n EventEmitter.noConflict = function noConflict() {\n exports.EventEmitter = originalGlobalValue;\n return EventEmitter;\n };\n\n // Expose the class either via AMD, CommonJS or the global object\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return EventEmitter;\n });\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && module.exports) {\n module.exports = EventEmitter;\n } else {\n exports.EventEmitter = EventEmitter;\n }\n})(this || {});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/wolfy87-eventemitter/EventEmitter.js\n// module id = 41\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Rect = function Rect(cfg) {\n Rect.superclass.constructor.call(this, cfg);\n};\n\nRect.ATTRS = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n radius: 0,\n lineWidth: 1,\n fill: 'none'\n};\n\nUtil.extend(Rect, Shape);\n\nUtil.augment(Rect, {\n canFill: true,\n canStroke: true,\n type: 'rect',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n fill: 'none'\n };\n },\n _afterSetRadius: function _afterSetRadius() {\n var el = this.get('el');\n el.setAttribute('rx', this.__attrs.radius);\n el.setAttribute('ry', this.__attrs.radius);\n },\n _afterSetAttrAll: function _afterSetAttrAll(objs) {\n if ('radius' in objs) {\n this._afterSetRadius();\n }\n }\n});\n\nmodule.exports = Rect;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/rect.js\n// module id = 42\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Circle = function Circle(cfg) {\n Circle.superclass.constructor.call(this, cfg);\n};\n\nCircle.ATTRS = {\n x: 0,\n y: 0,\n r: 0,\n lineWidth: 1\n};\n\nUtil.extend(Circle, Shape);\n\nUtil.augment(Circle, {\n canFill: true,\n canStroke: true,\n type: 'circle',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n fill: 'none'\n };\n }\n});\n\nmodule.exports = Circle;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/circle.js\n// module id = 43\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Ellipse = function Ellipse(cfg) {\n Ellipse.superclass.constructor.call(this, cfg);\n};\n\nEllipse.ATTRS = {\n x: 0,\n y: 0,\n rx: 1,\n ry: 1,\n lineWidth: 1\n};\n\nUtil.extend(Ellipse, Shape);\n\nUtil.augment(Ellipse, {\n canFill: true,\n canStroke: true,\n type: 'ellipse',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1\n };\n }\n});\n\nmodule.exports = Ellipse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/ellipse.js\n// module id = 44\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Path = function Path(cfg) {\n Path.superclass.constructor.call(this, cfg);\n};\n\nfunction at(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return onet * onet * (onet * p3 + 3 * t * p2) + t * t * (t * p0 + 3 * onet * p1);\n}\n\nPath.ATTRS = {\n path: null,\n lineWidth: 1,\n curve: null, // 曲线path\n tCache: null,\n startArrow: false,\n endArrow: false\n};\n\nUtil.extend(Path, Shape);\n\nUtil.augment(Path, {\n canFill: true,\n canStroke: true,\n type: 'path',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n fill: 'none',\n startArrow: false,\n endArrow: false\n };\n },\n _afterSetAttrStroke: function _afterSetAttrStroke(value) {\n var start = this.get('marker-start');\n var end = this.get('marker-end');\n if (start) {\n this.get('defs').findById(start).update(null, value);\n }\n if (end) {\n this.get('defs').findById(end).update(null, value);\n }\n },\n _afterSetAttrPath: function _afterSetAttrPath(value) {\n var el = this.get('el');\n var d = value;\n if (Util.isArray(d)) {\n d = d.map(function (path) {\n return path.join(' ');\n }).join('');\n }\n if (~d.indexOf('NaN')) {\n el.setAttribute('d', '');\n } else {\n el.setAttribute('d', d);\n }\n },\n _afterSetAttrAll: function _afterSetAttrAll(objs) {\n if (objs.path) {\n this._afterSetAttrPath(objs.path);\n }\n if (objs.stroke) {\n this._afterSetAttrStroke(objs.stroke);\n }\n },\n getPoint: function getPoint(t) {\n var tCache = this.tCache;\n var subt = void 0;\n var index = void 0;\n\n if (!tCache) {\n this._calculateCurve();\n this._setTcache();\n tCache = this.tCache;\n }\n\n var curve = this.curve;\n\n if (!tCache) {\n if (curve) {\n return {\n x: curve[0][1],\n y: curve[0][2]\n };\n }\n return null;\n }\n Util.each(tCache, function (v, i) {\n if (t >= v[0] && t <= v[1]) {\n subt = (t - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n var seg = curve[index];\n if (Util.isNil(seg) || Util.isNil(index)) {\n return null;\n }\n var l = seg.length;\n var nextSeg = curve[index + 1];\n\n return {\n x: at(seg[l - 2], nextSeg[1], nextSeg[3], nextSeg[5], 1 - subt),\n y: at(seg[l - 1], nextSeg[2], nextSeg[4], nextSeg[6], 1 - subt)\n };\n },\n createPath: function createPath() {}\n});\n\nmodule.exports = Path;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/path.js\n// module id = 45\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar CText = function CText(cfg) {\n CText.superclass.constructor.call(this, cfg);\n};\n\nvar BASELINE_MAP = {\n top: 'before-edge',\n middle: 'central',\n bottom: 'after-edge',\n alphabetic: 'baseline',\n hanging: 'hanging'\n};\n\nvar ANCHOR_MAP = {\n left: 'left',\n start: 'left',\n center: 'middle',\n right: 'end',\n end: 'end'\n};\n\nCText.ATTRS = {\n x: 0,\n y: 0,\n text: null,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom',\n lineHeight: null,\n textArr: null\n};\n\nUtil.extend(CText, Shape);\n\nUtil.augment(CText, {\n canFill: true,\n canStroke: true,\n type: 'text',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n lineCount: 1,\n fontSize: 12,\n fill: '#000',\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom'\n };\n },\n initTransform: function initTransform() {\n this.attr('matrix', [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n var fontSize = this.__attrs.fontSize;\n if (fontSize && +fontSize < 12) {\n // 小于 12 像素的文本进行 scale 处理\n this.transform([['t', -1 * this.__attrs.x, -1 * this.__attrs.y], ['s', +fontSize / 12, +fontSize / 12], ['t', this.__attrs.x, this.__attrs.y]]);\n }\n },\n _assembleFont: function _assembleFont() {\n var el = this.get('el');\n var attrs = this.__attrs;\n var fontSize = attrs.fontSize;\n var fontFamily = attrs.fontFamily;\n var fontWeight = attrs.fontWeight;\n var fontStyle = attrs.fontStyle; // self.attr('fontStyle');\n var fontVariant = attrs.fontVariant; // self.attr('fontVariant');\n // self.attr('font', [fontStyle, fontVariant, fontWeight, fontSize + 'px', fontFamily].join(' '));\n var font = [fontStyle, fontVariant, fontWeight, fontSize + 'px', fontFamily].join(' ');\n attrs.font = font;\n el.setAttribute('font', attrs.font);\n },\n _afterSetAttrFontSize: function _afterSetAttrFontSize() {\n /* this.attr({\n height: this._getTextHeight()\n }); */\n this._assembleFont();\n },\n _afterSetAttrFontFamily: function _afterSetAttrFontFamily() {\n this._assembleFont();\n },\n _afterSetAttrFontWeight: function _afterSetAttrFontWeight() {\n this._assembleFont();\n },\n _afterSetAttrFontStyle: function _afterSetAttrFontStyle() {\n this._assembleFont();\n },\n _afterSetAttrFontVariant: function _afterSetAttrFontVariant() {\n this._assembleFont();\n },\n _afterSetAttrTextAlign: function _afterSetAttrTextAlign() {\n // 由于本身不支持设置direction,所以left = start, right = end。之后看是否需要根据direction判断\n var attr = this.__attrs.textAlign;\n var el = this.get('el');\n el.setAttribute('text-anchor', ANCHOR_MAP[attr]);\n },\n _afterSetAttrTextBaseLine: function _afterSetAttrTextBaseLine() {\n var attr = this.__attrs.textBaseline;\n this.get('el').setAttribute('alignment-baseline', BASELINE_MAP[attr] || 'baseline');\n },\n _afterSetAttrText: function _afterSetAttrText(text) {\n var attrs = this.__attrs;\n var textArr = void 0;\n if (Util.isString(text) && text.indexOf('\\n') !== -1) {\n textArr = text.split('\\n');\n var lineCount = textArr.length;\n attrs.lineCount = lineCount;\n attrs.textArr = textArr;\n }\n var el = this.get('el');\n if (~['undefined', 'null', 'NaN'].indexOf(String(text)) && el) {\n el.innerHTML = '';\n } else if (~text.indexOf('\\n')) {\n textArr = text.split('\\n');\n attrs.lineCount = textArr.length;\n attrs.textArr = textArr;\n var arr = '';\n Util.each(textArr, function (segment, i) {\n arr += '<tspan x=\"0\" y=\"' + (i + 1) + 'em\">' + segment + '</tspan>';\n });\n el.innerHTML = arr;\n } else {\n el.innerHTML = text;\n }\n },\n _afterSetAttrOutline: function _afterSetAttrOutline(val) {\n var el = this.get('el');\n if (!val) {\n el.setAttribute('paint-order', 'normal');\n }\n var stroke = val.stroke || '#000';\n var fill = val.fill || this.__attrs.stroke;\n var lineWidth = val.lineWidth || this.__attrs.lineWidth * 2;\n el.setAttribute('paint-order', 'stroke');\n el.setAttribute('style', 'stroke-linecap:butt; stroke-linejoin:miter;');\n el.setAttribute('stroke', stroke);\n el.setAttribute('fill', fill);\n el.setAttribute('stroke-width', lineWidth);\n },\n\n // 计算浪费,效率低,待优化\n _afterSetAttrAll: function _afterSetAttrAll(objs) {\n var self = this;\n if ('fontSize' in objs || 'fontWeight' in objs || 'fontStyle' in objs || 'fontVariant' in objs || 'fontFamily' in objs) {\n self._assembleFont();\n }\n if ('textAlign' in objs) {\n this._afterSetAttrTextAlign();\n }\n if ('textBaseline' in objs) {\n this._afterSetAttrTextBaseLine();\n }\n if ('text' in objs) {\n self._afterSetAttrText(objs.text);\n }\n if ('outline' in objs) {\n self._afterSetAttrOutline(objs.outline);\n }\n }\n});\n\nmodule.exports = CText;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/text.js\n// module id = 46\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Line = function Line(cfg) {\n Line.superclass.constructor.call(this, cfg);\n};\n\nLine.ATTRS = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n};\n\nUtil.extend(Line, Shape);\n\nUtil.augment(Line, {\n canStroke: true,\n type: 'line',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n stroke: '#000',\n startArrow: false,\n endArrow: false\n };\n },\n _afterSetAttrStroke: function _afterSetAttrStroke(value) {\n var start = this.get('marker-start');\n var end = this.get('marker-end');\n if (start) {\n this.get('defs').findById(start).update(value);\n }\n if (end) {\n this.get('defs').findById(end).update(value);\n }\n },\n _afterSetAttrAll: function _afterSetAttrAll(objs) {\n if (objs.stroke) {\n this._afterSetAttrStroke(objs.stroke);\n }\n },\n createPath: function createPath() {},\n getPoint: function getPoint(t) {\n var attrs = this.__attrs;\n return {\n x: (attrs.x2 - attrs.x1) * t + attrs.x1,\n y: (attrs.y2 - attrs.y1) * t + attrs.y1\n };\n }\n});\n\nmodule.exports = Line;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/line.js\n// module id = 47\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar CImage = function CImage(cfg) {\n CImage.superclass.constructor.call(this, cfg);\n};\n\nCImage.ATTRS = {\n x: 0,\n y: 0,\n img: undefined,\n width: 0,\n height: 0,\n sx: null,\n sy: null,\n swidth: null,\n sheight: null\n};\n\nUtil.extend(CImage, Shape);\n\nUtil.augment(CImage, {\n type: 'image',\n _afterSetAttrImg: function _afterSetAttrImg(img) {\n this._setAttrImg(img);\n },\n _afterSetAttrAll: function _afterSetAttrAll(params) {\n if (params.img) {\n this._setAttrImg(params.img);\n }\n },\n _setAttrImg: function _setAttrImg(image) {\n var self = this;\n var el = this.get('el');\n var attrs = self.__attrs;\n var img = image;\n\n if (Util.isString(img)) {\n // 如果传入的\n el.setAttribute('href', img);\n } else if (img instanceof Image) {\n if (!attrs.width) {\n self.attr('width', img.width);\n }\n if (!attrs.height) {\n self.attr('height', img.height);\n }\n el.setAttribute('href', img.src);\n } else if (img instanceof HTMLElement && Util.isString(img.nodeName) && img.nodeName.toUpperCase() === 'CANVAS') {\n el.setAttribute('href', img.toDataURL());\n } else if (img instanceof ImageData) {\n var canvas = document.createElement('canvas');\n canvas.setAttribute('width', img.width);\n canvas.setAttribute('height', img.height);\n canvas.getContext('2d').putImageData(img, 0, 0);\n if (!attrs.width) {\n self.attr('width', img.width);\n }\n\n if (!attrs.height) {\n self.attr('height', img.height);\n }\n el.setAttribute('href', canvas.toDataURL());\n }\n },\n drawInner: function drawInner() {}\n});\n\nmodule.exports = CImage;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/image.js\n// module id = 48\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Polygon = function Polygon(cfg) {\n Polygon.superclass.constructor.call(this, cfg);\n};\n\nPolygon.ATTRS = {\n points: null,\n lineWidth: 1\n};\n\nUtil.extend(Polygon, Shape);\n\nUtil.augment(Polygon, {\n canFill: true,\n canStroke: true,\n type: 'polygon',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n fill: 'none'\n };\n },\n _afterSetAttrPoints: function _afterSetAttrPoints() {\n var value = this.__attrs.points;\n var el = this.get('el');\n var points = value;\n if (!value || value.length === 0) {\n points = '';\n } else if (Util.isArray(value)) {\n points = points.map(function (point) {\n return point[0] + ',' + point[1];\n });\n points = points.join(' ');\n }\n el.setAttribute('points', points);\n },\n _afterSetAttrAll: function _afterSetAttrAll(obj) {\n if ('points' in obj) {\n this._afterSetAttrPoints();\n }\n },\n createPath: function createPath() {}\n});\n\nmodule.exports = Polygon;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/polygon.js\n// module id = 49\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Marker = function Marker(cfg) {\n Marker.superclass.constructor.call(this, cfg);\n};\n\nMarker.Symbols = {\n // 圆\n circle: function circle(x, y, r) {\n return 'M' + x + ',' + y + '\\n m' + -r + ',0\\n a ' + r + ',' + r + ',0,1,0,' + r * 2 + ',0\\n a ' + r + ',' + r + ',0,1,0,' + -r * 2 + ',0';\n },\n\n // 正方形\n square: function square(x, y, r) {\n return 'M' + (x - r) + ',' + (y - r) + '\\n H' + (x + r) + 'V' + (y + r) + '\\n H' + (x - r) + 'Z';\n },\n\n // 菱形\n diamond: function diamond(x, y, r) {\n return 'M' + (x - r) + ',' + y + '\\n L' + x + ',' + (y - r) + '\\n L' + (x + r) + ',' + y + ',\\n L' + x + ',' + (y + r) + 'Z';\n },\n\n // 三角形\n triangle: function triangle(x, y, r) {\n var diff = r * Math.sin(1 / 3 * Math.PI);\n return 'M' + (x - r) + ',' + (y + diff) + '\\n L' + x + ',' + (y - diff) + '\\n L' + (x + r) + ',' + (y + diff) + 'Z';\n },\n\n // 倒三角形\n 'triangle-down': function triangleDown(x, y, r) {\n var diff = r * Math.sin(1 / 3 * Math.PI);\n return 'M' + (x - r) + ',' + (y - diff) + '\\n L' + (x + r) + ',' + (y - diff) + '\\n L' + x + ',' + (y + diff) + 'Z';\n }\n};\n\nMarker.ATTRS = {\n path: null,\n lineWidth: 1\n};\n\nUtil.extend(Marker, Shape);\n\nUtil.augment(Marker, {\n type: 'marker',\n canFill: true,\n canStroke: true,\n init: function init(id) {\n Marker.superclass.init.call(this);\n var marker = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n id = id || Util.uniqueId(this.type + '_');\n marker.setAttribute('id', id);\n this.setSilent('el', marker);\n },\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n x: 0,\n y: 0,\n lineWidth: 1,\n fill: 'none'\n };\n },\n _afterSetX: function _afterSetX() {\n this._assembleShape();\n },\n _afterSetY: function _afterSetY() {\n this._assembleShape();\n },\n _afterSetRadius: function _afterSetRadius() {\n this._assembleShape();\n },\n _afterSetR: function _afterSetR() {\n this._assembleShape();\n },\n _afterSetAttrAll: function _afterSetAttrAll(objs) {\n if ('x' in objs || 'y' in objs || 'radius' in objs) {\n this._assembleShape();\n }\n },\n _assembleShape: function _assembleShape() {\n var attrs = this.__attrs;\n var r = attrs.r;\n if (typeof attrs.r === 'undefined') {\n r = attrs.radius;\n }\n if (isNaN(Number(attrs.x)) || isNaN(Number(attrs.y)) || isNaN(Number(r))) {\n return;\n }\n var d = '';\n if (typeof attrs.symbol === 'function') {\n d = attrs.symbol(attrs.x, attrs.y, r);\n } else {\n d = Marker.Symbols[attrs.symbol || 'circle'](attrs.x, attrs.y, r);\n }\n if (Util.isArray(d)) {\n d = d.map(function (path) {\n return path.join(' ');\n }).join('');\n }\n this.get('el').setAttribute('d', d);\n }\n});\n\nmodule.exports = Marker;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/marker.js\n// module id = 50\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Dom = function Dom(cfg) {\n Dom.superclass.constructor.call(this, cfg);\n};\n\nUtil.extend(Dom, Shape);\n\nUtil.augment(Dom, {\n canFill: true,\n canStroke: true,\n type: 'dom',\n _afterSetAttrHtml: function _afterSetAttrHtml() {\n var html = this.__attrs.html;\n var el = this.get('el');\n if (typeof html === 'string') {\n el.innerHTML = html;\n } else {\n el.innerHTML = '';\n el.appendChild(html);\n }\n },\n _afterSetAttrAll: function _afterSetAttrAll(objs) {\n if ('html' in objs) {\n this._afterSetAttrHtml();\n }\n }\n});\n\nmodule.exports = Dom;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/dom.js\n// module id = 51\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\n\nvar Fan = function Fan(cfg) {\n Fan.superclass.constructor.call(this, cfg);\n};\n\nfunction getPoint(angle, radius, center) {\n return {\n x: radius * Math.cos(angle) + center.x,\n y: radius * Math.sin(angle) + center.y\n };\n}\n\nFan.ATTRS = {\n x: 0,\n y: 0,\n rs: 0,\n re: 0,\n startAngle: 0,\n endAngle: 0,\n clockwise: false,\n lineWidth: 1\n};\n\nUtil.extend(Fan, Shape);\n\nUtil.augment(Fan, {\n canFill: true,\n canStroke: true,\n type: 'fan',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n clockwise: false,\n lineWidth: 1,\n rs: 0,\n re: 0,\n fill: 'none'\n };\n },\n _afterSetAttrX: function _afterSetAttrX() {\n this._calculatePath();\n },\n _afterSetAttrY: function _afterSetAttrY() {\n this._calculatePath();\n },\n _afterSetAttrRs: function _afterSetAttrRs() {\n this._calculatePath();\n },\n _afterSetAttrRe: function _afterSetAttrRe() {\n this._calculatePath();\n },\n _afterSetAttrStartAngle: function _afterSetAttrStartAngle() {\n this._calculatePath();\n },\n _afterSetAttrEndAngle: function _afterSetAttrEndAngle() {\n this._calculatePath();\n },\n _afterSetAttrClockwise: function _afterSetAttrClockwise() {\n this._calculatePath();\n },\n _afterSetAttrAll: function _afterSetAttrAll(obj) {\n if ('x' in obj || 'y' in obj || 'rs' in obj || 're' in obj || 'startAngle' in obj || 'endAngle' in obj || 'clockwise' in obj) {\n this._calculatePath();\n }\n },\n _calculatePath: function _calculatePath() {\n var self = this;\n var attrs = self.__attrs;\n var center = {\n x: attrs.x,\n y: attrs.y\n };\n var d = [];\n var startAngle = attrs.startAngle;\n var endAngle = attrs.endAngle;\n if (Util.isNumberEqual(endAngle - startAngle, Math.PI * 2)) {\n endAngle -= 0.00001;\n }\n var outerStart = getPoint(startAngle, attrs.re, center);\n var outerEnd = getPoint(endAngle, attrs.re, center);\n var fa = endAngle > startAngle ? 1 : 0;\n var fs = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0;\n var rs = attrs.rs;\n var re = attrs.re;\n var innerStart = getPoint(startAngle, attrs.rs, center);\n var innerEnd = getPoint(endAngle, attrs.rs, center);\n if (attrs.rs > 0) {\n d.push('M ' + outerEnd.x + ',' + outerEnd.y);\n d.push('L ' + innerEnd.x + ',' + innerEnd.y);\n /* if (endAngle - startAngle >= Math.PI) {\n const endPoint = getSymmetricalPoint(innerStart, center);\n d.push(`A ${rs},${rs},0,0,${fa},${endPoint.x},${endPoint.y}`);\n d.push(`M ${endPoint.x},${endPoint.y}`);\n }*/\n d.push('A ' + rs + ',' + rs + ',0,' + fs + ',' + (fa === 1 ? 0 : 1) + ',' + innerStart.x + ',' + innerStart.y);\n d.push('L ' + outerStart.x + ' ' + outerStart.y);\n } else {\n d.push('M ' + center.x + ',' + center.y);\n d.push('L ' + outerStart.x + ',' + outerStart.y);\n }\n /* if (endAngle - startAngle >= Math.PI) {\n const endPoint = getSymmetricalPoint(outerStart, center);\n d.push(`A ${re},${re},0,0,${fa},${endPoint.x},${endPoint.y}`);\n }*/\n d.push('A ' + re + ',' + re + ',0,' + fs + ',' + fa + ',' + outerEnd.x + ',' + outerEnd.y);\n if (attrs.rs > 0) {\n d.push('L ' + innerEnd.x + ',' + innerEnd.y);\n } else {\n d.push('Z');\n }\n self.get('el').setAttribute('d', d.join(' '));\n }\n});\n\nmodule.exports = Fan;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/fan.js\n// module id = 52\n// module chunks = 0","var Util = require('../util/index');\n\nvar Event = function Event(type, event, bubbles, cancelable) {\n this.type = type; // 事件类型\n this.target = null; // 目标\n this.currentTarget = null; // 当前目标\n this.bubbles = bubbles; // 冒泡\n this.cancelable = cancelable; // 是否能够阻止\n this.timeStamp = new Date().getTime(); // 时间戳\n this.defaultPrevented = false; // 阻止默认\n this.propagationStopped = false; // 阻止冒泡\n this.removed = false; // 是否被移除\n this.event = event; // 触发的原生事件\n};\n\nUtil.augment(Event, {\n preventDefault: function preventDefault() {\n this.defaultPrevented = this.cancelable && true;\n },\n stopPropagation: function stopPropagation() {\n this.propagationStopped = true;\n },\n remove: function remove() {\n this.remove = true;\n },\n clone: function clone() {\n return Util.clone(this);\n },\n toString: function toString() {\n return '[Event (type=' + this.type + ')]';\n }\n});\n\nmodule.exports = Event;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/event.js\n// module id = 53\n// module chunks = 0","var Util = require('../../util/index');\nvar Element = require('./element');\nvar Shape = require('../shape/index');\nvar SHAPE_MAP = {}; // 缓存图形类型\nvar INDEX = '_INDEX';\n\nfunction find(children, x, y) {\n var rst = void 0;\n for (var i = children.length - 1; i >= 0; i--) {\n var child = children[i];\n if (child.__cfg.visible && child.__cfg.capture) {\n if (child.isGroup) {\n rst = child.getShape(x, y);\n } else if (child.isHit(x, y)) {\n rst = child;\n }\n }\n if (rst) {\n break;\n }\n }\n return rst;\n}\n\nfunction getComparer(compare) {\n return function (left, right) {\n var result = compare(left, right);\n return result === 0 ? left[INDEX] - right[INDEX] : result;\n };\n}\n\nvar Group = function Group(cfg) {\n Group.superclass.constructor.call(this, cfg);\n this.set('children', []);\n\n this._beforeRenderUI();\n this._renderUI();\n this._bindUI();\n};\n\nfunction initClassCfgs(c) {\n if (c.__cfg || c === Group) {\n return;\n }\n var superCon = c.superclass.constructor;\n if (superCon && !superCon.__cfg) {\n initClassCfgs(superCon);\n }\n c.__cfg = {};\n\n Util.merge(c.__cfg, superCon.__cfg);\n Util.merge(c.__cfg, c.CFG);\n}\n\nUtil.extend(Group, Element);\n\nUtil.augment(Group, {\n isGroup: true,\n canFill: true,\n canStroke: true,\n getDefaultCfg: function getDefaultCfg() {\n initClassCfgs(this.constructor);\n return Util.merge({}, this.constructor.__cfg);\n },\n _beforeRenderUI: function _beforeRenderUI() {},\n _renderUI: function _renderUI() {},\n _bindUI: function _bindUI() {},\n addShape: function addShape(type, cfg) {\n var canvas = this.get('canvas');\n cfg = cfg || {};\n var shapeType = SHAPE_MAP[type];\n if (!shapeType) {\n shapeType = Util.upperFirst(type);\n SHAPE_MAP[type] = shapeType;\n }\n if (cfg.attrs) {\n var attrs = cfg.attrs;\n if (type === 'text') {\n // 临时解决\n var topFontFamily = canvas.get('fontFamily');\n if (topFontFamily) {\n attrs.fontFamily = attrs.fontFamily ? attrs.fontFamily : topFontFamily;\n }\n }\n }\n cfg.canvas = canvas;\n cfg.type = type;\n var rst = new Shape[shapeType](cfg);\n this.add(rst);\n return rst;\n },\n\n /** 添加图组\n * @param {Function|Object|undefined} param 图组类\n * @param {Object} cfg 配置项\n * @return {Object} rst 图组\n */\n addGroup: function addGroup(param, cfg) {\n var canvas = this.get('canvas');\n var rst = void 0;\n cfg = Util.merge({}, cfg);\n if (Util.isFunction(param)) {\n if (cfg) {\n cfg.canvas = canvas;\n cfg.parent = this;\n rst = new param(cfg);\n } else {\n rst = new param({\n canvas: canvas,\n parent: this\n });\n }\n this.add(rst);\n } else if (Util.isObject(param)) {\n param.canvas = canvas;\n rst = new Group(param);\n this.add(rst);\n } else if (param === undefined) {\n rst = new Group();\n this.add(rst);\n } else {\n return false;\n }\n return rst;\n },\n\n /** 绘制背景\n * @param {Array} padding 内边距\n * @param {Attrs} attrs 图形属性\n * @param {Shape} backShape 背景图形\n * @return {Object} 背景层对象\n */\n renderBack: function renderBack(padding, attrs) {\n var backShape = this.get('backShape');\n var innerBox = this.getBBox();\n // const parent = this.get('parent'); // getParent\n Util.merge(attrs, {\n x: innerBox.minX - padding[3],\n y: innerBox.minY - padding[0],\n width: innerBox.width + padding[1] + padding[3],\n height: innerBox.height + padding[0] + padding[2]\n });\n if (backShape) {\n backShape.attr(attrs);\n } else {\n backShape = this.addShape('rect', {\n zIndex: -1,\n attrs: attrs\n });\n }\n this.set('backShape', backShape);\n this.sort();\n return backShape;\n },\n removeChild: function removeChild(item, destroy) {\n if (arguments.length >= 2) {\n if (this.contain(item)) {\n item.remove(destroy);\n }\n } else {\n if (arguments.length === 1) {\n if (Util.isBoolean(item)) {\n destroy = item;\n } else {\n if (this.contain(item)) {\n item.remove(true);\n }\n return this;\n }\n }\n if (arguments.length === 0) {\n destroy = true;\n }\n\n Group.superclass.remove.call(this, destroy);\n }\n return this;\n },\n\n /**\n * 向组中添加shape或者group\n * @param {Object} items 图形或者分组\n * @return {Object} group 本尊\n */\n add: function add(items) {\n var self = this;\n var children = self.get('children');\n if (Util.isArray(items)) {\n Util.each(items, function (item) {\n var parent = item.get('parent');\n if (parent) {\n parent.removeChild(item, false);\n }\n self._setEvn(item);\n });\n children.push.apply(children, items);\n } else {\n var item = items;\n var parent = item.get('parent');\n if (parent) {\n parent.removeChild(item, false);\n }\n self._setEvn(item);\n children.push(item);\n }\n return self;\n },\n contain: function contain(item) {\n var children = this.get('children');\n return children.indexOf(item) > -1;\n },\n getChildByIndex: function getChildByIndex(index) {\n var children = this.get('children');\n return children[index];\n },\n getFirst: function getFirst() {\n return this.getChildByIndex(0);\n },\n getLast: function getLast() {\n var lastIndex = this.get('children').length - 1;\n return this.getChildByIndex(lastIndex);\n },\n _setEvn: function _setEvn(item) {\n var self = this;\n item.__cfg.parent = self;\n item.__cfg.context = self.__cfg.context;\n item.__cfg.canvas = self.__cfg.canvas;\n var clip = item.__attrs.clip;\n if (clip) {\n clip.setSilent('parent', self);\n clip.setSilent('context', self.get('context'));\n }\n var children = item.__cfg.children;\n if (children) {\n Util.each(children, function (child) {\n item._setEvn(child);\n });\n }\n },\n getBBox: function getBBox() {\n var self = this;\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n var children = self.get('children');\n if (children.length > 0) {\n Util.each(children, function (child) {\n if (child.get('visible')) {\n var _box = child.getBBox();\n if (!_box) {\n return true;\n }\n\n var leftTop = [_box.minX, _box.minY, 1];\n var leftBottom = [_box.minX, _box.maxY, 1];\n var rightTop = [_box.maxX, _box.minY, 1];\n var rightBottom = [_box.maxX, _box.maxY, 1];\n\n child.apply(leftTop);\n child.apply(leftBottom);\n child.apply(rightTop);\n child.apply(rightBottom);\n\n var boxMinX = Math.min(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0]);\n var boxMaxX = Math.max(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0]);\n var boxMinY = Math.min(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1]);\n var boxMaxY = Math.max(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1]);\n\n if (boxMinX < minX) {\n minX = boxMinX;\n }\n\n if (boxMaxX > maxX) {\n maxX = boxMaxX;\n }\n\n if (boxMinY < minY) {\n minY = boxMinY;\n }\n\n if (boxMaxY > maxY) {\n maxY = boxMaxY;\n }\n }\n });\n } else {\n minX = 0;\n maxX = 0;\n minY = 0;\n maxY = 0;\n }\n\n var box = {\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY\n };\n box.x = box.minX;\n box.y = box.minY;\n box.width = box.maxX - box.minX;\n box.height = box.maxY - box.minY;\n return box;\n },\n drawInner: function drawInner(context) {\n var children = this.get('children');\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n child.draw(context);\n }\n return this;\n },\n getCount: function getCount() {\n return this.get('children').length;\n },\n sort: function sort() {\n var children = this.get('children');\n // 稳定排序\n Util.each(children, function (child, index) {\n child[INDEX] = index;\n return child;\n });\n\n children.sort(getComparer(function (obj1, obj2) {\n return obj1.get('zIndex') - obj2.get('zIndex');\n }));\n\n return this;\n },\n findById: function findById(id) {\n return this.find(function (item) {\n return item.get('id') === id;\n });\n },\n\n /**\n * 根据查找函数查找分组或者图形\n * @param {Function} fn 匹配函数\n * @return {Canvas.Base} 分组或者图形\n */\n find: function find(fn) {\n if (Util.isString(fn)) {\n return this.findById(fn);\n }\n var children = this.get('children');\n var rst = null;\n\n Util.each(children, function (item) {\n if (fn(item)) {\n rst = item;\n } else if (item.find) {\n rst = item.find(fn);\n }\n if (rst) {\n return false;\n }\n });\n return rst;\n },\n\n /**\n * @param {Function} fn filter mathod\n * @return {Array} all the matching shapes and groups\n */\n findAll: function findAll(fn) {\n var children = this.get('children');\n var rst = [];\n var childRst = [];\n Util.each(children, function (item) {\n if (fn(item)) {\n rst.push(item);\n }\n if (item.findAllBy) {\n childRst = item.findAllBy(fn);\n rst = rst.concat(childRst);\n }\n });\n return rst;\n },\n\n /**\n * @Deprecated\n * @param {Function} fn filter method\n * @return {Object} found shape or group\n */\n findBy: function findBy(fn) {\n var children = this.get('children');\n var rst = null;\n\n Util.each(children, function (item) {\n if (fn(item)) {\n rst = item;\n } else if (item.findBy) {\n rst = item.findBy(fn);\n }\n if (rst) {\n return false;\n }\n });\n return rst;\n },\n\n /**\n * @Deprecated\n * @param {Function} fn filter mathod\n * @return {Array} all the matching shapes and groups\n */\n findAllBy: function findAllBy(fn) {\n var children = this.get('children');\n var rst = [];\n var childRst = [];\n Util.each(children, function (item) {\n if (fn(item)) {\n rst.push(item);\n }\n if (item.findAllBy) {\n childRst = item.findAllBy(fn);\n rst = rst.concat(childRst);\n }\n });\n return rst;\n },\n\n /**\n * 根据x,y轴坐标获取对应的图形\n * @param {Number} x x坐标\n * @param {Number} y y坐标\n * @return {Object} 最上面的图形\n */\n getShape: function getShape(x, y) {\n var self = this;\n var clip = self.__attrs.clip;\n var children = self.__cfg.children;\n var rst = void 0;\n if (clip) {\n if (clip.inside(x, y)) {\n rst = find(children, x, y);\n }\n } else {\n rst = find(children, x, y);\n }\n return rst;\n },\n clearTotalMatrix: function clearTotalMatrix() {\n var m = this.get('totalMatrix');\n if (m) {\n this.setSilent('totalMatrix', null);\n var children = this.__cfg.children;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n child.clearTotalMatrix();\n }\n }\n },\n clear: function clear() {\n var children = this.get('children');\n\n while (children.length !== 0) {\n children[children.length - 1].remove();\n }\n return this;\n },\n destroy: function destroy() {\n if (this.get('destroyed')) {\n return;\n }\n this.clear();\n Group.superclass.destroy.call(this);\n }\n});\n\nmodule.exports = Group;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/core/group.js\n// module id = 54\n// module chunks = 0","var Util = require('../../util/index');\nvar Attribute = require('./mixin/attribute');\nvar Transform = require('../../util/mixin/transform');\nvar Animate = require('../../util/mixin/animate');\nvar Format = require('../../util/format');\nvar EventEmitter = require('wolfy87-eventemitter');\n\nvar SHAPE_ATTRS = ['fillStyle', 'font', 'globalAlpha', 'lineCap', 'lineWidth', 'lineJoin', 'miterLimit', 'shadowBlur', 'shadowColor', 'shadowOffsetX', 'shadowOffsetY', 'strokeStyle', 'textAlign', 'textBaseline', 'lineDash', 'lineDashOffset'];\n\nvar Element = function Element(cfg) {\n this.__cfg = {\n zIndex: 0,\n capture: true,\n visible: true,\n destroyed: false\n }; // 配置存放地\n\n Util.assign(this.__cfg, this.getDefaultCfg(), cfg); // Element.CFG不合并,提升性能 合并默认配置,用户配置->继承默认配置->Element默认配置\n this.initAttrs(this.__cfg.attrs); // 初始化绘图属性\n this.initTransform(); // 初始化变换\n this.init(); // 类型初始化\n};\n\nElement.CFG = {\n /**\n * 唯一标示\n * @type {Number}\n */\n id: null,\n /**\n * Z轴的层叠关系,Z值越大离用户越近\n * @type {Number}\n */\n zIndex: 0,\n /**\n * Canvas对象\n * @type: {Object}\n */\n canvas: null,\n /**\n * 父元素指针\n * @type {Object}\n */\n parent: null,\n /**\n * 用来设置当前对象是否能被捕捉\n * true 能\n * false 不能\n * 对象默认是都可以被捕捉的, 当capture为false时,group.getShape(x, y)方法无法获得该元素\n * 通过将不必要捕捉的元素的该属性设置成false, 来提高捕捉性能\n * @type {Boolean}\n **/\n capture: true,\n /**\n * 画布的上下文\n * @type {Object}\n */\n context: null,\n /**\n * 是否显示\n * @type {Boolean}\n */\n visible: true,\n /**\n * 是否被销毁\n * @type: {Boolean}\n */\n destroyed: false\n};\n\nUtil.augment(Element, Attribute, Transform, EventEmitter, Animate, {\n init: function init() {\n this.setSilent('animable', true);\n this.setSilent('animating', false); // 初始时不处于动画状态\n var attrs = this.__attrs;\n if (attrs && attrs.rotate) {\n this.rotateAtStart(attrs.rotate);\n }\n },\n getParent: function getParent() {\n return this.get('parent');\n },\n\n /**\n * 获取默认的配置信息\n * @protected\n * @return {Object} 默认的属性\n */\n getDefaultCfg: function getDefaultCfg() {\n return {};\n },\n set: function set(name, value) {\n if (name === 'zIndex' && this._beforeSetZIndex) {\n this._beforeSetZIndex(value);\n }\n if (name === 'loading' && this._beforeSetLoading) {\n this._beforeSetLoading(value);\n }\n this.__cfg[name] = value;\n return this;\n },\n setSilent: function setSilent(name, value) {\n this.__cfg[name] = value;\n },\n get: function get(name) {\n return this.__cfg[name];\n },\n draw: function draw(context) {\n if (this.get('destroyed')) {\n return;\n }\n if (this.get('visible')) {\n this.setContext(context);\n this.drawInner(context);\n this.restoreContext(context);\n }\n },\n setContext: function setContext(context) {\n var clip = this.__attrs.clip;\n context.save();\n if (clip) {\n // context.save();\n clip.resetTransform(context);\n clip.createPath(context);\n context.clip();\n // context.restore();\n }\n this.resetContext(context);\n this.resetTransform(context);\n },\n restoreContext: function restoreContext(context) {\n context.restore();\n },\n resetContext: function resetContext(context) {\n var elAttrs = this.__attrs;\n // var canvas = this.get('canvas');\n if (!this.isGroup) {\n // canvas.registShape(this); // 快速拾取方案暂时不执行\n for (var k in elAttrs) {\n if (SHAPE_ATTRS.indexOf(k) > -1) {\n // 非canvas属性不附加\n var v = elAttrs[k];\n if (k === 'fillStyle') {\n v = Format.parseStyle(v, this);\n }\n if (k === 'strokeStyle') {\n v = Format.parseStyle(v, this);\n }\n if (k === 'lineDash' && context.setLineDash) {\n if (Util.isArray(v)) {\n context.setLineDash(v);\n } else if (Util.isString(v)) {\n context.setLineDash(v.split(' '));\n }\n } else {\n context[k] = v;\n }\n }\n }\n }\n },\n drawInner: function drawInner() /* context */{},\n show: function show() {\n this.set('visible', true);\n return this;\n },\n hide: function hide() {\n this.set('visible', false);\n return this;\n },\n remove: function remove(destroy) {\n if (destroy === undefined) {\n destroy = true;\n }\n\n if (this.get('parent')) {\n var parent = this.get('parent');\n var children = parent.get('children');\n Util.remove(children, this);\n }\n\n if (destroy) {\n this.destroy();\n }\n\n return this;\n },\n destroy: function destroy() {\n var destroyed = this.get('destroyed');\n if (destroyed) {\n return;\n }\n // 如果正在执行动画,清理动画\n if (this.get('animating')) {\n var timer = this.get('animateTimer');\n timer && timer.stop();\n }\n this.__cfg = {};\n this.__attrs = null;\n this.removeEvent(); // 移除所有的事件\n this.set('destroyed', true);\n },\n _beforeSetZIndex: function _beforeSetZIndex(zIndex) {\n this.__cfg.zIndex = zIndex;\n\n if (!Util.isNil(this.get('parent'))) {\n this.get('parent').sort();\n }\n return zIndex;\n },\n _setAttrs: function _setAttrs(attrs) {\n this.attr(attrs);\n return attrs;\n },\n setZIndex: function setZIndex(zIndex) {\n this.__cfg.zIndex = zIndex;\n return zIndex;\n },\n clone: function clone() {\n return Util.clone(this);\n },\n getBBox: function getBBox() {\n return {\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0\n };\n }\n});\n\nmodule.exports = Element;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/core/element.js\n// module id = 55\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\n\nvar Circle = function Circle(cfg) {\n Circle.superclass.constructor.call(this, cfg);\n};\n\nCircle.ATTRS = {\n x: 0,\n y: 0,\n r: 0,\n lineWidth: 1\n};\n\nUtil.extend(Circle, Shape);\n\nUtil.augment(Circle, {\n canFill: true,\n canStroke: true,\n type: 'circle',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1\n };\n },\n calculateBox: function calculateBox() {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n var lineWidth = this.getHitLineWidth();\n var halfWidth = lineWidth / 2 + r;\n return {\n minX: cx - halfWidth,\n minY: cy - halfWidth,\n maxX: cx + halfWidth,\n maxY: cy + halfWidth\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var fill = this.hasFill();\n var stroke = this.hasStroke();\n if (fill && stroke) {\n return this._isPointInFill(x, y) || this._isPointInStroke(x, y);\n }\n\n if (fill) {\n return this._isPointInFill(x, y);\n }\n\n if (stroke) {\n return this._isPointInStroke(x, y);\n }\n\n return false;\n },\n _isPointInFill: function _isPointInFill(x, y) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n\n return Inside.circle(cx, cy, r, x, y);\n },\n _isPointInStroke: function _isPointInStroke(x, y) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n var lineWidth = this.getHitLineWidth();\n\n return Inside.arcline(cx, cy, r, 0, Math.PI * 2, false, lineWidth, x, y);\n },\n createPath: function createPath(context) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n context = context || self.get('context');\n\n context.beginPath();\n context.arc(cx, cy, r, 0, Math.PI * 2, false);\n }\n});\n\nmodule.exports = Circle;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/circle.js\n// module id = 56\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\nvar mat3 = require('../../util/matrix').mat3;\nvar vec3 = require('../../util/matrix').vec3;\n\nvar Ellipse = function Ellipse(cfg) {\n Ellipse.superclass.constructor.call(this, cfg);\n};\n\nEllipse.ATTRS = {\n x: 0,\n y: 0,\n rx: 1,\n ry: 1,\n lineWidth: 1\n};\n\nUtil.extend(Ellipse, Shape);\n\nUtil.augment(Ellipse, {\n canFill: true,\n canStroke: true,\n type: 'ellipse',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1\n };\n },\n calculateBox: function calculateBox() {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx;\n var ry = attrs.ry;\n var lineWidth = this.getHitLineWidth();\n var halfXWidth = rx + lineWidth / 2;\n var halfYWidth = ry + lineWidth / 2;\n\n return {\n minX: cx - halfXWidth,\n minY: cy - halfYWidth,\n maxX: cx + halfXWidth,\n maxY: cy + halfYWidth\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var fill = this.hasFill();\n var stroke = this.hasStroke();\n\n if (fill && stroke) {\n return this._isPointInFill(x, y) || this._isPointInStroke(x, y);\n }\n\n if (fill) {\n return this._isPointInFill(x, y);\n }\n\n if (stroke) {\n return this._isPointInStroke(x, y);\n }\n\n return false;\n },\n _isPointInFill: function _isPointInFill(x, y) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx;\n var ry = attrs.ry;\n\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n\n var p = [x, y, 1];\n var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n mat3.scale(m, m, [scaleX, scaleY]);\n mat3.translate(m, m, [cx, cy]);\n var inm = mat3.invert([], m);\n vec3.transformMat3(p, p, inm);\n\n return Inside.circle(0, 0, r, p[0], p[1]);\n },\n _isPointInStroke: function _isPointInStroke(x, y) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx;\n var ry = attrs.ry;\n var lineWidth = this.getHitLineWidth();\n\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n var p = [x, y, 1];\n var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n mat3.scale(m, m, [scaleX, scaleY]);\n mat3.translate(m, m, [cx, cy]);\n var inm = mat3.invert([], m);\n vec3.transformMat3(p, p, inm);\n\n return Inside.arcline(0, 0, r, 0, Math.PI * 2, false, lineWidth, p[0], p[1]);\n },\n createPath: function createPath(context) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx;\n var ry = attrs.ry;\n\n context = context || self.get('context');\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n\n var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n mat3.scale(m, m, [scaleX, scaleY]);\n mat3.translate(m, m, [cx, cy]);\n context.beginPath();\n context.save();\n context.transform(m[0], m[1], m[3], m[4], m[6], m[7]);\n context.arc(0, 0, r, 0, Math.PI * 2);\n context.restore();\n context.closePath();\n }\n});\n\nmodule.exports = Ellipse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/ellipse.js\n// module id = 57\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar PathSegment = require('./util/path-segment');\nvar Format = require('../../util/format');\nvar Arrow = require('./util/arrow');\nvar PathUtil = require('../../util/path');\nvar CubicMath = require('./math/cubic');\n\nvar Path = function Path(cfg) {\n Path.superclass.constructor.call(this, cfg);\n};\n\nPath.ATTRS = {\n path: null,\n lineWidth: 1,\n curve: null, // 曲线path\n tCache: null,\n startArrow: false,\n endArrow: false\n};\n\nUtil.extend(Path, Shape);\n\nUtil.augment(Path, {\n canFill: true,\n canStroke: true,\n type: 'path',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n };\n },\n _afterSetAttrPath: function _afterSetAttrPath(path) {\n var self = this;\n if (Util.isNil(path)) {\n self.setSilent('segments', null);\n self.setSilent('box', undefined);\n return;\n }\n var pathArray = Format.parsePath(path);\n var preSegment = void 0;\n var segments = [];\n\n if (!Util.isArray(pathArray) || pathArray.length === 0 || pathArray[0][0] !== 'M' && pathArray[0][0] !== 'm') {\n return;\n }\n var count = pathArray.length;\n for (var i = 0; i < pathArray.length; i++) {\n var item = pathArray[i];\n preSegment = new PathSegment(item, preSegment, i === count - 1);\n segments.push(preSegment);\n }\n self.setSilent('segments', segments);\n self.set('tCache', null);\n this.setSilent('box', null);\n },\n _afterSetAttrAll: function _afterSetAttrAll(objs) {\n if (objs.path) {\n this._afterSetAttrPath(objs.path);\n }\n },\n calculateBox: function calculateBox() {\n var self = this;\n var segments = self.get('segments');\n\n if (!segments) {\n return null;\n }\n var lineWidth = this.getHitLineWidth();\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n Util.each(segments, function (segment) {\n segment.getBBox(lineWidth);\n var box = segment.box;\n if (box) {\n if (box.minX < minX) {\n minX = box.minX;\n }\n\n if (box.maxX > maxX) {\n maxX = box.maxX;\n }\n\n if (box.minY < minY) {\n minY = box.minY;\n }\n\n if (box.maxY > maxY) {\n maxY = box.maxY;\n }\n }\n });\n return {\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var self = this;\n var fill = self.hasFill();\n var stroke = self.hasStroke();\n\n if (fill && stroke) {\n return self._isPointInFill(x, y) || self._isPointInStroke(x, y);\n }\n\n if (fill) {\n return self._isPointInFill(x, y);\n }\n\n if (stroke) {\n return self._isPointInStroke(x, y);\n }\n\n return false;\n },\n _isPointInFill: function _isPointInFill(x, y) {\n var self = this;\n var context = self.get('context');\n if (!context) return undefined;\n self.createPath();\n return context.isPointInPath(x, y);\n },\n _isPointInStroke: function _isPointInStroke(x, y) {\n var self = this;\n var segments = self.get('segments');\n if (!Util.isEmpty(segments)) {\n var lineWidth = self.getHitLineWidth();\n for (var i = 0, l = segments.length; i < l; i++) {\n if (segments[i].isInside(x, y, lineWidth)) {\n return true;\n }\n }\n }\n\n return false;\n },\n _setTcache: function _setTcache() {\n var totalLength = 0;\n var tempLength = 0;\n var tCache = [];\n var segmentT = void 0;\n var segmentL = void 0;\n var segmentN = void 0;\n var l = void 0;\n var curve = this.curve;\n\n if (!curve) {\n return;\n }\n\n Util.each(curve, function (segment, i) {\n segmentN = curve[i + 1];\n l = segment.length;\n if (segmentN) {\n totalLength += CubicMath.len(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]);\n }\n });\n\n Util.each(curve, function (segment, i) {\n segmentN = curve[i + 1];\n l = segment.length;\n if (segmentN) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = CubicMath.len(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n\n this.tCache = tCache;\n },\n _calculateCurve: function _calculateCurve() {\n var self = this;\n var attrs = self.__attrs;\n var path = attrs.path;\n this.curve = PathUtil.pathTocurve(path);\n },\n getPoint: function getPoint(t) {\n var tCache = this.tCache;\n var subt = void 0;\n var index = void 0;\n\n if (!tCache) {\n this._calculateCurve();\n this._setTcache();\n tCache = this.tCache;\n }\n\n var curve = this.curve;\n\n if (!tCache) {\n if (curve) {\n return {\n x: curve[0][1],\n y: curve[0][2]\n };\n }\n return null;\n }\n Util.each(tCache, function (v, i) {\n if (t >= v[0] && t <= v[1]) {\n subt = (t - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n var seg = curve[index];\n if (Util.isNil(seg) || Util.isNil(index)) {\n return null;\n }\n var l = seg.length;\n var nextSeg = curve[index + 1];\n return {\n x: CubicMath.at(seg[l - 2], nextSeg[1], nextSeg[3], nextSeg[5], 1 - subt),\n y: CubicMath.at(seg[l - 1], nextSeg[2], nextSeg[4], nextSeg[6], 1 - subt)\n };\n },\n createPath: function createPath(context) {\n var self = this;\n var segments = self.get('segments');\n if (!Util.isArray(segments)) return;\n\n context = context || self.get('context');\n\n context.beginPath();\n var segmentsLen = segments.length;\n\n for (var i = 0; i < segmentsLen; i++) {\n segments[i].draw(context);\n }\n },\n afterPath: function afterPath(context) {\n var self = this;\n var attrs = self.__attrs;\n var segments = self.get('segments');\n var path = attrs.path;\n var startPoint = void 0,\n endPoint = void 0,\n tangent = void 0;\n context = context || self.get('context');\n if (!Util.isArray(segments)) return;\n if (!attrs.startArrow && !attrs.endArrow) {\n return;\n }\n if (path[path.length - 1] === 'z' || path[path.length - 1] === 'Z' || attrs.fill) {\n // 闭合路径不绘制箭头\n return;\n }\n var segmentsLen = segments.length;\n if (segmentsLen > 1) {\n startPoint = segments[0].endPoint;\n endPoint = segments[1].endPoint;\n tangent = segments[1].startTangent;\n if (Util.isFunction(tangent)) {\n var v = tangent();\n Arrow.addStartArrow(context, attrs, startPoint.x - v[0], startPoint.y - v[1], startPoint.x, startPoint.y);\n } else {\n Arrow.addStartArrow(context, attrs, endPoint.x, endPoint.y, startPoint.x, startPoint.y);\n }\n }\n\n if (segmentsLen > 1 && !closed) {\n startPoint = segments[segmentsLen - 2].endPoint;\n endPoint = segments[segmentsLen - 1].endPoint;\n tangent = segments[segmentsLen - 1].endTangent;\n if (Util.isFunction(tangent)) {\n var _v = tangent();\n Arrow.addEndArrow(context, attrs, endPoint.x - _v[0], endPoint.y - _v[1], endPoint.x, endPoint.y, tangent());\n } else {\n Arrow.addEndArrow(context, attrs, startPoint.x, startPoint.y, endPoint.x, endPoint.y);\n }\n }\n }\n});\n\nmodule.exports = Path;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/path.js\n// module id = 58\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\n\nvar CText = function CText(cfg) {\n CText.superclass.constructor.call(this, cfg);\n};\n\nCText.ATTRS = {\n x: 0,\n y: 0,\n text: null,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom',\n lineHeight: null,\n textArr: null\n};\n\nUtil.extend(CText, Shape);\n\nUtil.augment(CText, {\n canFill: true,\n canStroke: true,\n type: 'text',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n lineCount: 1,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom'\n };\n },\n initTransform: function initTransform() {\n this.attr('matrix', [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n var fontSize = this.__attrs.fontSize;\n if (fontSize && +fontSize < 12) {\n // 小于 12 像素的文本进行 scale 处理\n this.transform([['t', -1 * this.__attrs.x, -1 * this.__attrs.y], ['s', +fontSize / 12, +fontSize / 12], ['t', this.__attrs.x, this.__attrs.y]]);\n }\n },\n _assembleFont: function _assembleFont() {\n // var self = this;\n var attrs = this.__attrs;\n var fontSize = attrs.fontSize;\n var fontFamily = attrs.fontFamily;\n var fontWeight = attrs.fontWeight;\n var fontStyle = attrs.fontStyle; // self.attr('fontStyle');\n var fontVariant = attrs.fontVariant; // self.attr('fontVariant');\n // self.attr('font', [fontStyle, fontVariant, fontWeight, fontSize + 'px', fontFamily].join(' '));\n attrs.font = [fontStyle, fontVariant, fontWeight, fontSize + 'px', fontFamily].join(' ');\n },\n _afterSetAttrFontSize: function _afterSetAttrFontSize() {\n /* this.attr({\n height: this.__getTextHeight()\n }); */\n this._assembleFont();\n },\n _afterSetAttrFontFamily: function _afterSetAttrFontFamily() {\n this._assembleFont();\n },\n _afterSetAttrFontWeight: function _afterSetAttrFontWeight() {\n this._assembleFont();\n },\n _afterSetAttrFontStyle: function _afterSetAttrFontStyle() {\n this._assembleFont();\n },\n _afterSetAttrFontVariant: function _afterSetAttrFontVariant() {\n this._assembleFont();\n },\n _afterSetAttrFont: function _afterSetAttrFont() {\n // this.attr('width', this.measureText());\n },\n _afterSetAttrText: function _afterSetAttrText() {\n var attrs = this.__attrs;\n var text = attrs.text;\n var textArr = void 0;\n if (Util.isString(text) && text.indexOf('\\n') !== -1) {\n textArr = text.split('\\n');\n var lineCount = textArr.length;\n attrs.lineCount = lineCount;\n attrs.textArr = textArr;\n }\n // attrs.height = this.__getTextHeight();\n // attrs.width = this.measureText();\n },\n _getTextHeight: function _getTextHeight() {\n var attrs = this.__attrs;\n var lineCount = attrs.lineCount;\n var fontSize = attrs.fontSize * 1;\n if (lineCount > 1) {\n var spaceingY = this._getSpaceingY();\n return fontSize * lineCount + spaceingY * (lineCount - 1);\n }\n return fontSize;\n },\n\n // 计算浪费,效率低,待优化\n _afterSetAttrAll: function _afterSetAttrAll(objs) {\n var self = this;\n if ('fontSize' in objs || 'fontWeight' in objs || 'fontStyle' in objs || 'fontVariant' in objs || 'fontFamily' in objs) {\n self._assembleFont();\n }\n\n if ('text' in objs) {\n self._afterSetAttrText(objs.text);\n }\n },\n isHitBox: function isHitBox() {\n return false;\n },\n calculateBox: function calculateBox() {\n var self = this;\n var attrs = self.__attrs;\n var x = attrs.x;\n var y = attrs.y;\n var width = self.measureText(); // attrs.width\n if (!width) {\n // 如果width不存在,四点共其实点\n return {\n minX: x,\n minY: y,\n maxX: x,\n maxY: y\n };\n }\n var height = self._getTextHeight(); // attrs.height\n var textAlign = attrs.textAlign;\n var textBaseline = attrs.textBaseline;\n var lineWidth = self.getHitLineWidth();\n var point = {\n x: x,\n y: y - height\n };\n\n if (textAlign) {\n if (textAlign === 'end' || textAlign === 'right') {\n point.x -= width;\n } else if (textAlign === 'center') {\n point.x -= width / 2;\n }\n }\n\n if (textBaseline) {\n if (textBaseline === 'top') {\n point.y += height;\n } else if (textBaseline === 'middle') {\n point.y += height / 2;\n }\n }\n\n this.set('startPoint', point);\n var halfWidth = lineWidth / 2;\n return {\n minX: point.x - halfWidth,\n minY: point.y - halfWidth,\n maxX: point.x + width + halfWidth,\n maxY: point.y + height + halfWidth\n };\n },\n _getSpaceingY: function _getSpaceingY() {\n var attrs = this.__attrs;\n var lineHeight = attrs.lineHeight;\n var fontSize = attrs.fontSize * 1;\n return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n },\n isPointInPath: function isPointInPath(x, y) {\n var self = this;\n var box = self.getBBox();\n if (self.hasFill() || self.hasStroke()) {\n return Inside.box(box.minX, box.maxX, box.minY, box.maxY, x, y);\n }\n },\n drawInner: function drawInner(context) {\n var self = this;\n var attrs = self.__attrs;\n var text = attrs.text;\n if (!text) {\n return;\n }\n var textArr = attrs.textArr;\n var x = attrs.x;\n var y = attrs.y;\n\n context.beginPath();\n if (self.hasStroke()) {\n if (textArr) {\n self._drawTextArr(context, false);\n } else {\n context.strokeText(text, x, y);\n }\n }\n if (self.hasFill()) {\n var fillOpacity = attrs.fillOpacity;\n if (!Util.isNil(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n }\n if (textArr) {\n self._drawTextArr(context, true);\n } else {\n context.fillText(text, x, y);\n }\n }\n },\n _drawTextArr: function _drawTextArr(context, fill) {\n var textArr = this.__attrs.textArr;\n var textBaseline = this.__attrs.textBaseline;\n var fontSize = this.__attrs.fontSize * 1;\n var spaceingY = this._getSpaceingY();\n var x = this.__attrs.x;\n var y = this.__attrs.y;\n var box = this.getBBox();\n var height = box.maxY - box.minY;\n var subY = void 0;\n\n Util.each(textArr, function (subText, index) {\n subY = y + index * (spaceingY + fontSize) - height + fontSize; // bottom;\n if (textBaseline === 'middle') subY += height - fontSize - (height - fontSize) / 2;\n if (textBaseline === 'top') subY += height - fontSize;\n if (fill) {\n context.fillText(subText, x, subY);\n } else {\n context.strokeText(subText, x, subY);\n }\n });\n },\n measureText: function measureText() {\n var self = this;\n var attrs = self.__attrs;\n var text = attrs.text;\n var font = attrs.font;\n var textArr = attrs.textArr;\n var measureWidth = void 0;\n var width = 0;\n\n if (Util.isNil(text)) return undefined;\n var context = document.createElement('canvas').getContext('2d');\n context.save();\n context.font = font;\n if (textArr) {\n Util.each(textArr, function (subText) {\n measureWidth = context.measureText(subText).width;\n if (width < measureWidth) {\n width = measureWidth;\n }\n context.restore();\n });\n } else {\n width = context.measureText(text).width;\n context.restore();\n }\n return width;\n }\n});\n\nmodule.exports = CText;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/text.js\n// module id = 59\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\nvar Arrow = require('./util/arrow');\nvar LineMath = require('./math/line');\n\nvar Line = function Line(cfg) {\n Line.superclass.constructor.call(this, cfg);\n};\n\nLine.ATTRS = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n};\n\nUtil.extend(Line, Shape);\n\nUtil.augment(Line, {\n canStroke: true,\n type: 'line',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n };\n },\n calculateBox: function calculateBox() {\n var attrs = this.__attrs;\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2;\n\n var lineWidth = this.getHitLineWidth();\n return LineMath.box(x1, y1, x2, y2, lineWidth);\n },\n isPointInPath: function isPointInPath(x, y) {\n var attrs = this.__attrs;\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2;\n\n var lineWidth = this.getHitLineWidth();\n\n if (this.hasStroke()) {\n return Inside.line(x1, y1, x2, y2, lineWidth, x, y);\n }\n\n return false;\n },\n createPath: function createPath(context) {\n var attrs = this.__attrs;\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2;\n\n context = context || self.get('context');\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n },\n afterPath: function afterPath(context) {\n var attrs = this.__attrs;\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2;\n\n context = context || this.get('context');\n if (attrs.startArrow) {\n Arrow.addStartArrow(context, attrs, x2, y2, x1, y1);\n }\n if (attrs.endArrow) {\n Arrow.addEndArrow(context, attrs, x1, y1, x2, y2);\n }\n },\n getPoint: function getPoint(t) {\n var attrs = this.__attrs;\n return {\n x: LineMath.at(attrs.x1, attrs.x2, t),\n y: LineMath.at(attrs.y1, attrs.y2, t)\n };\n }\n});\n\nmodule.exports = Line;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/line.js\n// module id = 60\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\n\nvar CImage = function CImage(cfg) {\n CImage.superclass.constructor.call(this, cfg);\n};\n\nCImage.ATTRS = {\n x: 0,\n y: 0,\n img: undefined,\n width: 0,\n height: 0,\n sx: null,\n sy: null,\n swidth: null,\n sheight: null\n};\n\nUtil.extend(CImage, Shape);\n\nUtil.augment(CImage, {\n type: 'image',\n _afterSetAttrImg: function _afterSetAttrImg(img) {\n this._setAttrImg(img);\n },\n _afterSetAttrAll: function _afterSetAttrAll(params) {\n if (params.img) {\n this._setAttrImg(params.img);\n }\n },\n isHitBox: function isHitBox() {\n return false;\n },\n calculateBox: function calculateBox() {\n var attrs = this.__attrs;\n var x = attrs.x;\n var y = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n\n return {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var attrs = this.__attrs;\n if (this.get('toDraw') || !attrs.img) {\n return false;\n }\n var rx = attrs.x;\n var ry = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n return Inside.rect(rx, ry, width, height, x, y);\n },\n _beforeSetLoading: function _beforeSetLoading(loading) {\n var canvas = this.get('canvas');\n if (loading === false && this.get('toDraw') === true) {\n this.__cfg.loading = false;\n canvas.draw();\n }\n return loading;\n },\n _setAttrImg: function _setAttrImg(img) {\n var self = this;\n var attrs = self.__attrs;\n if (Util.isString(img)) {\n var image = new Image();\n image.onload = function () {\n if (self.get('destroyed')) return false;\n self.attr('imgSrc', img);\n self.attr('img', image);\n var callback = self.get('callback');\n if (callback) {\n callback.call(self);\n }\n self.set('loading', false);\n };\n image.src = img;\n self.set('loading', true);\n } else if (img instanceof Image) {\n if (!attrs.width) {\n self.attr('width', img.width);\n }\n\n if (!attrs.height) {\n self.attr('height', img.height);\n }\n return img;\n } else if (img instanceof HTMLElement && Util.isString(img.nodeName) && img.nodeName.toUpperCase() === 'CANVAS') {\n if (!attrs.width) {\n self.attr('width', Number(img.getAttribute('width')));\n }\n\n if (!attrs.height) {\n self.attr('height', Number(img.getAttribute('height')));\n }\n return img;\n } else if (img instanceof ImageData) {\n if (!attrs.width) {\n self.attr('width', img.width);\n }\n\n if (!attrs.height) {\n self.attr('height', img.height);\n }\n return img;\n } else {\n return null;\n }\n },\n drawInner: function drawInner(context) {\n if (this.get('loading')) {\n this.set('toDraw', true);\n return;\n }\n this._drawImage(context);\n },\n _drawImage: function _drawImage(context) {\n var attrs = this.__attrs;\n var x = attrs.x;\n var y = attrs.y;\n var image = attrs.img;\n var width = attrs.width;\n var height = attrs.height;\n var sx = attrs.sx;\n var sy = attrs.sy;\n var swidth = attrs.swidth;\n var sheight = attrs.sheight;\n this.set('toDraw', false);\n\n var img = image;\n if (img instanceof ImageData) {\n img = new Image();\n img.src = image;\n }\n if (img instanceof Image || img instanceof HTMLElement && Util.isString(img.nodeName) && img.nodeName.toUpperCase() === 'CANVAS') {\n if (Util.isNil(sx) || Util.isNil(sy) || Util.isNil(swidth) || Util.isNil(sheight)) {\n context.drawImage(img, x, y, width, height);\n return;\n }\n if (!Util.isNil(sx) && !Util.isNil(sy) && !Util.isNil(swidth) && !Util.isNil(sheight)) {\n context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);\n return;\n }\n }\n return;\n }\n});\n\nmodule.exports = CImage;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/image.js\n// module id = 61\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\n\nvar Polygon = function Polygon(cfg) {\n Polygon.superclass.constructor.call(this, cfg);\n};\n\nPolygon.ATTRS = {\n points: null,\n lineWidth: 1\n};\n\nUtil.extend(Polygon, Shape);\n\nUtil.augment(Polygon, {\n canFill: true,\n canStroke: true,\n type: 'polygon',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1\n };\n },\n calculateBox: function calculateBox() {\n var self = this;\n var attrs = self.__attrs;\n var points = attrs.points;\n var lineWidth = this.getHitLineWidth();\n if (!points || points.length === 0) {\n return null;\n }\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n\n Util.each(points, function (point) {\n var x = point[0];\n var y = point[1];\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n\n if (y < minY) {\n minY = y;\n }\n\n if (y > maxY) {\n maxY = y;\n }\n });\n\n var halfWidth = lineWidth / 2;\n return {\n minX: minX - halfWidth,\n minY: minY - halfWidth,\n maxX: maxX + halfWidth,\n maxY: maxY + halfWidth\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var self = this;\n var fill = self.hasFill();\n var stroke = self.hasStroke();\n\n if (fill && stroke) {\n return self._isPointInFill(x, y) || self._isPointInStroke(x, y);\n }\n\n if (fill) {\n return self._isPointInFill(x, y);\n }\n\n if (stroke) {\n return self._isPointInStroke(x, y);\n }\n\n return false;\n },\n _isPointInFill: function _isPointInFill(x, y) {\n var self = this;\n var context = self.get('context');\n self.createPath();\n return context.isPointInPath(x, y);\n },\n _isPointInStroke: function _isPointInStroke(x, y) {\n var self = this;\n var attrs = self.__attrs;\n var points = attrs.points;\n if (points.length < 2) {\n return false;\n }\n var lineWidth = this.getHitLineWidth();\n var outPoints = points.slice(0);\n if (points.length >= 3) {\n outPoints.push(points[0]);\n }\n\n return Inside.polyline(outPoints, lineWidth, x, y);\n },\n createPath: function createPath(context) {\n var self = this;\n var attrs = self.__attrs;\n var points = attrs.points;\n if (points.length < 2) {\n return;\n }\n context = context || self.get('context');\n context.beginPath();\n Util.each(points, function (point, index) {\n if (index === 0) {\n context.moveTo(point[0], point[1]);\n } else {\n context.lineTo(point[0], point[1]);\n }\n });\n context.closePath();\n }\n});\n\nmodule.exports = Polygon;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/polygon.js\n// module id = 62\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\nvar Arrow = require('./util/arrow');\nvar LineMath = require('./math/line');\n\nvar Polyline = function Polyline(cfg) {\n Polyline.superclass.constructor.call(this, cfg);\n};\n\nPolyline.ATTRS = {\n points: null,\n lineWidth: 1,\n startArrow: false,\n endArrow: false,\n tCache: null\n};\n\nUtil.extend(Polyline, Shape);\n\nUtil.augment(Polyline, {\n canStroke: true,\n type: 'polyline',\n tCache: null, // 缓存各点的t\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n };\n },\n calculateBox: function calculateBox() {\n var self = this;\n var attrs = self.__attrs;\n var lineWidth = this.getHitLineWidth();\n var points = attrs.points;\n if (!points || points.length === 0) {\n return null;\n }\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n\n Util.each(points, function (point) {\n var x = point[0];\n var y = point[1];\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n\n if (y < minY) {\n minY = y;\n }\n\n if (y > maxY) {\n maxY = y;\n }\n });\n\n var halfWidth = lineWidth / 2;\n return {\n minX: minX - halfWidth,\n minY: minY - halfWidth,\n maxX: maxX + halfWidth,\n maxY: maxY + halfWidth\n };\n },\n _setTcache: function _setTcache() {\n var self = this;\n var attrs = self.__attrs;\n var points = attrs.points;\n var totalLength = 0;\n var tempLength = 0;\n var tCache = [];\n var segmentT = void 0;\n var segmentL = void 0;\n if (!points || points.length === 0) {\n return;\n }\n\n Util.each(points, function (p, i) {\n if (points[i + 1]) {\n totalLength += LineMath.len(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n }\n });\n if (totalLength <= 0) {\n return;\n }\n Util.each(points, function (p, i) {\n if (points[i + 1]) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = LineMath.len(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.tCache = tCache;\n },\n isPointInPath: function isPointInPath(x, y) {\n var self = this;\n var attrs = self.__attrs;\n if (self.hasStroke()) {\n var points = attrs.points;\n if (points.length < 2) {\n return false;\n }\n var lineWidth = attrs.lineWidth;\n return Inside.polyline(points, lineWidth, x, y);\n }\n return false;\n },\n createPath: function createPath(context) {\n var self = this;\n var attrs = self.__attrs;\n var points = attrs.points;\n var l = void 0;\n var i = void 0;\n\n if (points.length < 2) {\n return;\n }\n context = context || self.get('context');\n context.beginPath();\n\n context.moveTo(points[0][0], points[0][1]);\n for (i = 1, l = points.length - 1; i < l; i++) {\n context.lineTo(points[i][0], points[i][1]);\n }\n context.lineTo(points[l][0], points[l][1]);\n },\n afterPath: function afterPath(context) {\n var self = this;\n var attrs = self.__attrs;\n var points = attrs.points;\n var l = points.length - 1;\n context = context || self.get('context');\n\n if (attrs.startArrow) {\n Arrow.addStartArrow(context, attrs, points[1][0], points[1][1], points[0][0], points[0][1]);\n }\n if (attrs.endArrow) {\n Arrow.addEndArrow(context, attrs, points[l - 1][0], points[l - 1][1], points[l][0], points[l][1]);\n }\n },\n getPoint: function getPoint(t) {\n var attrs = this.__attrs;\n var points = attrs.points;\n var tCache = this.tCache;\n var subt = void 0;\n var index = void 0;\n if (!tCache) {\n this._setTcache();\n tCache = this.tCache;\n }\n Util.each(tCache, function (v, i) {\n if (t >= v[0] && t <= v[1]) {\n subt = (t - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n return {\n x: LineMath.at(points[index][0], points[index + 1][0], subt),\n y: LineMath.at(points[index][1], points[index + 1][1], subt)\n };\n }\n});\n\nmodule.exports = Polyline;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/polyline.js\n// module id = 63\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\nvar ArcMath = require('./math/arc');\nvar Arrow = require('./util/arrow');\n\nfunction _getArcX(x, radius, angle) {\n return x + radius * Math.cos(angle);\n}\nfunction _getArcY(y, radius, angle) {\n return y + radius * Math.sin(angle);\n}\n\nvar Arc = function Arc(cfg) {\n Arc.superclass.constructor.call(this, cfg);\n};\n\nArc.ATTRS = {\n x: 0,\n y: 0,\n r: 0,\n startAngle: 0,\n endAngle: 0,\n clockwise: false,\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n};\n\nUtil.extend(Arc, Shape);\n\nUtil.augment(Arc, {\n canStroke: true,\n type: 'arc',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n x: 0,\n y: 0,\n r: 0,\n startAngle: 0,\n endAngle: 0,\n clockwise: false,\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n };\n },\n calculateBox: function calculateBox() {\n var attrs = this.__attrs;\n var x = attrs.x,\n y = attrs.y,\n r = attrs.r,\n startAngle = attrs.startAngle,\n endAngle = attrs.endAngle,\n clockwise = attrs.clockwise;\n\n var lineWidth = this.getHitLineWidth();\n var halfWidth = lineWidth / 2;\n var box = ArcMath.box(x, y, r, startAngle, endAngle, clockwise);\n box.minX -= halfWidth;\n box.minY -= halfWidth;\n box.maxX += halfWidth;\n box.maxY += halfWidth;\n return box;\n },\n isPointInPath: function isPointInPath(x, y) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r,\n startAngle = attrs.startAngle,\n endAngle = attrs.endAngle,\n clockwise = attrs.clockwise;\n\n var lineWidth = this.getHitLineWidth();\n if (this.hasStroke()) {\n return Inside.arcline(cx, cy, r, startAngle, endAngle, clockwise, lineWidth, x, y);\n }\n return false;\n },\n createPath: function createPath(context) {\n var attrs = this.__attrs;\n var x = attrs.x,\n y = attrs.y,\n r = attrs.r,\n startAngle = attrs.startAngle,\n endAngle = attrs.endAngle,\n clockwise = attrs.clockwise;\n\n context = context || self.get('context');\n\n context.beginPath();\n context.arc(x, y, r, startAngle, endAngle, clockwise);\n },\n afterPath: function afterPath(context) {\n var attrs = this.__attrs;\n var x = attrs.x,\n y = attrs.y,\n r = attrs.r,\n startAngle = attrs.startAngle,\n endAngle = attrs.endAngle,\n clockwise = attrs.clockwise;\n\n context = context || this.get('context');\n var diff = void 0;\n var x1 = void 0;\n var y1 = void 0;\n var x2 = void 0;\n var y2 = void 0;\n\n if (attrs.startArrow) {\n diff = Math.PI / 180;\n if (clockwise) {\n diff *= -1;\n }\n x1 = _getArcX(x, r, startAngle + diff);\n y1 = _getArcY(y, r, startAngle + diff);\n x2 = _getArcX(x, r, startAngle);\n y2 = _getArcY(y, r, startAngle);\n Arrow.addStartArrow(context, attrs, x1, y1, x2, y2);\n }\n\n if (attrs.endArrow) {\n diff = Math.PI / 180;\n if (clockwise) {\n diff *= -1;\n }\n x1 = _getArcX(x, r, endAngle + diff);\n y1 = _getArcY(y, r, endAngle + diff);\n x2 = _getArcX(x, r, endAngle);\n y2 = _getArcY(y, r, endAngle);\n Arrow.addEndArrow(context, attrs, x2, y2, x1, y1);\n }\n }\n});\n\nmodule.exports = Arc;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/arc.js\n// module id = 64\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\nvar ArcMath = require('./math/arc');\nvar vec2 = require('../../util/matrix').vec2;\n\nvar Fan = function Fan(cfg) {\n Fan.superclass.constructor.call(this, cfg);\n};\n\nFan.ATTRS = {\n x: 0,\n y: 0,\n rs: 0,\n re: 0,\n startAngle: 0,\n endAngle: 0,\n clockwise: false,\n lineWidth: 1\n};\n\nUtil.extend(Fan, Shape);\n\nUtil.augment(Fan, {\n canFill: true,\n canStroke: true,\n type: 'fan',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n clockwise: false,\n lineWidth: 1,\n rs: 0,\n re: 0\n };\n },\n calculateBox: function calculateBox() {\n var self = this;\n var attrs = self.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var rs = attrs.rs;\n var re = attrs.re;\n var startAngle = attrs.startAngle;\n var endAngle = attrs.endAngle;\n var clockwise = attrs.clockwise;\n var lineWidth = this.getHitLineWidth();\n\n var boxs = ArcMath.box(cx, cy, rs, startAngle, endAngle, clockwise);\n var boxe = ArcMath.box(cx, cy, re, startAngle, endAngle, clockwise);\n var minX = Math.min(boxs.minX, boxe.minX);\n var minY = Math.min(boxs.minY, boxe.minY);\n var maxX = Math.max(boxs.maxX, boxe.maxX);\n var maxY = Math.max(boxs.maxY, boxe.maxY);\n\n var halfWidth = lineWidth / 2;\n return {\n minX: minX - halfWidth,\n minY: minY - halfWidth,\n maxX: maxX + halfWidth,\n maxY: maxY + halfWidth\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var fill = this.hasFill();\n var stroke = this.hasStroke();\n\n if (fill && stroke) {\n return this._isPointInFill(x, y) || this._isPointInStroke(x, y);\n }\n\n if (fill) {\n return this._isPointInFill(x, y);\n }\n\n if (stroke) {\n return this._isPointInStroke(x, y);\n }\n return false;\n },\n _isPointInFill: function _isPointInFill(x, y) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var rs = attrs.rs;\n var re = attrs.re;\n var startAngle = attrs.startAngle;\n var endAngle = attrs.endAngle;\n var clockwise = attrs.clockwise;\n var v1 = [1, 0];\n var subv = [x - cx, y - cy];\n var angle = vec2.angleTo(v1, subv);\n\n var angle1 = ArcMath.nearAngle(angle, startAngle, endAngle, clockwise);\n\n if (Util.isNumberEqual(angle, angle1)) {\n var ls = vec2.squaredLength(subv);\n if (rs * rs <= ls && ls <= re * re) {\n return true;\n }\n }\n return false;\n },\n _isPointInStroke: function _isPointInStroke(x, y) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var rs = attrs.rs;\n var re = attrs.re;\n var startAngle = attrs.startAngle;\n var endAngle = attrs.endAngle;\n var clockwise = attrs.clockwise;\n var lineWidth = this.getHitLineWidth();\n\n var ssp = {\n x: Math.cos(startAngle) * rs + cx,\n y: Math.sin(startAngle) * rs + cy\n };\n var sep = {\n x: Math.cos(startAngle) * re + cx,\n y: Math.sin(startAngle) * re + cy\n };\n var esp = {\n x: Math.cos(endAngle) * rs + cx,\n y: Math.sin(endAngle) * rs + cy\n };\n var eep = {\n x: Math.cos(endAngle) * re + cx,\n y: Math.sin(endAngle) * re + cy\n };\n\n if (Inside.line(ssp.x, ssp.y, sep.x, sep.y, lineWidth, x, y)) {\n return true;\n }\n\n if (Inside.line(esp.x, esp.y, eep.x, eep.y, lineWidth, x, y)) {\n return true;\n }\n\n if (Inside.arcline(cx, cy, rs, startAngle, endAngle, clockwise, lineWidth, x, y)) {\n return true;\n }\n\n if (Inside.arcline(cx, cy, re, startAngle, endAngle, clockwise, lineWidth, x, y)) {\n return true;\n }\n\n return false;\n },\n createPath: function createPath(context) {\n var attrs = this.__attrs;\n var cx = attrs.x;\n var cy = attrs.y;\n var rs = attrs.rs;\n var re = attrs.re;\n var startAngle = attrs.startAngle;\n var endAngle = attrs.endAngle;\n var clockwise = attrs.clockwise;\n\n var ssp = {\n x: Math.cos(startAngle) * rs + cx,\n y: Math.sin(startAngle) * rs + cy\n };\n var sep = {\n x: Math.cos(startAngle) * re + cx,\n y: Math.sin(startAngle) * re + cy\n };\n var esp = {\n x: Math.cos(endAngle) * rs + cx,\n y: Math.sin(endAngle) * rs + cy\n };\n\n context = context || self.get('context');\n context.beginPath();\n context.moveTo(ssp.x, ssp.y);\n context.lineTo(sep.x, sep.y);\n context.arc(cx, cy, re, startAngle, endAngle, clockwise);\n context.lineTo(esp.x, esp.y);\n context.arc(cx, cy, rs, endAngle, startAngle, !clockwise);\n context.closePath();\n }\n});\n\nmodule.exports = Fan;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/fan.js\n// module id = 65\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\nvar Arrow = require('./util/arrow');\nvar CubicMath = require('./math/cubic');\n\nvar Cubic = function Cubic(cfg) {\n Cubic.superclass.constructor.call(this, cfg);\n};\n\nCubic.ATTRS = {\n p1: null, // 起始点\n p2: null, // 第一个控制点\n p3: null, // 第二个控制点\n p4: null, // 终点\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n};\n\nUtil.extend(Cubic, Shape);\n\nUtil.augment(Cubic, {\n canStroke: true,\n type: 'cubic',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n };\n },\n calculateBox: function calculateBox() {\n var attrs = this.__attrs;\n var p1 = attrs.p1,\n p2 = attrs.p2,\n p3 = attrs.p3,\n p4 = attrs.p4;\n\n var lineWidth = this.getHitLineWidth();\n var i = void 0;\n var l = void 0;\n\n if (Util.isNil(p1) || Util.isNil(p2) || Util.isNil(p3) || Util.isNil(p4)) {\n return null;\n }\n var halfWidth = lineWidth / 2;\n\n var xDim = CubicMath.extrema(p1[0], p2[0], p3[0], p4[0]);\n for (i = 0, l = xDim.length; i < l; i++) {\n xDim[i] = CubicMath.at(p1[0], p2[0], p3[0], p4[0], xDim[i]);\n }\n var yDim = CubicMath.extrema(p1[1], p2[1], p3[1], p4[1]);\n for (i = 0, l = yDim.length; i < l; i++) {\n yDim[i] = CubicMath.at(p1[1], p2[1], p3[1], p4[1], yDim[i]);\n }\n xDim.push(p1[0], p4[0]);\n yDim.push(p1[1], p4[1]);\n\n return {\n minX: Math.min.apply(Math, xDim) - halfWidth,\n maxX: Math.max.apply(Math, xDim) + halfWidth,\n minY: Math.min.apply(Math, yDim) - halfWidth,\n maxY: Math.max.apply(Math, yDim) + halfWidth\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var attrs = this.__attrs;\n var p1 = attrs.p1,\n p2 = attrs.p2,\n p3 = attrs.p3,\n p4 = attrs.p4;\n\n var lineWidth = this.getHitLineWidth();\n return Inside.cubicline(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1], p4[0], p4[1], lineWidth, x, y);\n },\n createPath: function createPath(context) {\n var attrs = this.__attrs;\n var p1 = attrs.p1,\n p2 = attrs.p2,\n p3 = attrs.p3,\n p4 = attrs.p4;\n\n context = context || self.get('context');\n if (Util.isNil(p1) || Util.isNil(p2) || Util.isNil(p3) || Util.isNil(p4)) {\n return;\n }\n context.beginPath();\n context.moveTo(p1[0], p1[1]);\n context.bezierCurveTo(p2[0], p2[1], p3[0], p3[1], p4[0], p4[1]);\n },\n afterPath: function afterPath(context) {\n var attrs = this.__attrs;\n var p1 = attrs.p1,\n p2 = attrs.p2,\n p3 = attrs.p3,\n p4 = attrs.p4;\n\n context = context || this.get('context');\n if (attrs.startArrow) {\n Arrow.addStartArrow(context, attrs, p2[0], p2[1], p1[0], p1[1]);\n }\n if (attrs.endArrow) {\n Arrow.addEndArrow(context, attrs, p3[0], p3[1], p4[0], p4[1]);\n }\n },\n getPoint: function getPoint(t) {\n var attrs = this.__attrs;\n return {\n x: CubicMath.at(attrs.p4[0], attrs.p3[0], attrs.p2[0], attrs.p1[0], t),\n y: CubicMath.at(attrs.p4[1], attrs.p3[1], attrs.p2[1], attrs.p1[1], t)\n };\n }\n});\n\nmodule.exports = Cubic;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/cubic.js\n// module id = 66\n// module chunks = 0","var Util = require('../../util/index');\nvar Shape = require('../core/shape');\nvar Inside = require('./util/inside');\nvar Arrow = require('./util/arrow');\nvar QuadraticMath = require('./math/quadratic');\n\nvar Quadratic = function Quadratic(cfg) {\n Quadratic.superclass.constructor.call(this, cfg);\n};\n\nQuadratic.ATTRS = {\n p1: null, // 起始点\n p2: null, // 控制点\n p3: null, // 结束点\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n};\n\nUtil.extend(Quadratic, Shape);\n\nUtil.augment(Quadratic, {\n canStroke: true,\n type: 'quadratic',\n getDefaultAttrs: function getDefaultAttrs() {\n return {\n lineWidth: 1,\n startArrow: false,\n endArrow: false\n };\n },\n calculateBox: function calculateBox() {\n var self = this;\n var attrs = self.__attrs;\n var p1 = attrs.p1,\n p2 = attrs.p2,\n p3 = attrs.p3;\n\n var lineWidth = this.getHitLineWidth();\n var i = void 0;\n var l = void 0;\n\n if (Util.isNil(p1) || Util.isNil(p2) || Util.isNil(p3)) {\n return null;\n }\n var halfWidth = lineWidth / 2;\n var xDims = QuadraticMath.extrema(p1[0], p2[0], p3[0]);\n for (i = 0, l = xDims.length; i < l; i++) {\n xDims[i] = QuadraticMath.at(p1[0], p2[0], p3[0], xDims[i]);\n }\n xDims.push(p1[0], p3[0]);\n var yDims = QuadraticMath.extrema(p1[1], p2[1], p3[1]);\n for (i = 0, l = yDims.length; i < l; i++) {\n yDims[i] = QuadraticMath.at(p1[1], p2[1], p3[1], yDims[i]);\n }\n yDims.push(p1[1], p3[1]);\n\n return {\n minX: Math.min.apply(Math, xDims) - halfWidth,\n maxX: Math.max.apply(Math, xDims) + halfWidth,\n minY: Math.min.apply(Math, yDims) - halfWidth,\n maxY: Math.max.apply(Math, yDims) + halfWidth\n };\n },\n isPointInPath: function isPointInPath(x, y) {\n var self = this;\n var attrs = self.__attrs;\n var p1 = attrs.p1,\n p2 = attrs.p2,\n p3 = attrs.p3;\n\n var lineWidth = this.getHitLineWidth();\n\n return Inside.quadraticline(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1], lineWidth, x, y);\n },\n createPath: function createPath(context) {\n var self = this;\n var attrs = self.__attrs;\n var p1 = attrs.p1,\n p2 = attrs.p2,\n p3 = attrs.p3;\n\n\n if (Util.isNil(p1) || Util.isNil(p2) || Util.isNil(p3)) {\n return;\n }\n context = context || self.get('context');\n context.beginPath();\n context.moveTo(p1[0], p1[1]);\n context.quadraticCurveTo(p2[0], p2[1], p3[0], p3[1]);\n },\n afterPath: function afterPath(context) {\n var self = this;\n var attrs = self.__attrs;\n var p1 = attrs.p1,\n p2 = attrs.p2,\n p3 = attrs.p3;\n\n context = context || self.get('context');\n\n if (attrs.startArrow) {\n Arrow.addStartArrow(context, attrs, p2[0], p2[1], p1[0], p1[1]);\n }\n\n if (attrs.endArrow) {\n Arrow.addEndArrow(context, attrs, p2[0], p2[1], p3[0], p3[1]);\n }\n },\n getPoint: function getPoint(t) {\n var attrs = this.__attrs;\n return {\n x: QuadraticMath.at(attrs.p1[0], attrs.p2[0], attrs.p3[0], t),\n y: QuadraticMath.at(attrs.p1[1], attrs.p2[1], attrs.p3[1], t)\n };\n }\n});\n\nmodule.exports = Quadratic;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/quadratic.js\n// module id = 67\n// module chunks = 0","/**\n * @fileOverview Interaction\n * @author leungwensen@gmail.com\n */\n\nvar Interactions = {\n Base: require('./base'),\n Brush: require('./brush'),\n Drag: require('./drag'),\n Zoom: require('./zoom'),\n helper: {\n bindInteraction: require('./helper/bindInteraction')\n }\n};\n\nmodule.exports = Interactions;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/index.js\n// module id = 68\n// module chunks = 0","module.exports = {\n Canvas: require('./canvas'),\n Group: require('./core/group'),\n Shape: require('./core/shape'),\n Rect: require('./shape/rect'),\n Circle: require('./shape/circle'),\n Ellipse: require('./shape/ellipse'),\n Path: require('./shape/path'),\n Text: require('./shape/text'),\n Line: require('./shape/line'),\n Image: require('./shape/image'),\n Polygon: require('./shape/polygon'),\n Marker: require('./shape/marker'),\n Dom: require('./shape/dom'),\n Fan: require('./shape/fan'),\n Event: require('./event')\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/index.js\n// module id = 69\n// module chunks = 0","var Util = require('../util/index');\nvar Event = require('./event');\nvar Group = require('./core/group');\nvar Defs = require('./core/defs');\n\nvar Canvas = function Canvas(cfg) {\n Canvas.superclass.constructor.call(this, cfg);\n};\n\nvar defs = new Defs();\n\nCanvas.CFG = {\n eventEnable: true,\n /**\n * 像素宽度\n * @type {Number}\n */\n width: null,\n /**\n * 像素高度\n * @type {Number}\n */\n height: null,\n /**\n * 画布宽度\n * @type {Number}\n */\n widthCanvas: null,\n /**\n * 画布高度\n * @type {Number}\n */\n heightCanvas: null,\n /**\n * CSS宽\n * CSS宽\n * @type {String}\n */\n widthStyle: null,\n /**\n * CSS高\n * @type {String}\n */\n heightStyle: null,\n /**\n * 容器DOM\n * @type {Object}\n */\n containerDOM: null,\n /**\n * 当前Canvas的DOM\n * @type {Object}\n */\n canvasDOM: null,\n /**\n * 屏幕像素比\n * @type {Number}\n */\n pixelRatio: Util.getRatio()\n};\n\nUtil.extend(Canvas, Group);\n\nUtil.augment(Canvas, {\n init: function init() {\n Canvas.superclass.init.call(this);\n this._setDOM();\n this._setInitSize();\n // this._scale();\n if (this.get('eventEnable')) {\n this._registEvents();\n }\n },\n getEmitter: function getEmitter(element, event) {\n if (element) {\n if (Util.isEmpty(element._getEvents())) {\n var parent = element.get('parent');\n if (parent && !event.propagationStopped) {\n return this.getEmitter(parent, event);\n }\n } else {\n return element;\n }\n }\n },\n _getEventObj: function _getEventObj(type, e, point, target) {\n var event = new Event(type, e, true, true);\n event.x = point.x;\n event.y = point.y;\n event.clientX = e.clientX;\n event.clientY = e.clientY;\n event.currentTarget = target;\n event.target = target;\n return event;\n },\n _triggerEvent: function _triggerEvent(type, e) {\n var point = this.getPointByClient(e.clientX, e.clientY);\n var shape = this.findShape(e.srcElement);\n var emitObj = void 0;\n if (type === 'mousemove') {\n var preShape = this.get('preShape');\n if (preShape && preShape !== shape) {\n var mouseleave = this._getEventObj('mouseleave', e, point, preShape);\n emitObj = this.getEmitter(preShape, e);\n emitObj && emitObj.emit('mouseleave', mouseleave);\n }\n\n if (shape) {\n var mousemove = this._getEventObj('mousemove', e, point, shape);\n emitObj = this.getEmitter(shape, e);\n emitObj && emitObj.emit('mousemove', mousemove);\n\n if (preShape !== shape) {\n var mouseenter = this._getEventObj('mouseenter', e, point, shape);\n emitObj && emitObj.emit('mouseenter', mouseenter, e);\n }\n } else {\n var canvasmousemove = this._getEventObj('mousemove', e, point, this);\n this.emit('mousemove', canvasmousemove);\n }\n this.set('preShape', shape);\n } else {\n var event = this._getEventObj(type, e, point, shape || this);\n emitObj = this.getEmitter(shape, e);\n if (emitObj && emitObj !== this) {\n emitObj.emit(type, event);\n }\n this.emit(type, event);\n }\n\n var el = this.get('el');\n if (shape && !shape.get('destroyed')) {\n el.style.cursor = shape.attr('cursor') || 'default';\n }\n },\n _registEvents: function _registEvents() {\n var self = this;\n var el = self.get('el');\n var events = ['mouseout', 'mouseover', 'mousemove', 'mousedown', 'mouseup', 'click', 'dblclick'];\n\n Util.each(events, function (event) {\n el.addEventListener(event, function (e) {\n self._triggerEvent(event, e);\n }, false);\n });\n el.addEventListener('touchstart', function (e) {\n if (!Util.isEmpty(e.touches)) {\n self._triggerEvent('touchstart', e.touches[0]);\n }\n }, false);\n\n el.addEventListener('touchmove', function (e) {\n if (!Util.isEmpty(e.touches)) {\n self._triggerEvent('touchmove', e.touches[0]);\n }\n }, false);\n\n el.addEventListener('touchend', function (e) {\n if (!Util.isEmpty(e.changedTouches)) {\n self._triggerEvent('touchend', e.changedTouches[0]);\n }\n }, false);\n },\n _setDOM: function _setDOM() {\n this._setContainer();\n this._setLayer();\n },\n _setContainer: function _setContainer() {\n var containerId = this.get('containerId');\n var containerDOM = this.get('containerDOM');\n if (!containerDOM) {\n containerDOM = document.getElementById(containerId);\n this.set('containerDOM', containerDOM);\n }\n Util.modifyCSS(containerDOM, {\n position: 'relative'\n });\n },\n _setLayer: function _setLayer() {\n var containerDOM = this.get('containerDOM');\n var canvasId = Util.uniqueId('svg_');\n if (containerDOM) {\n var _canvasDOM = Util.createDom('<svg id=\"' + canvasId + '\"></svg>');\n containerDOM.appendChild(_canvasDOM);\n _canvasDOM.appendChild(defs.get('el'));\n this.set('canvasDOM', _canvasDOM);\n this.set('el', _canvasDOM);\n this.set('defs', defs);\n this.set('canvas', this);\n }\n var canvasDOM = this.get('canvasDOM');\n this.set('context', canvasDOM);\n },\n _setInitSize: function _setInitSize() {\n this.changeSize(this.get('width'), this.get('height'));\n this.set('pixelRatio', 1);\n },\n _resize: function _resize() {\n var canvasDOM = this.get('canvasDOM');\n var widthCanvas = this.get('widthCanvas');\n var heightCanvas = this.get('heightCanvas');\n var widthStyle = this.get('widthStyle');\n var heightStyle = this.get('heightStyle');\n\n canvasDOM.style.width = widthStyle;\n canvasDOM.style.height = heightStyle;\n canvasDOM.setAttribute('width', widthCanvas);\n canvasDOM.setAttribute('height', heightCanvas);\n },\n getWidth: function getWidth() {\n return this.get('width');\n },\n getHeight: function getHeight() {\n return this.get('height');\n },\n changeSize: function changeSize(width, height) {\n this.set('widthCanvas', width);\n this.set('heightCanvas', height);\n this.set('widthStyle', width + 'px');\n this.set('heightStyle', height + 'px');\n this.set('width', width);\n this.set('height', height);\n this._resize();\n },\n\n /**\n * 将窗口坐标转变成 canvas 坐标\n * @param {Number} clientX 窗口x坐标\n * @param {Number} clientY 窗口y坐标\n * @return {Object} canvas坐标\n */\n getPointByClient: function getPointByClient(clientX, clientY) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n return {\n x: clientX - bbox.left,\n y: clientY - bbox.top\n };\n },\n getClientByPoint: function getClientByPoint(x, y) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n return {\n clientX: x + bbox.left,\n clientY: y + bbox.top\n };\n },\n beforeDraw: function beforeDraw() {\n var el = this.get('el');\n // canvas版本用盖一个canvas大小的矩阵清空画布,svg换成清空html\n el.innerHTML = '';\n },\n _beginDraw: function _beginDraw() {\n this.setSilent('toDraw', true);\n },\n _endDraw: function _endDraw() {\n this.setSilent('toDraw', false);\n },\n\n // svg实时渲染,兼容canvas版本留个空接口\n draw: function draw() {},\n destroy: function destroy() {\n var containerDOM = this.get('containerDOM');\n var canvasDOM = this.get('canvasDOM');\n if (canvasDOM && containerDOM) {\n containerDOM.removeChild(canvasDOM);\n }\n Canvas.superclass.destroy.call(this);\n }\n});\n\nmodule.exports = Canvas;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/canvas.js\n// module id = 70\n// module chunks = 0","module.exports = function (module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function () {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function get() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function get() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 71\n// module chunks = 0","var Util = require('../../../util/index');\n\nvar ALIAS_ATTRS = ['strokeStyle', 'fillStyle', 'globalAlpha'];\nvar CAPITALIZED_ATTRS_MAP = {\n r: 'R',\n opacity: 'Opacity',\n lineWidth: 'LineWidth',\n clip: 'Clip',\n stroke: 'Stroke',\n fill: 'Fill',\n strokeOpacity: 'Stroke',\n fillOpacity: 'Fill',\n x: 'X',\n y: 'Y',\n rx: 'Rx',\n ry: 'Ry',\n re: 'Re',\n rs: 'Rs',\n width: 'Width',\n height: 'Height',\n img: 'Img',\n x1: 'X1',\n x2: 'X2',\n y1: 'Y1',\n y2: 'Y2',\n points: 'Points',\n p1: 'P1',\n p2: 'P2',\n p3: 'P3',\n p4: 'P4',\n text: 'Text',\n radius: 'Radius',\n textAlign: 'TextAlign',\n textBaseline: 'TextBaseline',\n font: 'Font',\n fontSize: 'FontSize',\n fontStyle: 'FontStyle',\n fontVariant: 'FontVariant',\n fontWeight: 'FontWeight',\n fontFamily: 'FontFamily',\n clockwise: 'Clockwise',\n startAngle: 'StartAngle',\n endAngle: 'EndAngle',\n path: 'Path',\n outline: 'Outline',\n html: 'Html'\n};\nvar SVG_ATTR_MAP = {\n opacity: 'opacity',\n clip: 'clip',\n stroke: 'stroke',\n fill: 'fill',\n strokeOpacity: 'stroke-opacity',\n fillOpacity: 'fill-opacity',\n strokeStyle: 'stroke',\n fillStyle: 'fill',\n x: 'x',\n y: 'y',\n r: 'r',\n rx: 'rx',\n ry: 'ry',\n re: 're',\n rs: 'rs',\n width: 'width',\n height: 'height',\n image: 'href',\n x1: 'x1',\n x2: 'x2',\n y1: 'y1',\n y2: 'y2',\n lineCap: 'stroke-linecap',\n lineJoin: 'stroke-linejoin',\n lineWidth: 'stroke-width',\n lineDash: 'stroke-dasharray',\n miterLimit: 'stroke-miterlimit',\n font: 'font',\n fontSize: 'font-size',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n fontFamily: 'font-family',\n startArrow: 'marker-start',\n endArrow: 'marker-end',\n preserveAspectRatio: 'preserveAspectRatio'\n};\nvar ALIAS_ATTRS_MAP = {\n stroke: 'strokeStyle',\n fill: 'fillStyle',\n opacity: 'globalAlpha'\n};\n\nmodule.exports = {\n canFill: false,\n canStroke: false,\n initAttrs: function initAttrs(attrs) {\n this.__attrs = {\n opacity: 1,\n fillOpacity: 1,\n strokeOpacity: 1\n };\n this.attr(Util.assign(this.getDefaultAttrs(), attrs));\n return this;\n },\n getDefaultAttrs: function getDefaultAttrs() {\n return {};\n },\n\n /**\n * 设置或者设置属性,有以下 4 种情形:\n * - name 不存在, 则返回属性集合\n * - name 为字符串,value 为空,获取属性值\n * - name 为字符串,value 不为空,设置属性值,返回 this\n * - name 为键值对,value 为空,设置属性值\n *\n * @param {String | Object} name 属性名\n * @param {*} value 属性值\n * @return {*} 属性值\n */\n attr: function attr(name, value) {\n var self = this;\n if (arguments.length === 0) {\n return self.__attrs;\n }\n if (Util.isObject(name)) {\n for (var k in name) {\n if (ALIAS_ATTRS.indexOf(k) === -1) {\n var v = name[k];\n self._setAttr(k, v);\n }\n }\n if (self._afterSetAttrAll) {\n self._afterSetAttrAll(name);\n }\n // self.setSilent('box', null);\n self.clearBBox();\n return self;\n }\n if (arguments.length === 2) {\n self._setAttr(name, value);\n var m = '_afterSetAttr' + CAPITALIZED_ATTRS_MAP[name];\n if (CAPITALIZED_ATTRS_MAP[name] && self[m]) {\n self[m](value);\n }\n self.clearBBox();\n return self;\n }\n return self._getAttr(name);\n },\n clearBBox: function clearBBox() {\n this.setSilent('box', null);\n },\n _afterSetAttrAll: function _afterSetAttrAll() {},\n\n // 属性获取触发函数\n _getAttr: function _getAttr(name) {\n return this.__attrs[name];\n },\n\n // 属性设置触发函数\n _setAttr: function _setAttr(name, value) {\n var self = this;\n var el = self.get('el');\n\n if (name === 'clip') {\n self._setAttrClip(name, value);\n return;\n }\n self.__attrs[name] = value;\n if (typeof value === 'number' && isNaN(value)) {\n return;\n }\n if (self.get('destroyed')) {\n return;\n }\n if (name === 'transform' || name === 'rotate') {\n self._setAttrTrans(name, value);\n } else if (name.startsWith('shadow')) {\n self._setAttrShadow(name, value);\n } else if (~['stroke', 'strokeStyle', 'fill', 'fillStyle'].indexOf(name) && el) {\n if (!value) {\n el.setAttribute(SVG_ATTR_MAP[name], 'none');\n } else if (/^[r,R,L,l]{1}[\\s]*\\(/.test(value.trim())) {\n self._setAttrGradients(name, value.trim());\n } else {\n el.setAttribute(SVG_ATTR_MAP[name], value);\n }\n } else if (~name.toLowerCase().indexOf('arrow')) {\n if (!value) {\n return self;\n }\n self._setAttrArrow(name, value);\n } else {\n // 先存好属性,然后对一些svg和canvas中不同的属性进行特判\n if (~['circle', 'ellipse', 'marker'].indexOf(self.type) && ~['x', 'y'].indexOf(name)) {\n /**\n * 本来考虑想写到对应图形里面的,但是x,y又是svg通用属性,这样会同时存在x,y, cx,cy\n * 如果在下面svgAttr设置的时候还是要特判,不如就在这边特殊处理一下吧\n */\n if (self.type !== 'marker' && typeof value === 'number') {\n el.setAttribute('c' + name, value);\n }\n } else {\n var svgAttr = SVG_ATTR_MAP[name];\n if (el && svgAttr) {\n el.setAttribute(svgAttr, value);\n }\n var alias = ALIAS_ATTRS_MAP[name];\n if (alias) {\n svgAttr = SVG_ATTR_MAP[alias];\n if (el && svgAttr) {\n el.setAttribute(svgAttr, value);\n }\n self.__attrs[alias] = value;\n }\n }\n }\n return self;\n },\n hasFill: function hasFill() {\n return this.canFill && this.__attrs.fillStyle;\n },\n hasStroke: function hasStroke() {\n return this.canStroke && this.__attrs.strokeStyle;\n },\n _setAttrArrow: function _setAttrArrow(name, value) {\n var self = this;\n var el = self.get('el');\n var defs = self.get('defs');\n if (!defs) {\n var canvas = self.get('canvas');\n if (!canvas) {\n this._setAttrDependency(name, value);\n return this;\n }\n defs = canvas.get('defs');\n }\n name = SVG_ATTR_MAP[name];\n if (!name) {\n return this;\n }\n if (!value) {\n el.removeAttribute(name);\n return this;\n }\n var id = defs.find(name, { value: value, stroke: self.__attrs.stroke });\n if (!id) {\n id = defs.addArrow(name, value, self.__attrs.stroke);\n }\n self.__cfg[name] = id;\n self.get('el').setAttribute(name, 'url(#' + id + ')');\n },\n _setAttrShadow: function _setAttrShadow(name, value) {\n var attrs = this.__attrs;\n var filter = this.get('filter');\n var defs = this.get('defs');\n if (!value) {\n this.get('el').removeAttribute('filter');\n return this;\n }\n if (filter) {\n defs.findById(filter).update(name, value);\n return this;\n }\n if (!defs) {\n var canvas = this.get('canvas');\n if (!canvas) {\n this._setAttrDependency(name, value);\n return this;\n }\n defs = canvas.get('defs');\n }\n var cfg = {\n dx: attrs.shadowOffsetX,\n dy: attrs.shadowOffsetY,\n blur: attrs.shadowBlur,\n color: attrs.shadowColor\n };\n if (isNaN(Number(cfg.dx)) || isNaN(Number(cfg.dy))) {\n return this;\n }\n var id = defs.find('filter', cfg);\n if (!id) {\n id = defs.addShadow(cfg, this);\n }\n this.__cfg.filter = id;\n this.get('el').setAttribute('filter', 'url(#' + id + ')');\n },\n _setAttrGradients: function _setAttrGradients(name, value) {\n name = name.replace('Style', '');\n var defs = this.get('defs');\n if (!value) {\n this.get('el').removeAttribute('gradient');\n return this;\n }\n if (!defs) {\n var canvas = this.get('canvas');\n if (!canvas) {\n this._setAttrDependency(name, value);\n return this;\n }\n defs = canvas.get('defs');\n }\n var id = defs.find('gradient', value);\n if (!id) {\n id = defs.addGradient(value, this);\n }\n this.get('el').setAttribute(name, 'url(#' + id + ')');\n },\n _setAttrDependency: function _setAttrDependency(name, value) {\n var dependencies = this.get('dependencies');\n if (!dependencies) {\n dependencies = {};\n }\n dependencies[name] = value;\n this.__cfg.dependencies = dependencies;\n return this;\n },\n _setAttrClip: function _setAttrClip(name, value) {\n var defs = this.get('defs');\n var canvas = this.get('canvas');\n if (!value) {\n this.get('el').removeAttribute('clip-path');\n return this;\n }\n if (!defs) {\n var _canvas = this.get('canvas');\n if (!_canvas) {\n this._setAttrDependency(name, value);\n return this;\n }\n defs = _canvas.get('defs');\n }\n value.__cfg.canvas = canvas;\n var id = defs.addClip(value);\n this.get('el').setAttribute('clip-path', 'url(#' + id + ')');\n },\n _setAttrTrans: function _setAttrTrans(name, value) {\n var attrs = this.__attrs;\n if (!value) {\n this.get('el').removeAttribute('transform');\n }\n if (!attrs.matrix) {\n this.initTransform();\n }\n if (name === 'transform') {\n this.transform(value);\n } else {\n if (typeof attrs.x === 'undefined' || typeof attrs.y === 'undefined') {\n this._setAttrDependency(name, value);\n return this;\n }\n this.rotateAtStart(value);\n }\n return this;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/core/mixin/attribute.js\n// module id = 72\n// module chunks = 0","var Util = require('../../../util/index');\nvar mat3 = require('../../../util/matrix').mat3;\nvar vec3 = require('../../../util/matrix').vec3;\n\n// 是否未改变\nfunction isUnchanged(m) {\n return m[0] === 1 && m[1] === 0 && m[3] === 0 && m[4] === 1 && m[6] === 0 && m[7] === 0;\n}\n\n// 是否仅仅是scale\nfunction isScale(m) {\n return m[1] === 0 && m[3] === 0 && m[6] === 0 && m[7] === 0;\n}\n\n/* function multiple(m1, m2) {\n if (!isUnchanged(m2)) {\n if (isScale(m2)) {\n m1[0] *= m2[0];\n m1[4] *= m2[4];\n } else {\n mat3.multiply(m1, m1, m2);\n mat3.multiply(m1, m1, m2);\n }\n }\n}*/\n\nmodule.exports = {\n initTransform: function initTransform() {\n this.attr('matrix', [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n },\n translate: function translate(tx, ty, perform) {\n var matrix = this.attr('matrix');\n mat3.translate(matrix, matrix, [tx, ty]);\n this.attr('matrix', matrix);\n if (arguments.length === 2 || perform) {\n this._performTransform();\n }\n return this;\n },\n rotate: function rotate(radian, perform) {\n var matrix = this.attr('matrix');\n if (Math.abs(radian) > Math.PI * 2) {\n radian = radian / 180 * Math.PI;\n }\n mat3.rotate(matrix, matrix, radian);\n this.attr('matrix', matrix);\n if (arguments.length === 1 || perform) {\n this._performTransform();\n }\n return this;\n },\n\n /**\n * 绕起始点旋转\n * @param {Number} rotate 0~360\n */\n rotateAtStart: function rotateAtStart(rotate) {\n var x = this.attr('x');\n var y = this.attr('y');\n if (Math.abs(rotate) > Math.PI * 2) {\n rotate = rotate / 180 * Math.PI;\n }\n this.transform([['t', -x, -y], ['r', rotate], ['t', x, y]]);\n },\n scale: function scale(s1, s2, perform) {\n var matrix = this.attr('matrix');\n mat3.scale(matrix, matrix, [s1, s2]);\n this.attr('matrix', matrix);\n if (arguments.length === 2 || perform) {\n this._performTransform();\n }\n return this;\n },\n\n /**\n * 移动的到位置\n * @param {Number} x 移动到x\n * @param {Number} y 移动到y\n */\n move: function move(x, y) {\n var cx = this.get('x') || 0; // 当前的x\n var cy = this.get('y') || 0; // 当前的y\n this.translate(x - cx, y - cy);\n this.set('x', x);\n this.set('y', y);\n },\n _performTransform: function _performTransform() {\n var matrix = this.__attrs.matrix;\n var transform = [];\n for (var i = 0; i < 9; i += 3) {\n transform.push(matrix[i] + ',' + matrix[i + 1]);\n }\n var el = this.get('el');\n if (el) {\n el.setAttribute('transform', 'matrix(' + transform.join(',') + ')');\n }\n },\n transform: function transform(ts) {\n var self = this;\n var matrix = self.attr('matrix');\n Util.each(ts, function (t) {\n switch (t[0]) {\n case 't':\n self.translate(t[1], t[2], false);\n break;\n case 's':\n self.scale(t[1], t[2], false);\n break;\n case 'r':\n self.rotate(t[1], false);\n break;\n case 'm':\n self.attr('matrix', mat3.multiply([], matrix, t[1]));\n break;\n default:\n break;\n }\n });\n this._performTransform();\n return self;\n },\n setTransform: function setTransform(ts) {\n this.attr('matrix', [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n return this.transform(ts);\n },\n getMatrix: function getMatrix() {\n return this.attr('matrix');\n },\n setMatrix: function setMatrix(m) {\n this.attr('matrix', m);\n this._performTransform();\n this.clearTotalMatrix();\n return this;\n },\n apply: function apply(v, root) {\n var m = void 0;\n if (root) {\n m = this._getMatrixByRoot(root);\n } else {\n m = this.attr('matrix');\n }\n vec3.transformMat3(v, v, m);\n return this;\n },\n invert: function invert(v) {\n var m = this.attr('matrix');\n // 单精屏幕下大多数矩阵没变化\n if (isScale(m)) {\n v[0] /= m[0];\n v[1] /= m[4];\n } else {\n var inm = mat3.invert([], m);\n if (inm) {\n vec3.transformMat3(v, v, inm);\n }\n }\n return this;\n },\n resetTransform: function resetTransform(context) {\n var mo = this.attr('matrix');\n // 不改变时\n if (!isUnchanged(mo)) {\n context.transform(mo[0], mo[1], mo[3], mo[4], mo[6], mo[7]);\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/core/mixin/transform.js\n// module id = 73\n// module chunks = 0","import * as glMatrix from \"./common.js\";\n\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {mat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {mat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20;\n\n // Calculate the determinant\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n\n/**\n * Calculates the determinant of a mat3\n *\n * @param {mat3} a the source matrix\n * @returns {Number} determinant of a\n */\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the first operand\n * @param {mat3} b the second operand\n * @returns {mat3} out\n */\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to translate\n * @param {vec2} v vector to translate by\n * @returns {mat3} out\n */\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n};\n\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {vec2} v Translation vector\n * @returns {mat3} out\n */\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {vec2} v Scaling vector\n * @returns {mat3} out\n */\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat2d} a the matrix to copy\n * @returns {mat3} out\n **/\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n\n/**\n* Calculates a 3x3 matrix from the given quaternion\n*\n* @param {mat3} out mat3 receiving operation result\n* @param {quat} q Quaternion to create matrix from\n*\n* @returns {mat3} out\n*/\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n\n return out;\n}\n\n/**\n* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n*\n* @param {mat3} out mat3 receiving operation result\n* @param {mat4} a Mat4 to derive the normal matrix from\n*\n* @returns {mat3} out\n*/\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\n return out;\n}\n\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n\n/**\n * Returns a string representation of a mat3\n *\n * @param {mat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nexport function str(a) {\n return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' + a[8] + ')';\n}\n\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {mat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nexport function frob(a) {\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2));\n}\n\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the first operand\n * @param {mat3} b the second operand\n * @returns {mat3} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the first operand\n * @param {mat3} b the second operand\n * @returns {mat3} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {mat3} a the first operand\n * @param {mat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {mat3} a The first matrix.\n * @param {mat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {mat3} a The first matrix.\n * @param {mat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\nexport var sub = subtract;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/gl-matrix/src/gl-matrix/mat3.js\n// module id = 74\n// module chunks = 0","import * as glMatrix from \"./common.js\";\n\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n return out;\n}\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {vec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n\n/**\n * Calculates the length of a vec3\n *\n * @param {vec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the source vector\n * @returns {vec3} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to ceil\n * @returns {vec3} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to floor\n * @returns {vec3} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n\n/**\n * Math.round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to round\n * @returns {vec3} out\n */\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {vec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to negate\n * @returns {vec3} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to invert\n * @returns {vec3} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to normalize\n * @returns {vec3} out\n */\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n }\n return out;\n}\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {vec3} c the third operand\n * @param {vec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n\n return out;\n}\n\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {vec3} c the third operand\n * @param {vec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n\n return out;\n}\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\nexport function random(out, scale) {\n scale = scale || 1.0;\n\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {quat} q quaternion to transform with\n * @returns {vec3} out\n */\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2];\n // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x;\n // var uuv = vec3.cross([], qvec, uv);\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx;\n // vec3.scale(uv, uv, 2 * w);\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2;\n // vec3.scale(uuv, uuv, 2);\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2;\n // return vec3.add(out, a, vec3.add(out, uv, uuv));\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nexport function rotateX(out, a, b, c) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(c) - p[2] * Math.sin(c);\n r[2] = p[1] * Math.sin(c) + p[2] * Math.cos(c);\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n\n return out;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nexport function rotateY(out, a, b, c) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[2] * Math.sin(c) + p[0] * Math.cos(c);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(c) - p[0] * Math.sin(c);\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n\n return out;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nexport function rotateZ(out, a, b, c) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0] * Math.cos(c) - p[1] * Math.sin(c);\n r[1] = p[0] * Math.sin(c) + p[1] * Math.cos(c);\n r[2] = p[2];\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n\n return out;\n}\n\n/**\n * Get the angle between two 3D vectors\n * @param {vec3} a The first operand\n * @param {vec3} b The second operand\n * @returns {Number} The angle in radians\n */\nexport function angle(a, b) {\n var tempA = fromValues(a[0], a[1], a[2]);\n var tempB = fromValues(b[0], b[1], b[2]);\n\n normalize(tempA, tempA);\n normalize(tempB, tempB);\n\n var cosine = dot(tempA, tempB);\n\n if (cosine > 1.0) {\n return 0;\n } else if (cosine < -1.0) {\n return Math.PI;\n } else {\n return Math.acos(cosine);\n }\n}\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';\n}\n\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {vec3} a The first vector.\n * @param {vec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {vec3} a The first vector.\n * @param {vec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\nexport var sub = subtract;\n\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\nexport var div = divide;\n\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\nexport var dist = distance;\n\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\nexport var sqrDist = squaredDistance;\n\n/**\n * Alias for {@link vec3.length}\n * @function\n */\nexport var len = length;\n\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\nexport var sqrLen = squaredLength;\n\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport var forEach = function () {\n var vec = create();\n\n return function (a, stride, offset, count, fn, arg) {\n var i = void 0,\n l = void 0;\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];vec[1] = a[i + 1];vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];a[i + 1] = vec[1];a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/gl-matrix/src/gl-matrix/vec3.js\n// module id = 75\n// module chunks = 0","import * as glMatrix from \"./common.js\";\n\n/**\n * 2 Dimensional Vector\n * @module vec2\n */\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = 0;\n out[1] = 0;\n return out;\n}\n\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {vec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the source vector\n * @returns {vec2} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n\n/**\n * Math.ceil the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to ceil\n * @returns {vec2} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n\n/**\n * Math.floor the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to floor\n * @returns {vec2} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n\n/**\n * Math.round the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to round\n * @returns {vec2} out\n */\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n\n/**\n * Calculates the length of a vec2\n *\n * @param {vec2} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * Calculates the squared length of a vec2\n *\n * @param {vec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to negate\n * @returns {vec2} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to invert\n * @returns {vec2} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to normalize\n * @returns {vec2} out\n */\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n }\n return out;\n}\n\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec3} out\n */\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec2} out\n */\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec2} out\n */\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2} m matrix to transform with\n * @returns {vec2} out\n */\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2d} m matrix to transform with\n * @returns {vec2} out\n */\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat3} m matrix to transform with\n * @returns {vec2} out\n */\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec2} out\n */\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n\n/**\n * Rotate a 2D vector\n * @param {vec2} out The receiving vec2\n * @param {vec2} a The vec2 point to rotate\n * @param {vec2} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec2} out\n */\nexport function rotate(out, a, b, c) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(c),\n cosC = Math.cos(c);\n\n //perform rotation and translate to correct position\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n\n return out;\n}\n\n/**\n * Get the angle between two 2D vectors\n * @param {vec2} a The first operand\n * @param {vec2} b The second operand\n * @returns {Number} The angle in radians\n */\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1];\n\n var len1 = x1 * x1 + y1 * y1;\n if (len1 > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len1 = 1 / Math.sqrt(len1);\n }\n\n var len2 = x2 * x2 + y2 * y2;\n if (len2 > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len2 = 1 / Math.sqrt(len2);\n }\n\n var cosine = (x1 * x2 + y1 * y2) * len1 * len2;\n\n if (cosine > 1.0) {\n return 0;\n } else if (cosine < -1.0) {\n return Math.PI;\n } else {\n return Math.acos(cosine);\n }\n}\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec2} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return 'vec2(' + a[0] + ', ' + a[1] + ')';\n}\n\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {vec2} a The first vector.\n * @param {vec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {vec2} a The first vector.\n * @param {vec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n\n/**\n * Alias for {@link vec2.length}\n * @function\n */\nexport var len = length;\n\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\nexport var sub = subtract;\n\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\nexport var div = divide;\n\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\nexport var dist = distance;\n\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\nexport var sqrDist = squaredDistance;\n\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\nexport var sqrLen = squaredLength;\n\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport var forEach = function () {\n var vec = create();\n\n return function (a, stride, offset, count, fn, arg) {\n var i = void 0,\n l = void 0;\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/gl-matrix/src/gl-matrix/vec2.js\n// module id = 76\n// module chunks = 0","export { linear as easeLinear } from \"./src/linear\";\n\nexport { quadInOut as easeQuad, quadIn as easeQuadIn, quadOut as easeQuadOut, quadInOut as easeQuadInOut } from \"./src/quad\";\n\nexport { cubicInOut as easeCubic, cubicIn as easeCubicIn, cubicOut as easeCubicOut, cubicInOut as easeCubicInOut } from \"./src/cubic\";\n\nexport { polyInOut as easePoly, polyIn as easePolyIn, polyOut as easePolyOut, polyInOut as easePolyInOut } from \"./src/poly\";\n\nexport { sinInOut as easeSin, sinIn as easeSinIn, sinOut as easeSinOut, sinInOut as easeSinInOut } from \"./src/sin\";\n\nexport { expInOut as easeExp, expIn as easeExpIn, expOut as easeExpOut, expInOut as easeExpInOut } from \"./src/exp\";\n\nexport { circleInOut as easeCircle, circleIn as easeCircleIn, circleOut as easeCircleOut, circleInOut as easeCircleInOut } from \"./src/circle\";\n\nexport { bounceOut as easeBounce, bounceIn as easeBounceIn, bounceOut as easeBounceOut, bounceInOut as easeBounceInOut } from \"./src/bounce\";\n\nexport { backInOut as easeBack, backIn as easeBackIn, backOut as easeBackOut, backInOut as easeBackInOut } from \"./src/back\";\n\nexport { elasticOut as easeElastic, elasticIn as easeElasticIn, elasticOut as easeElasticOut, elasticInOut as easeElasticInOut } from \"./src/elastic\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/index.js\n// module id = 77\n// module chunks = 0","export function linear(t) {\n return +t;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/linear.js\n// module id = 78\n// module chunks = 0","export function quadIn(t) {\n return t * t;\n}\n\nexport function quadOut(t) {\n return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/quad.js\n// module id = 79\n// module chunks = 0","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/cubic.js\n// module id = 80\n// module chunks = 0","var exponent = 3;\n\nexport var polyIn = function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n}(exponent);\n\nexport var polyOut = function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n}(exponent);\n\nexport var polyInOut = function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n}(exponent);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/poly.js\n// module id = 81\n// module chunks = 0","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/sin.js\n// module id = 82\n// module chunks = 0","export function expIn(t) {\n return Math.pow(2, 10 * t - 10);\n}\n\nexport function expOut(t) {\n return 1 - Math.pow(2, -10 * t);\n}\n\nexport function expInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/exp.js\n// module id = 83\n// module chunks = 0","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/circle.js\n// module id = 84\n// module chunks = 0","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/bounce.js\n// module id = 85\n// module chunks = 0","var overshoot = 1.70158;\n\nexport var backIn = function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n}(overshoot);\n\nexport var backOut = function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n}(overshoot);\n\nexport var backInOut = function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n}(overshoot);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/back.js\n// module id = 86\n// module chunks = 0","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function (a) {\n return custom(a, p * tau);\n };\n elasticIn.period = function (p) {\n return custom(a, p);\n };\n\n return elasticIn;\n}(amplitude, period);\n\nexport var elasticOut = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function (a) {\n return custom(a, p * tau);\n };\n elasticOut.period = function (p) {\n return custom(a, p);\n };\n\n return elasticOut;\n}(amplitude, period);\n\nexport var elasticInOut = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function (a) {\n return custom(a, p * tau);\n };\n elasticInOut.period = function (p) {\n return custom(a, p);\n };\n\n return elasticInOut;\n}(amplitude, period);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-ease/src/elastic.js\n// module id = 87\n// module chunks = 0","export { now, timer, timerFlush } from \"./src/timer\";\n\nexport { default as timeout } from \"./src/timeout\";\n\nexport { default as interval } from \"./src/interval\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-timer/index.js\n// module id = 88\n// module chunks = 0","import { Timer } from \"./timer\";\n\nexport default function (callback, delay, time) {\n var t = new Timer();\n delay = delay == null ? 0 : +delay;\n t.restart(function (elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-timer/src/timeout.js\n// module id = 89\n// module chunks = 0","import { Timer, now } from \"./timer\";\n\nexport default function (callback, delay, time) {\n var t = new Timer(),\n total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n delay = +delay, time = time == null ? now() : +time;\n t.restart(function tick(elapsed) {\n elapsed += total;\n t.restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n return t;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-timer/src/interval.js\n// module id = 90\n// module chunks = 0","export { default as interpolate } from \"./src/value\";\nexport { default as interpolateArray } from \"./src/array\";\nexport { default as interpolateBasis } from \"./src/basis\";\nexport { default as interpolateBasisClosed } from \"./src/basisClosed\";\nexport { default as interpolateDate } from \"./src/date\";\nexport { default as interpolateNumber } from \"./src/number\";\nexport { default as interpolateObject } from \"./src/object\";\nexport { default as interpolateRound } from \"./src/round\";\nexport { default as interpolateString } from \"./src/string\";\nexport { interpolateTransformCss, interpolateTransformSvg } from \"./src/transform/index\";\nexport { default as interpolateZoom } from \"./src/zoom\";\nexport { default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed } from \"./src/rgb\";\nexport { default as interpolateHsl, hslLong as interpolateHslLong } from \"./src/hsl\";\nexport { default as interpolateLab } from \"./src/lab\";\nexport { default as interpolateHcl, hclLong as interpolateHclLong } from \"./src/hcl\";\nexport { default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong } from \"./src/cubehelix\";\nexport { default as quantize } from \"./src/quantize\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/index.js\n// module id = 91\n// module chunks = 0","import define, { extend } from \"./define\";\nimport { Color, rgbConvert, Rgb } from \"./color\";\nimport { deg2rad, rad2deg } from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn),\n x,\n z;\n if (r === g && g === b) x = z = y;else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(lrgb2rgb(3.1338561 * x - 1.6168667 * y - 0.4906146 * z), lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), lrgb2rgb(0.0719453 * x - 0.2289914 * y + 1.4052427 * z), this.opacity);\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function rgb() {\n return labConvert(this).rgb();\n }\n}));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-color/src/lab.js\n// module id = 92\n// module chunks = 0","import define, { extend } from \"./define\";\nimport { Color, rgbConvert, Rgb, darker as _darker, brighter as _brighter } from \"./color\";\nimport { deg2rad, rad2deg } from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)),\n // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);\n }\n}));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-color/src/cubehelix.js\n// module id = 93\n// module chunks = 0","export default function (a, b) {\n return a = +a, b -= a, function (t) {\n return Math.round(a + b * t);\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/round.js\n// module id = 94\n// module chunks = 0","import number from \"../number\";\nimport { parseCss, parseSvg } from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({ i: i - 4, x: number(xa, xb) }, { i: i - 2, x: number(ya, yb) });\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360;else if (b - a > 180) a += 360; // shortest path\n q.push({ i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b) });\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({ i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b) });\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({ i: i - 4, x: number(xa, xb) }, { i: i - 2, x: number(ya, yb) });\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function (a, b) {\n var s = [],\n // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function (t) {\n var i = -1,\n n = q.length,\n o;\n while (++i < n) {\n s[(o = q[i]).i] = o.x(t);\n }return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/transform/index.js\n// module id = 95\n// module chunks = 0","import decompose, { identity } from \"./decompose\";\n\nvar cssNode, cssRoot, cssView, svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/transform/parse.js\n// module id = 96\n// module chunks = 0","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function (a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/transform/decompose.js\n// module id = 97\n// module chunks = 0","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function (p0, p1) {\n var ux0 = p0[0],\n uy0 = p0[1],\n w0 = p0[2],\n ux1 = p1[0],\n uy1 = p1[1],\n w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function i(t) {\n return [ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S)];\n };\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function i(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];\n };\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/zoom.js\n// module id = 98\n// module chunks = 0","import { hsl as colorHsl } from \"d3-color\";\nimport color, { hue } from \"./color\";\n\nfunction hsl(hue) {\n return function (start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n };\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/hsl.js\n// module id = 99\n// module chunks = 0","import { lab as colorLab } from \"d3-color\";\nimport color from \"./color\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function (t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/lab.js\n// module id = 100\n// module chunks = 0","import { hcl as colorHcl } from \"d3-color\";\nimport color, { hue } from \"./color\";\n\nfunction hcl(hue) {\n return function (start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n };\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/hcl.js\n// module id = 101\n// module chunks = 0","import { cubehelix as colorCubehelix } from \"d3-color\";\nimport color, { hue } from \"./color\";\n\nfunction cubehelix(hue) {\n return function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n }(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/cubehelix.js\n// module id = 102\n// module chunks = 0","export default function (interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) {\n samples[i] = interpolator(i / (n - 1));\n }return samples;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/d3-interpolate/src/quantize.js\n// module id = 103\n// module chunks = 0","var Shape = require('../core/shape');\nShape.Rect = require('./rect');\nShape.Circle = require('./circle');\nShape.Ellipse = require('./ellipse');\nShape.Path = require('./path');\nShape.Text = require('./text');\nShape.Line = require('./line');\nShape.Image = require('./image');\nShape.Polygon = require('./polygon');\nShape.Marker = require('./marker');\nShape.Dom = require('./dom');\nShape.Fa = require('./fan');\n\nmodule.exports = Shape;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/shape/index.js\n// module id = 104\n// module chunks = 0","/**\n * Created by Elaine on 2018/5/9.\n */\nvar Util = require('../../util/index');\nvar Element = require('./element');\nvar Gradient = require('../defs/gradient');\nvar Shadow = require('../defs/shadow');\nvar Arrow = require('../defs/arrow');\nvar Clip = require('../defs/clip');\n\nvar Defs = function Defs(cfg) {\n Defs.superclass.constructor.call(this, cfg);\n this.set('children', []);\n};\n\nUtil.extend(Defs, Element);\n\nUtil.augment(Defs, {\n isGroup: false,\n canFill: false,\n canStroke: false,\n capture: false,\n visible: false,\n init: function init() {\n var el = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n var id = Util.uniqueId('defs_');\n el.setAttribute('id', id);\n this.set('el', el);\n this.set('children', []);\n },\n find: function find(type, attr) {\n var children = this.get('children');\n var result = null;\n for (var i = 0; i < children.length; i++) {\n if (children[i].match(type, attr)) {\n result = children[i].__cfg.id;\n break;\n }\n }\n return result;\n },\n findById: function findById(id) {\n var children = this.get('children');\n var flag = null;\n for (var i = 0; i < children.length; i++) {\n if (children[i].__cfg.id === id) {\n flag = children[i];\n break;\n }\n }\n return flag;\n },\n add: function add(items) {\n var el = this.get('el');\n var self = this;\n var children = this.get('children');\n if (Util.isArray(items)) {\n Util.each(items, function (item) {\n var parent = item.get('parent');\n if (parent) {\n parent.removeChild(item, false);\n self._setContext(item);\n }\n el.appendChild(item.get('el'));\n });\n children.push.apply(children, items);\n return self;\n }\n if (self.findById(items.get('id'))) {\n return self;\n }\n var parent = items.get('parent');\n if (parent) {\n parent.removeChild(items, false);\n }\n self._add(items);\n el.appendChild(items.get('el'));\n return self;\n },\n _add: function _add(item) {\n this.get('el').appendChild(item.__cfg.el);\n this.get('children').push(item);\n item.__cfg.parent = this;\n item.__cfg.defs = this;\n item.__cfg.canvas = this.__cfg.canvas;\n },\n addGradient: function addGradient(cfg) {\n var gradient = new Gradient(cfg);\n this._add(gradient);\n return gradient.__cfg.id;\n },\n addShadow: function addShadow(cfg) {\n var shadow = new Shadow(cfg);\n this._add(shadow);\n return shadow.__cfg.id;\n },\n addArrow: function addArrow(name, cfg, stroke) {\n var arrow = new Arrow(name, cfg, stroke);\n this._add(arrow);\n return arrow.__cfg.id;\n },\n addClip: function addClip(cfg) {\n var clip = new Clip(cfg);\n this._add(clip);\n return clip.__cfg.id;\n }\n});\n\nmodule.exports = Defs;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/core/defs.js\n// module id = 105\n// module chunks = 0","/**\n * Created by Elaine on 2018/5/9.\n */\nvar Util = require('../../util/index');\n\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/ig;\n\nfunction addStop(steps) {\n var arr = steps.match(regexColorStop);\n if (!arr) {\n return '';\n }\n var stops = '';\n arr.sort(function (a, b) {\n a = a.split(':');\n b = b.split(':');\n return Number(a[0]) - Number(b[0]);\n });\n Util.each(arr, function (item) {\n item = item.split(':');\n stops += '<stop offset=\"' + item[0] + '\" stop-color=\"' + item[1] + '\"></stop>';\n });\n return stops;\n}\n\nfunction parseLineGradient(color, el) {\n var arr = regexLG.exec(color);\n var angle = Util.mod(Util.toRadian(parseFloat(arr[1])), Math.PI * 2);\n var steps = arr[2];\n var start = void 0;\n var end = void 0;\n\n if (angle >= 0 && angle < 0.5 * Math.PI) {\n start = {\n x: 0,\n y: 0\n };\n end = {\n x: 1,\n y: 1\n };\n } else if (0.5 * Math.PI <= angle && angle < Math.PI) {\n start = {\n x: 1,\n y: 0\n };\n end = {\n x: 0,\n y: 1\n };\n } else if (Math.PI <= angle && angle < 1.5 * Math.PI) {\n start = {\n x: 1,\n y: 1\n };\n end = {\n x: 0,\n y: 0\n };\n } else {\n start = {\n x: 0,\n y: 1\n };\n end = {\n x: 1,\n y: 0\n };\n }\n\n var tanTheta = Math.tan(angle);\n var tanTheta2 = tanTheta * tanTheta;\n\n var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n var y = tanTheta * (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.y;\n el.setAttribute('x1', start.x);\n el.setAttribute('y1', start.y);\n el.setAttribute('x2', x);\n el.setAttribute('y2', y);\n el.innerHTML = addStop(steps);\n}\n\nfunction parseRadialGradient(color, self) {\n var arr = regexRG.exec(color);\n var cx = parseFloat(arr[1]);\n var cy = parseFloat(arr[2]);\n var r = parseFloat(arr[3]);\n var steps = arr[4];\n self.setAttribute('cx', cx);\n self.setAttribute('cy', cy);\n self.setAttribute('r', r);\n self.innerHTML = addStop(steps);\n}\n\nvar Gradient = function Gradient(cfg) {\n var el = null;\n var id = Util.uniqueId('gradient_');\n if (cfg.toLowerCase().startsWith('l')) {\n el = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient');\n parseLineGradient(cfg, el);\n } else {\n el = document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient');\n parseRadialGradient(cfg, el);\n }\n el.setAttribute('id', id);\n this.__cfg = { el: el, id: id };\n this.__attrs = { config: cfg };\n return this;\n};\n\nUtil.augment(Gradient, {\n type: 'gradient',\n match: function match(type, attr) {\n return this.type === type && this.__attrs.config === attr;\n }\n});\n\nmodule.exports = Gradient;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/defs/gradient.js\n// module id = 106\n// module chunks = 0","/**\n * Created by Elaine on 2018/5/10.\n */\nvar Util = require('../../util/index');\n\nvar ATTR_MAP = {\n shadowColor: 'color',\n shadowOpacity: 'opacity',\n shadowBlur: 'blur',\n shadowOffsetX: 'dx',\n shadowOffsetY: 'dy'\n};\n\nfunction parseShadow(config, el) {\n var child = '<feDropShadow \\n dx=\"' + config.dx + '\" \\n dy=\"' + config.dy + '\" \\n stdDeviation=\"' + (config.blur ? config.blur / 10 : 0) + '\"\\n flood-color=\"' + (config.color ? config.color : '#000') + '\"\\n flood-opacity=\"' + (config.opacity ? config.opacity : 1) + '\"\\n />';\n el.innerHTML = child;\n}\n\nvar Shadow = function Shadow(cfg) {\n var el = document.createElementNS('http://www.w3.org/2000/svg', 'filter');\n var id = Util.uniqueId('filter_');\n el.setAttribute('id', id);\n parseShadow(cfg, el);\n this.__cfg = { el: el, id: id };\n this.__attrs = { config: cfg };\n return this;\n};\nUtil.augment(Shadow, {\n type: 'filter',\n match: function match(type, cfg) {\n if (this.type !== type) {\n return false;\n }\n var flag = false;\n var config = this.__attrs.config;\n Util.each(Object.keys(config), function (attr) {\n if (!flag) {\n flag = config[attr] === cfg[attr];\n }\n });\n return flag;\n },\n update: function update(name, value) {\n var config = this.__attrs.config;\n config[ATTR_MAP[name]] = value;\n parseShadow(config, this.__cfg.el);\n return this;\n }\n});\n\nmodule.exports = Shadow;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/defs/shadow.js\n// module id = 107\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Created by Elaine on 2018/5/11.\n */\nvar Util = require('../../util/index');\n\nvar DEFAULT_PATH = {\n 'marker-start': 'M6,0 L0,3 L6,6 L3,3Z',\n 'marker-end': 'M0,0 L6,3 L0,6 L3,3Z'\n};\n\nfunction setDefaultPath(parent, name, stroke) {\n var el = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n el.setAttribute('d', DEFAULT_PATH[name]);\n el.setAttribute('stroke', 'none');\n el.setAttribute('fill', stroke || '#000');\n parent.appendChild(el);\n parent.setAttribute('refX', 3);\n parent.setAttribute('refY', 3);\n parent.setAttribute('markerWidth', 16);\n parent.setAttribute('markerHeight', 16);\n parent.setAttribute('orient', 'auto');\n return el;\n}\n\nfunction setMarker(shape, parent, name, stroke) {\n if (!shape) {\n return setDefaultPath(parent, name);\n }\n if (shape.type !== 'marker') {\n throw new TypeError('the shape of an arrow should be an instance of Marker');\n }\n shape.attr({ stroke: 'none', fill: stroke });\n parent.append(shape.get('el'));\n var width = shape.__attrs.x;\n var height = shape.__attrs.y;\n parent.setAttribute('refX', width);\n parent.setAttribute('refY', height);\n parent.setAttribute('markerWidth', width * 2);\n parent.setAttribute('markerHeight', height * 2);\n parent.setAttribute('orient', 'auto');\n return shape;\n}\n\nvar Arrow = function Arrow(name, cfg, stroke) {\n var el = document.createElementNS('http://www.w3.org/2000/svg', 'marker');\n var id = Util.uniqueId('marker_');\n el.setAttribute('id', id);\n this.__cfg = { el: el, id: id, stroke: stroke || '#000' };\n this.__cfg[name] = true;\n var child = null;\n if (typeof cfg === 'boolean' && cfg) {\n child = setDefaultPath(el, name, stroke);\n this._setChild(child, true);\n } else if ((typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) === 'object') {\n child = setMarker(cfg, el, name, stroke);\n this._setChild(child, false);\n }\n this.__attrs = { config: cfg };\n return this;\n};\n\nUtil.augment(Arrow, {\n type: 'arrow',\n match: function match(type, attr) {\n if (!this.__cfg[type]) {\n return false;\n }\n if (_typeof(attr.value) === 'object') {\n return false;\n }\n if (attr.stroke !== '#000') {\n return false;\n }\n if (typeof attr.value === 'boolean' && !this.__cfg.default) {\n return false;\n }\n return true;\n },\n _setChild: function _setChild(child, isDefault) {\n this.__cfg.child = child;\n this.__cfg.default = isDefault;\n },\n update: function update(fill) {\n var child = this.__cfg.child;\n this.__cfg.default = false;\n if (child.attr) {\n child.attr('fill', fill);\n } else {\n child.setAttribute('fill', fill);\n }\n }\n});\n\nmodule.exports = Arrow;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/defs/arrow.js\n// module id = 108\n// module chunks = 0","/**\n * Created by Elaine on 2018/5/14.\n */\nvar Util = require('../../util/index');\n\nvar Clip = function Clip(cfg) {\n var el = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');\n var id = Util.uniqueId('clip_');\n if (cfg.get('el')) {\n el.appendChild(cfg.get('el'));\n } else if (Util.isString(cfg.nodeName)) {\n el.appendChild(cfg);\n } else {\n throw 'clip element should be a instance of Shape or a SVG node';\n }\n el.setAttribute('id', id);\n this.__cfg = { el: el, id: id };\n this.__attrs = { config: cfg };\n return this;\n};\n\nUtil.augment(Clip, {\n type: 'clip',\n match: function match() {\n return false;\n }\n});\n\nmodule.exports = Clip;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/svg/defs/clip.js\n// module id = 109\n// module chunks = 0","module.exports = {\n Canvas: require('./canvas'),\n Group: require('./core/group'),\n Shape: require('./core/shape'),\n Rect: require('./shape/rect'),\n Circle: require('./shape/circle'),\n Ellipse: require('./shape/ellipse'),\n Path: require('./shape/path'),\n Text: require('./shape/text'),\n Line: require('./shape/line'),\n Image: require('./shape/image'),\n Polygon: require('./shape/polygon'),\n Polyline: require('./shape/polyline'),\n Arc: require('./shape/arc'),\n Fan: require('./shape/fan'),\n Cubic: require('./shape/cubic'),\n Quadratic: require('./shape/quadratic'),\n Marker: require('./shape/marker'),\n PathSegment: require('./shape/util/path-segment'),\n Event: require('./event')\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/index.js\n// module id = 110\n// module chunks = 0","var Util = require('../util/index');\nvar Event = require('./event');\nvar Group = require('./core/group');\n\nvar Canvas = function Canvas(cfg) {\n Canvas.superclass.constructor.call(this, cfg);\n};\n\nCanvas.CFG = {\n eventEnable: true,\n /**\n * 像素宽度\n * @type {Number}\n */\n width: null,\n /**\n * 像素高度\n * @type {Number}\n */\n height: null,\n /**\n * 画布宽度\n * @type {Number}\n */\n widthCanvas: null,\n /**\n * 画布高度\n * @type {Number}\n */\n heightCanvas: null,\n /**\n * CSS宽\n * @type {String}\n */\n widthStyle: null,\n /**\n * CSS高\n * @type {String}\n */\n heightStyle: null,\n /**\n * 容器DOM\n * @type {Object}\n */\n containerDOM: null,\n /**\n * 当前Canvas的DOM\n * @type {Object}\n */\n canvasDOM: null,\n /**\n * 屏幕像素比\n * @type {Number}\n */\n pixelRatio: null\n};\n\nUtil.extend(Canvas, Group);\n\nUtil.augment(Canvas, {\n init: function init() {\n Canvas.superclass.init.call(this);\n this._setGlobalParam();\n this._setDOM();\n this._setInitSize();\n this._setCanvas();\n this._scale();\n if (this.get('eventEnable')) {\n this._registEvents();\n }\n },\n getEmitter: function getEmitter(element, event) {\n if (element) {\n if (Util.isEmpty(element._getEvents())) {\n var parent = element.get('parent');\n if (parent && !event.propagationStopped) {\n return this.getEmitter(parent, event);\n }\n } else {\n return element;\n }\n }\n },\n _getEventObj: function _getEventObj(type, e, point, target) {\n var event = new Event(type, e, true, true);\n event.x = point.x;\n event.y = point.y;\n event.clientX = e.clientX;\n event.clientY = e.clientY;\n event.currentTarget = target;\n event.target = target;\n return event;\n },\n _triggerEvent: function _triggerEvent(type, e) {\n var point = this.getPointByClient(e.clientX, e.clientY);\n var shape = this.getShape(point.x, point.y);\n var emitObj = void 0;\n if (type === 'mousemove') {\n var preShape = this.get('preShape');\n if (preShape && preShape !== shape) {\n var mouseleave = this._getEventObj('mouseleave', e, point, preShape);\n emitObj = this.getEmitter(preShape, e);\n emitObj && emitObj.emit('mouseleave', mouseleave);\n }\n\n if (shape) {\n var mousemove = this._getEventObj('mousemove', e, point, shape);\n emitObj = this.getEmitter(shape, e);\n emitObj && emitObj.emit('mousemove', mousemove);\n\n if (preShape !== shape) {\n var mouseenter = this._getEventObj('mouseenter', e, point, shape);\n emitObj && emitObj.emit('mouseenter', mouseenter, e);\n }\n } else {\n var canvasmousemove = this._getEventObj('mousemove', e, point, this);\n this.emit('mousemove', canvasmousemove);\n }\n\n this.set('preShape', shape);\n } else {\n var event = this._getEventObj(type, e, point, shape || this);\n emitObj = this.getEmitter(shape, e);\n if (emitObj && emitObj !== this) {\n emitObj.emit(type, event);\n }\n this.emit(type, event);\n }\n\n var el = this.get('el');\n if (shape && !shape.get('destroyed')) {\n el.style.cursor = shape.attr('cursor') || 'default';\n }\n },\n _registEvents: function _registEvents() {\n var self = this;\n var el = self.get('el');\n var events = ['mouseout', 'mouseover', 'mousemove', 'mousedown', 'mouseup', 'click', 'dblclick'];\n\n Util.each(events, function (event) {\n el.addEventListener(event, function (e) {\n self._triggerEvent(event, e);\n }, false);\n });\n el.addEventListener('touchstart', function (e) {\n if (!Util.isEmpty(e.touches)) {\n self._triggerEvent('touchstart', e.touches[0]);\n }\n }, false);\n\n el.addEventListener('touchmove', function (e) {\n if (!Util.isEmpty(e.touches)) {\n self._triggerEvent('touchmove', e.touches[0]);\n }\n }, false);\n\n el.addEventListener('touchend', function (e) {\n if (!Util.isEmpty(e.changedTouches)) {\n self._triggerEvent('touchend', e.changedTouches[0]);\n }\n }, false);\n },\n _scale: function _scale() {\n var pixelRatio = this.get('pixelRatio');\n this.scale(pixelRatio, pixelRatio);\n },\n _setCanvas: function _setCanvas() {\n var canvasDOM = this.get('canvasDOM');\n this.set('el', canvasDOM);\n this.set('context', canvasDOM.getContext('2d'));\n this.set('canvas', this);\n },\n _setGlobalParam: function _setGlobalParam() {\n var pixelRatio = this.get('pixelRatio');\n if (!pixelRatio) {\n this.set('pixelRatio', Util.getRatio());\n }\n return;\n },\n _setDOM: function _setDOM() {\n this._setContainer();\n this._setLayer();\n },\n _setContainer: function _setContainer() {\n var containerId = this.get('containerId');\n var containerDOM = this.get('containerDOM');\n if (!containerDOM) {\n containerDOM = document.getElementById(containerId);\n this.set('containerDOM', containerDOM);\n }\n Util.modifyCSS(containerDOM, {\n position: 'relative'\n });\n },\n _setLayer: function _setLayer() {\n var containerDOM = this.get('containerDOM');\n var canvasId = Util.uniqueId('canvas_');\n if (containerDOM) {\n var canvasDOM = Util.createDom('<canvas id=\"' + canvasId + '\"></canvas>');\n containerDOM.appendChild(canvasDOM);\n this.set('canvasDOM', canvasDOM);\n }\n },\n _setInitSize: function _setInitSize() {\n this.changeSize(this.get('width'), this.get('height'));\n },\n _resize: function _resize() {\n var canvasDOM = this.get('canvasDOM');\n var widthCanvas = this.get('widthCanvas');\n var heightCanvas = this.get('heightCanvas');\n var widthStyle = this.get('widthStyle');\n var heightStyle = this.get('heightStyle');\n\n canvasDOM.style.width = widthStyle;\n canvasDOM.style.height = heightStyle;\n canvasDOM.setAttribute('width', widthCanvas);\n canvasDOM.setAttribute('height', heightCanvas);\n },\n getWidth: function getWidth() {\n var pixelRatio = this.get('pixelRatio');\n var width = this.get('width');\n return width * pixelRatio;\n },\n getHeight: function getHeight() {\n var pixelRatio = this.get('pixelRatio');\n var height = this.get('height');\n return height * pixelRatio;\n },\n changeSize: function changeSize(width, height) {\n var pixelRatio = this.get('pixelRatio');\n var widthCanvas = width * pixelRatio;\n var heightCanvas = height * pixelRatio;\n\n this.set('widthCanvas', widthCanvas);\n this.set('heightCanvas', heightCanvas);\n this.set('widthStyle', width + 'px');\n this.set('heightStyle', height + 'px');\n this.set('width', width);\n this.set('height', height);\n this._resize();\n },\n\n /**\n * 将窗口坐标转变成 canvas 坐标\n * @param {Number} clientX 窗口x坐标\n * @param {Number} clientY 窗口y坐标\n * @return {Object} canvas坐标\n */\n getPointByClient: function getPointByClient(clientX, clientY) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n var width = bbox.right - bbox.left;\n var height = bbox.bottom - bbox.top;\n return {\n x: (clientX - bbox.left) * (el.width / width),\n y: (clientY - bbox.top) * (el.height / height)\n };\n },\n getClientByPoint: function getClientByPoint(x, y) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n var width = bbox.right - bbox.left;\n var height = bbox.bottom - bbox.top;\n return {\n clientX: x / (el.width / width) + bbox.left,\n clientY: y / (el.height / height) + bbox.top\n };\n },\n beforeDraw: function beforeDraw() {\n var context = this.get('context');\n var el = this.get('el');\n context && context.clearRect(0, 0, el.width, el.height);\n },\n _beginDraw: function _beginDraw() {\n this.setSilent('toDraw', true);\n },\n _endDraw: function _endDraw() {\n this.setSilent('toDraw', false);\n },\n draw: function draw() {\n var self = this;\n function drawInner() {\n self.setSilent('animateHandler', Util.requestAnimationFrame(function () {\n self.setSilent('animateHandler', undefined);\n if (self.get('toDraw')) {\n drawInner();\n }\n }));\n self.beforeDraw();\n try {\n var context = self.get('context');\n Canvas.superclass.draw.call(self, context);\n // self._drawCanvas();\n } catch (ev) {\n // 绘制时异常,中断重绘\n console.warn('error in draw canvas, detail as:');\n console.warn(ev);\n self._endDraw();\n }\n self._endDraw();\n }\n\n if (self.get('destroyed')) {\n return;\n }\n if (self.get('animateHandler')) {\n this._beginDraw();\n } else {\n drawInner();\n }\n },\n destroy: function destroy() {\n var containerDOM = this.get('containerDOM');\n var canvasDOM = this.get('canvasDOM');\n if (canvasDOM && containerDOM) {\n containerDOM.removeChild(canvasDOM);\n }\n Canvas.superclass.destroy.call(this);\n }\n});\n\nmodule.exports = Canvas;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/canvas.js\n// module id = 111\n// module chunks = 0","var Util = require('../../../util/index');\n\nvar ALIAS_ATTRS = ['strokeStyle', 'fillStyle', 'globalAlpha'];\nvar CLIP_SHAPES = ['circle', 'ellipse', 'fan', 'polygon', 'rect', 'path'];\nvar CAPITALIZED_ATTRS_MAP = {\n r: 'R',\n opacity: 'Opacity',\n lineWidth: 'LineWidth',\n clip: 'Clip',\n stroke: 'Stroke',\n fill: 'Fill',\n strokeOpacity: 'Stroke',\n fillOpacity: 'Fill',\n x: 'X',\n y: 'Y',\n rx: 'Rx',\n ry: 'Ry',\n re: 'Re',\n rs: 'Rs',\n width: 'Width',\n height: 'Height',\n img: 'Img',\n x1: 'X1',\n x2: 'X2',\n y1: 'Y1',\n y2: 'Y2',\n points: 'Points',\n p1: 'P1',\n p2: 'P2',\n p3: 'P3',\n p4: 'P4',\n text: 'Text',\n radius: 'Radius',\n textAlign: 'TextAlign',\n textBaseline: 'TextBaseline',\n font: 'Font',\n fontSize: 'FontSize',\n fontStyle: 'FontStyle',\n fontVariant: 'FontVariant',\n fontWeight: 'FontWeight',\n fontFamily: 'FontFamily',\n clockwise: 'Clockwise',\n startAngle: 'StartAngle',\n endAngle: 'EndAngle',\n path: 'Path'\n};\nvar ALIAS_ATTRS_MAP = {\n stroke: 'strokeStyle',\n fill: 'fillStyle',\n opacity: 'globalAlpha'\n};\n\nmodule.exports = {\n canFill: false,\n canStroke: false,\n initAttrs: function initAttrs(attrs) {\n this.__attrs = {\n opacity: 1,\n fillOpacity: 1,\n strokeOpacity: 1\n };\n this.attr(Util.assign(this.getDefaultAttrs(), attrs));\n return this;\n },\n getDefaultAttrs: function getDefaultAttrs() {\n return {};\n },\n\n /**\n * 设置或者设置属性,有以下 4 种情形:\n * - name 不存在, 则返回属性集合\n * - name 为字符串,value 为空,获取属性值\n * - name 为字符串,value 不为空,设置属性值,返回 this\n * - name 为键值对,value 为空,设置属性值\n *\n * @param {String | Object} name 属性名\n * @param {*} value 属性值\n * @return {*} 属性值\n */\n attr: function attr(name, value) {\n var self = this;\n if (arguments.length === 0) {\n return self.__attrs;\n }\n\n if (Util.isObject(name)) {\n for (var k in name) {\n if (ALIAS_ATTRS.indexOf(k) === -1) {\n var v = name[k];\n self._setAttr(k, v);\n }\n }\n if (self._afterSetAttrAll) {\n self._afterSetAttrAll(name);\n }\n // self.setSilent('box', null);\n self.clearBBox();\n return self;\n }\n if (arguments.length === 2) {\n if (self._setAttr(name, value) !== false) {\n var m = '_afterSetAttr' + CAPITALIZED_ATTRS_MAP[name];\n if (self[m]) {\n self[m](value);\n }\n }\n // self.setSilent('box', null);\n self.clearBBox();\n return self;\n }\n return self._getAttr(name);\n },\n clearBBox: function clearBBox() {\n this.setSilent('box', null);\n },\n _afterSetAttrAll: function _afterSetAttrAll() {},\n\n // 属性获取触发函数\n _getAttr: function _getAttr(name) {\n return this.__attrs[name];\n },\n\n // 属性设置触发函数\n _setAttr: function _setAttr(name, value) {\n var self = this;\n if (name === 'clip') {\n self._setAttrClip(value);\n self.__attrs.clip = value;\n } else if (name === 'transform') {\n self._setAttrTrans(value);\n } else {\n self.__attrs[name] = value;\n var alias = ALIAS_ATTRS_MAP[name];\n if (alias) {\n self.__attrs[alias] = value;\n }\n }\n return self;\n },\n hasFill: function hasFill() {\n return this.canFill && this.__attrs.fillStyle;\n },\n hasStroke: function hasStroke() {\n return this.canStroke && this.__attrs.strokeStyle;\n },\n\n // 设置透明度\n _setAttrOpacity: function _setAttrOpacity(v) {\n this.__attrs.globalAlpha = v;\n return v;\n },\n _setAttrClip: function _setAttrClip(clip) {\n var self = this;\n if (clip && CLIP_SHAPES.indexOf(clip.type) > -1) {\n if (clip.get('canvas') === null) {\n clip = Util.clone(clip);\n }\n clip.set('parent', self.get('parent'));\n clip.set('canvas', self.get('canvas'));\n clip.set('context', self.get('context'));\n clip.inside = function (x, y) {\n var v = [x, y, 1];\n clip.invert(v, self.get('canvas')); // 已经在外面转换\n return clip._isPointInFill(v[0], v[1]);\n };\n return clip;\n }\n return null;\n },\n _setAttrTrans: function _setAttrTrans(value) {\n return this.transform(value);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/core/mixin/attribute.js\n// module id = 112\n// module chunks = 0","var Util = require('../index');\nvar mat3 = require('../matrix').mat3;\nvar vec3 = require('../matrix').vec3;\n\n// 是否未改变\nfunction isUnchanged(m) {\n return m[0] === 1 && m[1] === 0 && m[3] === 0 && m[4] === 1 && m[6] === 0 && m[7] === 0;\n}\n\n// 是否仅仅是scale\nfunction isScale(m) {\n return m[1] === 0 && m[3] === 0 && m[6] === 0 && m[7] === 0;\n}\n\nfunction multiple(m1, m2) {\n if (!isUnchanged(m2)) {\n if (isScale(m2)) {\n m1[0] *= m2[0];\n m1[4] *= m2[4];\n } else {\n mat3.multiply(m1, m1, m2);\n }\n }\n}\n\nmodule.exports = {\n initTransform: function initTransform() {\n this.attr('matrix', [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n },\n translate: function translate(tx, ty) {\n var matrix = this.attr('matrix');\n mat3.translate(matrix, matrix, [tx, ty]);\n this.clearTotalMatrix();\n this.attr('matrix', matrix);\n return this;\n },\n rotate: function rotate(radian) {\n var matrix = this.attr('matrix');\n mat3.rotate(matrix, matrix, radian);\n this.clearTotalMatrix();\n this.attr('matrix', matrix);\n return this;\n },\n scale: function scale(s1, s2) {\n var matrix = this.attr('matrix');\n mat3.scale(matrix, matrix, [s1, s2]);\n this.clearTotalMatrix();\n this.attr('matrix', matrix);\n return this;\n },\n\n /**\n * 绕起始点旋转\n * @param {Number} rotate 0~360\n */\n rotateAtStart: function rotateAtStart(rotate) {\n var x = this.attr('x');\n var y = this.attr('y');\n if (Math.abs(rotate) > Math.PI * 2) {\n rotate = rotate / 180 * Math.PI;\n }\n this.transform([['t', -x, -y], ['r', rotate], ['t', x, y]]);\n },\n\n /**\n * 移动的到位置\n * @param {Number} x 移动到x\n * @param {Number} y 移动到y\n */\n move: function move(x, y) {\n var cx = this.get('x') || 0; // 当前的x\n var cy = this.get('y') || 0; // 当前的y\n this.translate(x - cx, y - cy);\n this.set('x', x);\n this.set('y', y);\n },\n transform: function transform(ts) {\n var self = this;\n var matrix = self.attr('matrix');\n\n Util.each(ts, function (t) {\n switch (t[0]) {\n case 't':\n self.translate(t[1], t[2]);\n break;\n case 's':\n self.scale(t[1], t[2]);\n break;\n case 'r':\n self.rotate(t[1]);\n break;\n case 'm':\n self.attr('matrix', mat3.multiply([], matrix, t[1]));\n self.clearTotalMatrix();\n break;\n default:\n break;\n }\n });\n return self;\n },\n setTransform: function setTransform(ts) {\n this.attr('matrix', [1, 0, 0, 0, 1, 0, 0, 0, 1]);\n return this.transform(ts);\n },\n getMatrix: function getMatrix() {\n return this.attr('matrix');\n },\n setMatrix: function setMatrix(m) {\n this.attr('matrix', m);\n this.clearTotalMatrix();\n return this;\n },\n apply: function apply(v, root) {\n var m = void 0;\n if (root) {\n m = this._getMatrixByRoot(root);\n } else {\n m = this.attr('matrix');\n }\n vec3.transformMat3(v, v, m);\n return this;\n },\n\n // 获取到达指定根节点的矩阵\n _getMatrixByRoot: function _getMatrixByRoot(root) {\n var self = this;\n root = root || self;\n var parent = self;\n var parents = [];\n\n while (parent !== root) {\n parents.unshift(parent);\n parent = parent.get('parent');\n }\n parents.unshift(parent);\n\n var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n Util.each(parents, function (child) {\n mat3.multiply(m, child.attr('matrix'), m);\n });\n return m;\n },\n\n /**\n * 应用到当前元素上的总的矩阵\n * @return {Matrix} 矩阵\n */\n getTotalMatrix: function getTotalMatrix() {\n var m = this.__cfg.totalMatrix;\n if (!m) {\n m = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n var parent = this.__cfg.parent;\n if (parent) {\n var pm = parent.getTotalMatrix();\n multiple(m, pm);\n }\n\n multiple(m, this.attr('matrix'));\n this.__cfg.totalMatrix = m;\n }\n return m;\n },\n\n // 清除当前的矩阵\n clearTotalMatrix: function clearTotalMatrix() {\n // this.__cfg.totalMatrix = null;\n },\n invert: function invert(v) {\n var m = this.getTotalMatrix();\n // 单精屏幕下大多数矩阵没变化\n if (isScale(m)) {\n v[0] /= m[0];\n v[1] /= m[4];\n } else {\n var inm = mat3.invert([], m);\n if (inm) {\n vec3.transformMat3(v, v, inm);\n }\n }\n return this;\n },\n resetTransform: function resetTransform(context) {\n var mo = this.attr('matrix');\n // 不改变时\n if (!isUnchanged(mo)) {\n context.transform(mo[0], mo[1], mo[3], mo[4], mo[6], mo[7]);\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/util/mixin/transform.js\n// module id = 113\n// module chunks = 0","var Shape = require('../core/shape');\nShape.Rect = require('./rect');\nShape.Rect = require('./rect');\nShape.Circle = require('./circle');\nShape.Ellipse = require('./ellipse');\nShape.Path = require('./path');\nShape.Text = require('./text');\nShape.Line = require('./line');\nShape.Image = require('./image');\nShape.Polygon = require('./polygon');\nShape.Polyline = require('./polyline');\nShape.Arc = require('./arc');\nShape.Fan = require('./fan');\nShape.Cubic = require('./cubic');\nShape.Quadratic = require('./quadratic');\nShape.Marker = require('./marker');\n\nmodule.exports = Shape;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/index.js\n// module id = 114\n// module chunks = 0","module.exports = {\n xAt: function xAt(psi, rx, ry, cx, t) {\n return rx * Math.cos(psi) * Math.cos(t) - ry * Math.sin(psi) * Math.sin(t) + cx;\n },\n yAt: function yAt(psi, rx, ry, cy, t) {\n return rx * Math.sin(psi) * Math.cos(t) + ry * Math.cos(psi) * Math.sin(t) + cy;\n },\n xExtrema: function xExtrema(psi, rx, ry) {\n return Math.atan(-ry / rx * Math.tan(psi));\n },\n yExtrema: function yExtrema(psi, rx, ry) {\n return Math.atan(ry / (rx * Math.tan(psi)));\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/g/src/canvas/shape/math/ellipse.js\n// module id = 115\n// module chunks = 0","\nmodule.exports = {\n getWrapBehavior: require('./getWrapBehavior'),\n wrapBehavior: require('./wrapBehavior')\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/util/src/event/index.js\n// module id = 116\n// module chunks = 0","/**\n * 获取封装的事件\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\nfunction getWrapBehavior(obj, action) {\n return obj['_wrap_' + action];\n}\n\nmodule.exports = getWrapBehavior;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/util/src/event/getWrapBehavior.js\n// module id = 117\n// module chunks = 0","/**\n * 封装事件,便于使用上下文this,和便于解除事件时使用\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\nfunction wrapBehavior(obj, action) {\n if (obj['_wrap_' + action]) {\n return obj['_wrap_' + action];\n }\n var method = function method(e) {\n obj[action](e);\n };\n obj['_wrap_' + action] = method;\n return method;\n}\n\nmodule.exports = wrapBehavior;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@antv/util/src/event/wrapBehavior.js\n// module id = 118\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Util = require('@antv/util');\nvar Interaction = require('./base');\n// const G2 = require('../core.js');\n\nvar BRUSH_TYPES = ['X', 'Y', 'XY', 'POLYGON'];\nvar DEFAULT_TYPE = 'XY';\n\nvar Brush = function (_Interaction) {\n _inherits(Brush, _Interaction);\n\n Brush.prototype.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Interaction.prototype.getDefaultCfg.call(this);\n return Util.mix({}, cfg, {\n type: DEFAULT_TYPE,\n startPoint: null,\n brushing: false,\n dragging: false,\n brushShape: null,\n container: null,\n polygonPath: null,\n style: {\n fill: '#C5D4EB',\n opacity: 0.3,\n lineWidth: 1,\n stroke: '#82A6DD'\n },\n draggable: false,\n dragOffX: 0,\n dragOffY: 0,\n inPlot: true,\n xField: null,\n yField: null\n });\n };\n\n function Brush(cfg, view) {\n _classCallCheck(this, Brush);\n\n var _this = _possibleConstructorReturn(this, _Interaction.call(this, cfg, view));\n\n var me = _this;\n me.filter = !me.draggable;\n me.type = me.type.toUpperCase();\n me.chart = view;\n\n if (BRUSH_TYPES.indexOf(me.type) === -1) {\n me.type = DEFAULT_TYPE;\n }\n var canvas = me.canvas;\n if (canvas) {\n var plotRange = void 0;\n canvas.get('children').map(function (child) {\n if (child.get('type') === 'plotBack') {\n plotRange = child.get('plotRange');\n return false;\n }\n return child;\n });\n me.plot = {\n start: plotRange.bl,\n end: plotRange.tr\n };\n }\n if (view) {\n var coord = view.get('coord');\n me.plot = {\n start: coord.start,\n end: coord.end\n };\n var xScales = view._getScales('x');\n var yScales = view._getScales('y');\n me.xScale = me.xField ? xScales[me.xField] : view.getXScale();\n me.yScale = me.yField ? yScales[me.yField] : view.getYScales()[0];\n }\n return _this;\n }\n\n // onBurshstart() { }\n // onBrushmove() { }\n // onBrushend() {}\n // onDragstart() {}\n // onDragmove() {}\n // onDragend() {}\n\n Brush.prototype.start = function start(ev) {\n var me = this;\n var canvas = me.canvas,\n type = me.type,\n brushShape = me.brushShape;\n\n\n if (!type) return;\n\n var startPoint = { x: ev.offsetX, y: ev.offsetY };\n if (!startPoint.x) return;\n var isInPlot = me.plot && me.inPlot;\n var canvasDOM = canvas.get('canvasDOM');\n var pixelRatio = canvas.get('pixelRatio');\n\n if (me.selection) me.selection = null;\n\n if (me.draggable && brushShape && !brushShape.get('destroyed')) {\n // allow drag the brushShape\n if (brushShape.isHit(startPoint.x * pixelRatio, startPoint.y * pixelRatio)) {\n canvasDOM.style.cursor = 'move';\n me.selection = brushShape;\n me.dragging = true;\n if (type === 'X') {\n me.dragoffX = startPoint.x - brushShape.attr('x');\n me.dragoffY = 0;\n } else if (type === 'Y') {\n me.dragoffX = 0;\n me.dragoffY = startPoint.y - brushShape.attr('y');\n } else if (type === 'XY') {\n me.dragoffX = startPoint.x - brushShape.attr('x');\n me.dragoffY = startPoint.y - brushShape.attr('y');\n } else if (type === 'POLYGON') {\n var box = brushShape.getBBox();\n me.dragoffX = startPoint.x - box.minX;\n me.dragoffY = startPoint.y - box.minY;\n }\n\n if (isInPlot) {\n me.selection.attr('clip', canvas.addShape('rect', {\n attrs: {\n x: this.plot.start.x,\n y: this.plot.end.y,\n width: this.plot.end.x - this.plot.start.x,\n height: this.plot.start.y - this.plot.end.y,\n fill: '#fff',\n fillOpacity: 0\n }\n }));\n }\n me.onDragstart && me.onDragstart(ev);\n }\n me.prePoint = startPoint;\n }\n\n if (!me.dragging) {\n // brush start\n me.onBrushstart && me.onBrushstart(startPoint);\n var container = me.container;\n if (isInPlot) {\n var _me$plot = me.plot,\n start = _me$plot.start,\n end = _me$plot.end;\n\n if (startPoint.x < start.x || startPoint.x > end.x || startPoint.y < end.y || startPoint.y > start.y) return;\n }\n canvasDOM.style.cursor = 'crosshair';\n me.startPoint = startPoint;\n me.brushShape = null;\n me.brushing = true;\n\n if (!container) {\n container = canvas.addGroup({\n zIndex: 5 // upper\n });\n container.initTransform();\n } else {\n container.clear();\n }\n me.container = container;\n\n if (type === 'POLYGON') me.polygonPath = 'M ' + startPoint.x + ' ' + startPoint.y;\n }\n };\n\n Brush.prototype.process = function process(ev) {\n var me = this;\n var brushing = me.brushing,\n dragging = me.dragging,\n type = me.type,\n plot = me.plot,\n startPoint = me.startPoint,\n xScale = me.xScale,\n yScale = me.yScale,\n canvas = me.canvas;\n\n\n if (!brushing && !dragging) {\n return;\n }\n var currentPoint = {\n x: ev.offsetX,\n y: ev.offsetY\n };\n var canvasDOM = canvas.get('canvasDOM');\n\n if (brushing) {\n canvasDOM.style.cursor = 'crosshair';\n var start = plot.start,\n end = plot.end;\n\n var polygonPath = me.polygonPath;\n var brushShape = me.brushShape;\n var container = me.container;\n if (me.plot && me.inPlot) {\n currentPoint = me._limitCoordScope(currentPoint);\n }\n\n var rectStartX = void 0;\n var rectStartY = void 0;\n var rectWidth = void 0;\n var rectHeight = void 0;\n\n if (type === 'Y') {\n rectStartX = start.x;\n rectStartY = currentPoint.y >= startPoint.y ? startPoint.y : currentPoint.y;\n rectWidth = Math.abs(start.x - end.x);\n rectHeight = Math.abs(startPoint.y - currentPoint.y);\n } else if (type === 'X') {\n rectStartX = currentPoint.x >= startPoint.x ? startPoint.x : currentPoint.x;\n rectStartY = end.y;\n rectWidth = Math.abs(startPoint.x - currentPoint.x);\n rectHeight = Math.abs(end.y - start.y);\n } else if (type === 'XY') {\n if (currentPoint.x >= startPoint.x) {\n rectStartX = startPoint.x;\n rectStartY = currentPoint.y >= startPoint.y ? startPoint.y : currentPoint.y;\n } else {\n rectStartX = currentPoint.x;\n rectStartY = currentPoint.y >= startPoint.y ? startPoint.y : currentPoint.y;\n }\n rectWidth = Math.abs(startPoint.x - currentPoint.x);\n rectHeight = Math.abs(startPoint.y - currentPoint.y);\n } else if (type === 'POLYGON') {\n polygonPath += 'L ' + currentPoint.x + ' ' + currentPoint.y;\n me.polygonPath = polygonPath;\n if (!brushShape) {\n brushShape = container.addShape('path', {\n attrs: Util.mix(me.style, {\n path: polygonPath\n })\n });\n } else {\n !brushShape.get('destroyed') && brushShape.attr(Util.mix({}, brushShape.__attrs, {\n path: polygonPath\n }));\n }\n }\n if (type !== 'POLYGON') {\n if (!brushShape) {\n brushShape = container.addShape('rect', {\n attrs: Util.mix(me.style, {\n x: rectStartX,\n y: rectStartY,\n width: rectWidth,\n height: rectHeight\n })\n });\n } else {\n !brushShape.get('destroyed') && brushShape.attr(Util.mix({}, brushShape.__attrs, {\n x: rectStartX,\n y: rectStartY,\n width: rectWidth,\n height: rectHeight\n }));\n }\n }\n\n me.brushShape = brushShape;\n } else if (dragging) {\n canvasDOM.style.cursor = 'move';\n var selection = me.selection;\n if (selection && !selection.get('destroyed')) {\n if (type === 'POLYGON') {\n var prePoint = me.prePoint;\n me.selection.translate(currentPoint.x - prePoint.x, currentPoint.y - prePoint.y);\n } else {\n me.dragoffX && selection.attr('x', currentPoint.x - me.dragoffX);\n me.dragoffY && selection.attr('y', currentPoint.y - me.dragoffY);\n }\n }\n }\n\n me.prePoint = currentPoint;\n canvas.draw();\n\n var _me$_getSelected = me._getSelected(),\n data = _me$_getSelected.data,\n shapes = _me$_getSelected.shapes,\n xValues = _me$_getSelected.xValues,\n yValues = _me$_getSelected.yValues;\n\n var eventObj = {\n data: data,\n shapes: shapes,\n x: currentPoint.x,\n y: currentPoint.y\n };\n\n if (xScale) {\n eventObj[xScale.field] = xValues;\n }\n if (yScale) {\n eventObj[yScale.field] = yValues;\n }\n me.onDragmove && me.onDragmove(eventObj);\n me.onBrushmove && me.onBrushmove(eventObj);\n };\n\n Brush.prototype.end = function end(ev) {\n var me = this;\n var data = me.data,\n shapes = me.shapes,\n xValues = me.xValues,\n yValues = me.yValues,\n canvas = me.canvas,\n type = me.type,\n startPoint = me.startPoint,\n chart = me.chart,\n container = me.container,\n xScale = me.xScale,\n yScale = me.yScale;\n var offsetX = ev.offsetX,\n offsetY = ev.offsetY;\n\n var canvasDOM = canvas.get('canvasDOM');\n canvasDOM.style.cursor = 'default';\n\n if (Math.abs(startPoint.x - offsetX) <= 1 && Math.abs(startPoint.y - offsetY) <= 1) {\n // 防止点击事件\n me.brushing = false;\n me.dragging = false;\n return;\n }\n\n var eventObj = {\n data: data,\n shapes: shapes,\n x: offsetX,\n y: offsetY\n };\n if (xScale) {\n eventObj[xScale.field] = xValues;\n }\n if (yScale) {\n eventObj[yScale.field] = yValues;\n }\n\n if (me.dragging) {\n me.dragging = false;\n me.onDragend && me.onDragend(eventObj);\n } else if (me.brushing) {\n me.brushing = false;\n var brushShape = me.brushShape;\n var polygonPath = me.polygonPath;\n\n if (type === 'POLYGON') {\n polygonPath += 'z';\n\n brushShape && !brushShape.get('destroyed') && brushShape.attr(Util.mix({}, brushShape.__attrs, {\n path: polygonPath\n }));\n me.polygonPath = polygonPath;\n canvas.draw();\n }\n\n if (me.onBrushend) {\n me.onBrushend(eventObj);\n } else if (chart && me.filter) {\n container.clear(); // clear the brush\n // filter data\n if (type === 'X') {\n xScale && chart.filter(xScale.field, function (val) {\n return xValues.indexOf(val) > -1;\n });\n } else if (type === 'Y') {\n yScale && chart.filter(yScale.field, function (val) {\n return yValues.indexOf(val) > -1;\n });\n } else {\n xScale && chart.filter(xScale.field, function (val) {\n return xValues.indexOf(val) > -1;\n });\n yScale && chart.filter(yScale.field, function (val) {\n return yValues.indexOf(val) > -1;\n });\n }\n chart.repaint();\n }\n }\n };\n\n Brush.prototype.reset = function reset() {\n var me = this;\n var chart = me.chart,\n filter = me.filter;\n\n if (chart && filter) {\n chart.get('options').filters = {};\n chart.repaint();\n }\n };\n\n Brush.prototype._limitCoordScope = function _limitCoordScope(point) {\n var plot = this.plot;\n var start = plot.start,\n end = plot.end;\n\n\n if (point.x < start.x) {\n point.x = start.x;\n }\n if (point.x > end.x) {\n point.x = end.x;\n }\n if (point.y < end.y) {\n point.y = end.y;\n }\n if (point.y > start.y) {\n point.y = start.y;\n }\n return point;\n };\n\n Brush.prototype._getSelected = function _getSelected() {\n var me = this;\n var chart = me.chart,\n xScale = me.xScale,\n yScale = me.yScale,\n brushShape = me.brushShape,\n canvas = me.canvas;\n\n var pixelRatio = canvas.get('pixelRatio');\n var selectedShapes = [];\n var xValues = [];\n var yValues = [];\n var selectedData = [];\n if (chart) {\n var geoms = chart.get('geoms');\n geoms.map(function (geom) {\n var shapes = geom.getShapes();\n shapes.map(function (shape) {\n var shapeData = shape.get('origin');\n if (!Array.isArray(shapeData)) {\n // 线图、区域图等\n shapeData = [shapeData];\n }\n\n shapeData.map(function (each) {\n if (brushShape.isHit(each.x * pixelRatio, each.y * pixelRatio)) {\n selectedShapes.push(shape);\n var origin = each._origin;\n selectedData.push(origin);\n xScale && xValues.push(origin[xScale.field]);\n yScale && yValues.push(origin[yScale.field]);\n }\n return each;\n });\n\n return shape;\n });\n return geom;\n });\n }\n me.shapes = selectedShapes;\n me.xValues = xValues;\n me.yValues = yValues;\n me.data = selectedData;\n return {\n data: selectedData,\n xValues: xValues,\n yValues: yValues,\n shapes: selectedShapes\n };\n };\n\n return Brush;\n}(Interaction);\n\n// G2.registerInteraction('brush', Brush);\n// G2.registerInteraction('Brush', Brush);\n\nmodule.exports = Brush;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/brush.js\n// module id = 119\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Util = require('@antv/util');\nvar Interaction = require('./base');\n// const G2 = require('../core.js');\n\nvar DRAGGING_TYPES = ['X', 'Y', 'XY'];\nvar DEFAULT_TYPE = 'X';\n\nvar Drag = function (_Interaction) {\n _inherits(Drag, _Interaction);\n\n Drag.prototype.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Interaction.prototype.getDefaultCfg.call(this);\n return Util.mix({}, cfg, {\n type: DEFAULT_TYPE,\n stepRatio: 0.05,\n stepByField: {},\n originScaleDefsByField: {},\n previousPoint: null,\n isDragging: false\n });\n };\n\n function Drag(cfg, view) {\n _classCallCheck(this, Drag);\n\n var _this = _possibleConstructorReturn(this, _Interaction.call(this, cfg, view));\n\n var me = _this;\n me.type = me.type.toUpperCase();\n me.chart = view;\n\n var scales = view.getYScales();\n var xScale = view.getXScale();\n scales.push(xScale);\n var scaleController = view.get('scaleController');\n scales.forEach(function (scale) {\n var field = scale.field;\n var def = scaleController.defs[field];\n me.originScaleDefsByField[field] = Util.mix(def, {\n nice: !!def.nice\n });\n if (scale.isLinear) {\n me.stepByField[field] = (scale.max - scale.min) * me.stepRatio;\n }\n });\n\n if (DRAGGING_TYPES.indexOf(me.type) === -1) {\n me.type = DEFAULT_TYPE;\n }\n return _this;\n }\n\n // onDragstart() { }\n // onDrag() { }\n // onDragend() { }\n\n Drag.prototype._applyTranslate = function _applyTranslate(scale) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var me = this;\n var chart = me.chart;\n var min = scale.min,\n max = scale.max,\n field = scale.field;\n\n var range = max - min;\n chart.scale(field, {\n nice: false,\n min: min - offset * range,\n max: max - offset * range\n });\n };\n\n Drag.prototype.start = function start(ev) {\n var me = this;\n var chart = me.chart,\n canvas = me.canvas;\n\n var canvasDOM = canvas.get('canvasDOM');\n canvasDOM.style.cursor = 'pointer';\n var coord = chart.get('coord');\n me.isDragging = true;\n me.previousPoint = coord.invertPoint(ev);\n };\n\n Drag.prototype.process = function process(ev) {\n var me = this;\n if (me.isDragging) {\n var chart = me.chart,\n type = me.type,\n canvas = me.canvas;\n\n var canvasDOM = canvas.get('canvasDOM');\n canvasDOM.style.cursor = 'move';\n var coord = chart.get('coord');\n var previousPoint = me.previousPoint;\n var currentPoint = coord.invertPoint(ev);\n if (type.indexOf('X') > -1) {\n me._applyTranslate(chart.getXScale(), currentPoint.x - previousPoint.x);\n }\n if (type.indexOf('Y') > -1) {\n var yScales = chart.getYScales();\n yScales.forEach(function (yScale) {\n me._applyTranslate(yScale, currentPoint.y - previousPoint.y);\n });\n }\n me.previousPoint = currentPoint;\n chart.repaint();\n }\n };\n\n Drag.prototype.end = function end() {\n var me = this;\n me.isDragging = false;\n var canvas = me.canvas;\n\n var canvasDOM = canvas.get('canvasDOM');\n canvasDOM.style.cursor = 'default';\n };\n\n Drag.prototype.reset = function reset() {\n var me = this;\n var view = me.view,\n originScaleDefsByField = me.originScaleDefsByField;\n\n var scales = view.getYScales();\n var xScale = view.getXScale();\n scales.push(xScale);\n scales.forEach(function (scale) {\n if (scale.isLinear) {\n var field = scale.field;\n view.scale(field, originScaleDefsByField[field]);\n }\n });\n view.repaint();\n };\n\n return Drag;\n}(Interaction);\n\n// G2.registerInteraction('drag', Drag);\n// G2.registerInteraction('Drag', Drag);\n\nmodule.exports = Drag;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/drag.js\n// module id = 120\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Util = require('@antv/util');\nvar Interaction = require('./base');\n// const G2 = require('../core.js');\n\nvar ZOOMING_TYPES = ['X', 'Y', 'XY'];\nvar DEFAULT_TYPE = 'X';\n\n// TODO zoom with center point\n\nvar Zoom = function (_Interaction) {\n _inherits(Zoom, _Interaction);\n\n Zoom.prototype.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Interaction.prototype.getDefaultCfg.call(this);\n return Util.mix({}, cfg, {\n processEvent: 'mousewheel',\n type: DEFAULT_TYPE,\n stepRatio: 0.05,\n stepByField: {},\n originScaleDefsByField: {}\n });\n };\n\n function Zoom(cfg, view) {\n _classCallCheck(this, Zoom);\n\n var _this = _possibleConstructorReturn(this, _Interaction.call(this, cfg, view));\n\n var me = _this;\n me.chart = view;\n me.type = me.type.toUpperCase();\n\n var scales = view.getYScales();\n var xScale = view.getXScale();\n scales.push(xScale);\n var scaleController = view.get('scaleController');\n scales.forEach(function (scale) {\n var field = scale.field;\n var def = scaleController.defs[field] || {};\n me.originScaleDefsByField[field] = Util.mix(def, {\n nice: !!def.nice\n });\n if (scale.isLinear) {\n me.stepByField[field] = (scale.max - scale.min) * me.stepRatio;\n }\n });\n\n if (ZOOMING_TYPES.indexOf(me.type) === -1) {\n me.type = DEFAULT_TYPE;\n }\n return _this;\n }\n\n // onZoom() { }\n // onZoomin() { }\n // onZoomout() { }\n\n Zoom.prototype._applyScale = function _applyScale(scale, delta) {\n var minOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n var me = this;\n var chart = me.chart,\n stepByField = me.stepByField;\n\n if (scale.isLinear) {\n var min = scale.min,\n max = scale.max,\n field = scale.field;\n\n var maxOffset = 1 - minOffset;\n var step = stepByField[field] * delta;\n var newMin = min + step * minOffset;\n var newMax = max - step * maxOffset;\n if (newMax > newMin) {\n chart.scale(field, {\n nice: false,\n min: newMin,\n max: newMax\n });\n }\n }\n };\n\n Zoom.prototype.process = function process(ev) {\n var me = this;\n var chart = me.chart,\n type = me.type;\n\n var coord = chart.get('coord');\n var deltaY = ev.deltaY;\n var offsetPoint = coord.invertPoint(ev);\n if (deltaY) {\n me.onZoom && me.onZoom(deltaY, offsetPoint, me);\n if (deltaY > 0) {\n me.onZoomin && me.onZoomin(deltaY, offsetPoint, me);\n } else {\n me.onZoomout && me.onZoomout(deltaY, offsetPoint, me);\n }\n var delta = deltaY / Math.abs(deltaY);\n if (type.indexOf('X') > -1) {\n me._applyScale(chart.getXScale(), delta, offsetPoint.x);\n }\n if (type.indexOf('Y') > -1) {\n var yScales = chart.getYScales();\n yScales.forEach(function (yScale) {\n me._applyScale(yScale, delta, offsetPoint.y);\n });\n }\n }\n chart.repaint();\n };\n\n Zoom.prototype.reset = function reset() {\n var me = this;\n var view = me.view,\n originScaleDefsByField = me.originScaleDefsByField;\n\n var scales = view.getYScales();\n var xScale = view.getXScale();\n scales.push(xScale);\n scales.forEach(function (scale) {\n if (scale.isLinear) {\n var field = scale.field;\n view.scale(field, originScaleDefsByField[field]);\n }\n });\n view.repaint();\n };\n\n return Zoom;\n}(Interaction);\n\n// G2.registerInteraction('zoom', Zoom);\n// G2.registerInteraction('Zoom', Zoom);\n\nmodule.exports = Zoom;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/zoom.js\n// module id = 121\n// module chunks = 0","var G = require('@antv/g/src');\nvar CommonUtil = G.CommonUtil;\n\nfunction bindInteraction(Lib, View) {\n // binding on Library\n Lib._Interactions = {};\n Lib.registerInteraction = function (type, constructor) {\n Lib._Interactions[type] = constructor;\n };\n Lib.getInteraction = function (type) {\n return G2._Interactions[type];\n };\n\n // binding on View\n View.prototype.getInteractions = function () {\n var me = this;\n if (!me._interactions) {\n me._interactions = {};\n }\n return me._interactions;\n };\n View.prototype._setInteraction = function (type, interaction) {\n var me = this;\n var interactions = me.getInteractions();\n if (interactions[type] && interactions[type] !== interaction) {\n // only one interaction for a key\n interactions[type].destroy();\n }\n interactions[type] = interaction;\n };\n View.prototype.clearInteraction = function (type) {\n var me = this;\n var interactions = me.getInteractions();\n if (type) {\n interactions[type] && interactions[type].destroy();\n delete interactions[type];\n } else {\n CommonUtil.each(interactions, function (interaction, key) {\n interaction.destroy();\n delete interactions[key];\n });\n }\n };\n View.prototype.interact = View.prototype.interaction = function (type, cfg) {\n var me = this;\n var Ctor = G2.getInteraction(type);\n var interaction = new Ctor(cfg, me);\n me._setInteraction(type, interaction);\n return me;\n };\n}\n\nmodule.exports = bindInteraction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/helper/bindInteraction.js\n// module id = 122\n// module chunks = 0"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3BA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACprDA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACp4BA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC/TA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACVA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3LA;AAAA;AAAA;AACA;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvDA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACZA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACheA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvyBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC9mBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjBA;AAAA;AACA;AACA;;;;;;;ACFA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACVA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACVA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpCA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACVA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACVA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpCA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;;ACHA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACVA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrHA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACxDA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3DA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACbA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACleA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}
\No newline at end of file